[*] Binary protection state of libpaho-mqtt3as.so.1.3.9
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of libpaho-mqtt3as.so.1.3.9
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x38d8).
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-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x3b98 */
| #include <stdint.h>
|
; (fcn) fcn.00003b98 () | void fcn_00003b98 (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00003b98 andhs r4, r3, 56, 22 | r4 = r3 & (56 22);
| }
0x00003b9c push.w {r4, r5, r6, r7, r8, lr} |
0x00003ba0 mov r8, r1 | r8 = r1;
0x00003ba2 ldr r1, [pc, 0xdc] |
0x00003ba4 mov r5, r0 | r5 = r0;
0x00003ba6 add r3, pc | r3 += pc;
0x00003ba8 sub sp, 8 |
0x00003baa add.w r0, r3, 0x3c | r0 = r3 + 0x3c;
0x00003bae ldr r3, [pc, 0xd4] | r3 = *(0x3c86);
0x00003bb0 add r1, pc | r1 = 0x7836;
0x00003bb2 ldr r7, [pc, 0xd4] |
0x00003bb4 ldr r6, [pc, 0xd4] |
0x00003bb6 ldr r3, [r1, r3] |
0x00003bb8 movs r1, 0x6a | r1 = 0x6a;
0x00003bba add r7, pc | r7 = 0x7848;
0x00003bbc add r6, pc | r6 = 0x784c;
0x00003bbe ldr r3, [r3] | r3 = *(0x7836);
0x00003bc0 str r3, [sp, 4] | var_4h = r3;
0x00003bc2 mov.w r3, 0 | r3 = 0;
0x00003bc6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00003bca movs r2, 8 | r2 = 8;
0x00003bcc movs r1, 0x6c | r1 = 0x6c;
0x00003bce mov r0, r7 | r0 = r7;
0x00003bd0 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
| if (r0 == 0) {
0x00003bd4 cbz r0, 0x3c1e | goto label_0;
| }
0x00003bd6 mov r4, r0 | r4 = r0;
0x00003bd8 movs r2, 0 | r2 = 0;
0x00003bda movs r1, 0xc | r1 = 0xc;
0x00003bdc movs r0, 3 | r0 = 3;
0x00003bde bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00003be2 mov r1, sp | r1 = sp;
0x00003be4 mov r0, r8 | r0 = r8;
0x00003be6 bl 0x3ae8 | fcn_00003ae8 (r0, r1);
0x00003bea str r0, [r4, 4] | *((r4 + 4)) = r0;
0x00003bec cmp r0, 0 |
| if (r0 == 0) {
0x00003bee beq 0x3c5e | goto label_2;
| }
0x00003bf0 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00003bf2 mov r1, r4 | r1 = r4;
0x00003bf4 ldr r2, [sp] | r2 = *(sp);
0x00003bf6 str r3, [r4] | *(r4) = r3;
0x00003bf8 ldr r3, [pc, 0x94] | r3 = *(0x3c90);
0x00003bfa adds r2, 8 | r2 += 8;
0x00003bfc ldr r0, [r6, r3] | r0 = *((r6 + r3));
0x00003bfe adds r0, 0x1c | r0 += 0x1c;
0x00003c00 bl 0xd5f8 | r0 = fcn_0000d5f8 (r0, r1, r2);
| if (r0 == 0) {
0x00003c04 cbz r0, 0x3c48 | goto label_3;
| }
0x00003c06 ldrd r0, r3, [r4] | __asm ("ldrd r0, r3, [r4]");
0x00003c0a ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00003c0c ldr r1, [r3] | r1 = *(r3);
0x00003c0e bl 0xd534 | r0 = fcn_0000d534 (r0, r1, r2);
| if (r0 == 0) {
0x00003c12 cbz r0, 0x3c6a | goto label_4;
| }
| label_1:
0x00003c14 movs r3, 0 | r3 = 0;
0x00003c16 str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
0x00003c1a str.w r3, [r8, 0x10] | __asm ("str.w r3, [r8, 0x10]");
| do {
| label_0:
0x00003c1e ldr r0, [pc, 0x74] |
0x00003c20 movs r3, 3 | r3 = 3;
0x00003c22 movs r2, 0 | r2 = 0;
0x00003c24 movs r1, 0x81 | r1 = 0x81;
0x00003c26 add r0, pc | r0 = 0x78c0;
0x00003c28 adds r0, 0x3c | r0 += 0x3c;
0x00003c2a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00003c2e ldr r2, [pc, 0x68] |
0x00003c30 ldr r3, [pc, 0x50] | r3 = *(0x3c84);
0x00003c32 add r2, pc | r2 = 0x78d0;
0x00003c34 ldr r3, [r2, r3] | r3 = *(0x78d0);
0x00003c36 ldr r2, [r3] | r2 = *(0x78d0);
0x00003c38 ldr r3, [sp, 4] | r3 = var_4h;
0x00003c3a eors r2, r3 | r2 ^= r3;
0x00003c3c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00003c40 bne 0x3c78 | goto label_5;
| }
0x00003c42 add sp, 8 |
0x00003c44 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00003c48 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00003c4a mov r0, r7 | r0 = r7;
0x00003c4c movs r1, 0x77 | r1 = 0x77;
0x00003c4e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00003c52 mov r2, r4 | r2 = r4;
0x00003c54 movs r1, 0x78 | r1 = 0x78;
0x00003c56 mov r0, r7 | r0 = r7;
0x00003c58 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00003c5c b 0x3c1e |
| } while (1);
| label_2:
0x00003c5e mov r2, r4 | r2 = r4;
0x00003c60 movs r1, 0x71 | r1 = 0x71;
0x00003c62 mov r0, r7 | r0 = r7;
0x00003c64 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00003c68 b 0x3c1e | goto label_0;
| label_4:
0x00003c6a ldr r2, [pc, 0x30] |
0x00003c6c mov r1, r0 | r1 = r0;
0x00003c6e movs r0, 6 | r0 = 6;
0x00003c70 add r2, pc | r2 = 0x7912;
0x00003c72 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00003c76 b 0x3c14 | goto label_1;
| label_5:
0x00003c78 blx 0x348c | fprintf_chk ()
0x00003c7c ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x00003c7e movs r1, r0 | r1 = r0;
0x00003c80 sub sp, 0x180 |
0x00003c82 movs r2, r0 | r2 = r0;
0x00003c84 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00003c86 movs r0, r0 |
0x00003c88 ldrh r6, [r3, r1] | r6 = *((r3 + r1));
0x00003c8a movs r1, r0 | r1 = r0;
0x00003c8c sub sp, 0x150 |
0x00003c8e movs r2, r0 | r2 = r0;
0x00003c90 lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x00003c92 movs r0, r0 |
0x00003c94 ldrb r2, [r5, r1] | r2 = *((r5 + r1));
0x00003c96 movs r1, r0 | r1 = r0;
0x00003c98 add sp, 0x178 |
0x00003c9a movs r2, r0 | r2 = r0;
0x00003c9c ldr r4, [r5, r7] | r4 = *((r5 + r7));
0x00003c9e movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x3ca0 */
| #include <stdint.h>
|
; (fcn) fcn.00003ca0 () | void fcn_00003ca0 (int16_t arg_378h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_8h;
| int16_t var_18h_2;
| int16_t var_1ch;
| int16_t var_40h;
| int16_t var_170h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00003ca0 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00003ca4 mov r7, r1 | r7 = r1;
0x00003ca6 ldr r1, [pc, 0x120] |
0x00003ca8 mov r8, r3 | r8 = r3;
0x00003caa mov r5, r0 | r5 = r0;
0x00003cac sub sp, 0x20 |
0x00003cae ldr r3, [pc, 0x11c] | r3 = *(0x3dce);
0x00003cb0 mov r6, r2 | r6 = r2;
0x00003cb2 add r1, pc | r1 = 0x7a80;
0x00003cb4 ldr r0, [pc, 0x118] |
0x00003cb6 movs r2, 0x34 | r2 = 0x34;
0x00003cb8 ldr r3, [r1, r3] |
0x00003cba movs r1, 0xc8 | r1 = 0xc8;
0x00003cbc add r0, pc | r0 = 0x7a90;
0x00003cbe ldr r3, [r3] | r3 = *(0x7a80);
0x00003cc0 str r3, [sp, 0x1c] | var_1ch = r3;
0x00003cc2 mov.w r3, 0 | r3 = 0;
0x00003cc6 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00003cca mov r4, r0 | r4 = r0;
0x00003ccc ldr r0, [pc, 0x104] |
0x00003cce movs r2, 3 | r2 = 3;
0x00003cd0 movs r1, 0xca | r1 = 0xca;
0x00003cd2 add r0, pc | r0 = 0x7aaa;
0x00003cd4 adds r0, 0x54 | r0 += 0x54;
0x00003cd6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
| if (r4 == 0) {
0x00003cda cbz r4, 0x3d20 | goto label_2;
| }
0x00003cdc ldr r3, [r7] | r3 = *(r7);
0x00003cde movs r2, 0x34 | r2 = 0x34;
0x00003ce0 str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x00003ce2 cmp r3, 0 |
| if (r3 == 0) {
0x00003ce4 beq 0x3d4c | goto label_3;
| }
0x00003ce6 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
| if (r3 == 0) {
0x00003ce8 cbz r3, 0x3d4c | goto label_3;
| }
0x00003cea ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00003cec adds r2, 1 | r2++;
0x00003cee str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00003cf0 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
| do {
| label_0:
0x00003cf2 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00003cf4 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00003cf6 strd r6, r8, [r4] | __asm ("strd r6, r8, [r4]");
0x00003cfa cmp r3, 4 |
0x00003cfc strd r2, r3, [r4, 8] | __asm ("strd r2, r3, [r4, 8]");
| if (r3 > 4) {
0x00003d00 bgt 0x3d90 | goto label_4;
| }
| label_1:
0x00003d02 mov r5, sp | r5 = sp;
0x00003d04 mov r0, r5 | r0 = r5;
0x00003d06 bl 0x38d8 | r0 = fcn_000038d8 (r0);
0x00003d0a ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00003d0e add.w r3, r4, 0x24 | r3 = r4 + 0x24;
0x00003d12 cmp r6, 2 |
0x00003d14 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00003d16 movs r3, r0 | r3 = r0;
0x00003d18 itt eq |
| if (r3 != r0) {
0x00003d1a moveq r3, 5 | r3 = 5;
| }
| if (r3 != r0) {
0x00003d1c strbeq r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| }
| label_2:
0x00003d20 ldr r0, [pc, 0xb4] |
0x00003d22 movs r3, 3 | r3 = 3;
0x00003d24 movs r2, 0 | r2 = 0;
0x00003d26 movs r1, 0xf3 | r1 = 0xf3;
0x00003d28 add r0, pc | r0 = 0x7b04;
0x00003d2a adds r0, 0x54 | r0 += 0x54;
0x00003d2c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00003d30 ldr r2, [pc, 0xa8] |
0x00003d32 ldr r3, [pc, 0x98] | r3 = *(0x3dce);
0x00003d34 add r2, pc | r2 = 0x7b14;
0x00003d36 ldr r3, [r2, r3] | r3 = *(0x7b14);
0x00003d38 ldr r2, [r3] | r2 = *(0x7b14);
0x00003d3a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00003d3c eors r2, r3 | r2 ^= r3;
0x00003d3e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00003d42 bne 0x3dc4 | goto label_5;
| }
0x00003d44 mov r0, r4 | r0 = r4;
0x00003d46 add sp, 0x20 |
0x00003d48 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x00003d4c str r4, [r7] | *(r7) = r4;
0x00003d4e add r1, sp, 0x18 | r1 += var_18h_2;
0x00003d50 mov r0, r5 | r0 = r5;
0x00003d52 bl 0x3ae8 | r0 = fcn_00003ae8 (r0, r1);
0x00003d56 mov r7, r0 | r7 = r0;
0x00003d58 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
| if (r0 == 0) {
0x00003d5a cbz r0, 0x3daa | goto label_6;
| }
0x00003d5c ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00003d5e ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00003d60 add r3, r2 | r3 += r2;
0x00003d62 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00003d64 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00003d66 cmp r3, 0 |
0x00003d68 beq 0x3cf2 |
| } while (r3 == 0);
0x00003d6a ldr.w sb, [pc, 0x74] |
0x00003d6e movs r1, 0xdc | r1 = 0xdc;
0x00003d70 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00003d72 ldr.w sl, [r0, 8] | sl = *((r0 + 8));
0x00003d76 add sb, pc | sb = 0x7b5c;
0x00003d78 mov r0, sb | r0 = sb;
0x00003d7a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00003d7e str r0, [r7, 8] | *((r7 + 8)) = r0;
| if (r0 != 0) {
0x00003d80 cbz r0, 0x3db8 |
0x00003d82 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00003d84 mov r1, sl | r1 = sl;
0x00003d86 ldrd r0, r2, [r3, 8] | __asm ("ldrd r0, r2, [r3, 8]");
0x00003d8a blx 0x32a0 | pthread_cond_signal ();
0x00003d8e b 0x3cf2 | goto label_0;
| label_4:
0x00003d90 add.w r1, r5, 0x1c | r1 = r5 + 0x1c;
0x00003d94 add r5, sp, 8 | r5 += var_8h;
0x00003d96 mov r0, r5 | r0 = r5;
0x00003d98 add.w r7, r4, 0x10 | r7 = r4 + 0x10;
0x00003d9c blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x00003da0 ldm.w r5, {r0, r1, r2, r3} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
| r3 = *((r5 + 12));
0x00003da4 stm.w r7, {r0, r1, r2, r3} | *(r7) = r0;
| *((r7 + 4)) = r1;
| *((r7 + 8)) = r2;
| *((r7 + 12)) = r3;
0x00003da8 b 0x3d02 | goto label_1;
| label_6:
0x00003daa ldr r0, [pc, 0x38] |
0x00003dac mov r2, r4 | r2 = r4;
0x00003dae movs r1, 0xd4 | r1 = 0xd4;
0x00003db0 add r0, pc | r0 = 0x7b9a;
0x00003db2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00003db6 b 0x3d20 | goto label_2;
| }
0x00003db8 mov r2, r4 | r2 = r4;
0x00003dba movs r1, 0xde | r1 = 0xde;
0x00003dbc mov r0, sb | r0 = sb;
0x00003dbe bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00003dc2 b 0x3d20 | goto label_2;
| label_5:
0x00003dc4 blx 0x348c | fprintf_chk ()
0x00003dc8 add r7, sp, 0x378 | r7 += arg_378h;
0x00003dca movs r2, r0 | r2 = r0;
0x00003dcc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00003dce movs r0, r0 |
0x00003dd0 ldr r4, [r3, r5] | r4 = *((r3 + r5));
0x00003dd2 movs r1, r0 | r1 = r0;
0x00003dd4 ldrh r6, [r7, r6] | r6 = *((r7 + r6));
0x00003dd6 movs r1, r0 | r1 = r0;
0x00003dd8 ldrh r0, [r5, r5] | r0 = *((r5 + r5));
0x00003dda movs r1, r0 | r1 = r0;
0x00003ddc add r7, sp, 0x170 | r7 += var_170h;
0x00003dde movs r2, r0 | r2 = r0;
0x00003de0 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00003de2 movs r1, r0 | r1 = r0;
0x00003de4 ldr r0, [r5, r1] | r0 = *((r5 + r1));
0x00003de6 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x3de8 */
| #include <stdint.h>
|
; (fcn) fcn.00003de8 () | void fcn_00003de8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_2ch;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_78h;
| int16_t var_258h;
| int16_t var_398h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00003de8 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00003dec mov r4, r2 | r4 = r2;
0x00003dee ldr r2, [pc, 0x158] |
0x00003df0 mov r8, r3 | r8 = r3;
0x00003df2 sub sp, 0x54 |
0x00003df4 mov lr, r1 | lr = r1;
0x00003df6 ldr r3, [pc, 0x154] | r3 = *(0x3f4e);
0x00003df8 mov r7, r1 | r7 = r1;
0x00003dfa add r2, pc | r2 = 0x7d48;
0x00003dfc mov r6, r0 | r6 = r0;
0x00003dfe add.w fp, sp, 0x1c |
0x00003e02 ldr r5, [pc, 0x14c] |
0x00003e04 ldr r3, [r2, r3] |
0x00003e06 mov ip, fp |
0x00003e08 mov.w sb, 0 | sb = 0;
0x00003e0c ldr.w sl, [sp, 0x78] | sl = var_78h;
0x00003e10 add r5, pc | r5 = 0x7d66;
0x00003e12 ldr r3, [r3] | r3 = *(0x7d48);
0x00003e14 str r3, [sp, 0x4c] | var_4ch = r3;
0x00003e16 mov.w r3, 0 | r3 = 0;
0x00003e1a add.w r3, r0, 0x1c | r3 = r0 + 0x1c;
0x00003e1e str r3, [sp, 0xc] | var_ch = r3;
0x00003e20 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00003e24 str.w sb, [sp, 0x14] | __asm ("str.w sb, [var_14h]");
0x00003e28 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00003e2c ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00003e30 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00003e34 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x00003e38 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00003e3c movs r2, 3 | r2 = 3;
0x00003e3e movs r1, 0xa8 | r1 = 0xa8;
0x00003e40 add.w r0, r5, 0x70 | r0 = r5 + 0x70;
0x00003e44 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00003e48 cmp r4, sb |
| if (r4 > sb) {
0x00003e4a bgt 0x3ec0 | goto label_0;
| }
0x00003e4c adds r5, 0x8c | r5 += 0x8c;
0x00003e4e movs r2, 3 | r2 = 3;
0x00003e50 movs r1, 0x91 | r1 = 0x91;
0x00003e52 mov r0, r5 | r0 = r5;
0x00003e54 str.w sb, [sp, 0x18] | __asm ("str.w sb, [var_18h]");
0x00003e58 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00003e5c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00003e5e mov r1, sb | r1 = sb;
0x00003e60 mov r0, r7 | r0 = r7;
0x00003e62 str r3, [sp] | *(sp) = r3;
0x00003e64 mov r3, r8 | r3 = r8;
0x00003e66 ldr r2, [r6] | r2 = *(r6);
0x00003e68 str r2, [sp, 4] | var_4h_2 = r2;
0x00003e6a mov r2, r4 | r2 = r4;
0x00003e6c bl 0x64c4 | fcn_000064c4 (r0, r1, r2, r3, r4, r5);
0x00003e70 cmp r4, 0 |
0x00003e72 it eq |
| if (r4 == 0) {
0x00003e74 cmneq r0, 0x16 | __asm ("cmneq r0, 0x16");
| }
0x00003e78 str r0, [sp, 0x18] | var_18h = r0;
| if (r4 == 0) {
0x00003e7a bne 0x3e84 |
0x00003e7c mov r1, r7 | r1 = r7;
0x00003e7e mov r0, r6 | r0 = r6;
0x00003e80 bl 0x3b98 | fcn_00003b98 (r0, r1);
| }
0x00003e84 movs r3, 3 | r3 = 3;
0x00003e86 add r2, sp, 0x18 | r2 += var_18h;
0x00003e88 movs r1, 0x95 | r1 = 0x95;
0x00003e8a mov r0, r5 | r0 = r5;
0x00003e8c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00003e90 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00003e92 str r3, [sp, 0x14] | var_14h = r3;
| do {
0x00003e94 ldr r0, [pc, 0xbc] |
0x00003e96 movs r3, 3 | r3 = 3;
0x00003e98 add r2, sp, 0x14 | r2 += var_14h;
0x00003e9a movs r1, 0xb8 | r1 = 0xb8;
0x00003e9c add r0, pc | r0 = 0x7df4;
0x00003e9e adds r0, 0x70 | r0 += 0x70;
0x00003ea0 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00003ea4 ldr r2, [pc, 0xb0] |
0x00003ea6 ldr r3, [pc, 0xa4] | r3 = *(0x3f4e);
0x00003ea8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00003eaa add r2, pc | r2 = 0x7e06;
0x00003eac ldr r3, [r2, r3] | r3 = *(0x7e06);
0x00003eae ldr r2, [r3] | r2 = *(0x7e06);
0x00003eb0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00003eb2 eors r2, r3 | r2 ^= r3;
0x00003eb4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00003eb8 bne 0x3f44 | goto label_1;
| }
0x00003eba add sp, 0x54 |
0x00003ebc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_0:
0x00003ec0 mov r3, r8 | r3 = r8;
0x00003ec2 mov r0, r7 | r0 = r7;
0x00003ec4 mov r2, r4 | r2 = r4;
0x00003ec6 mov r1, sl | r1 = sl;
0x00003ec8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00003ecc adds r5, 0x8c | r5 += 0x8c;
0x00003ece bl 0x3ca0 | fcn_00003ca0 (r0, r1, r2, r3, r4);
0x00003ed2 ldr r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x00003ed4 mov r1, r0 | r1 = r0;
0x00003ed6 str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x00003eda add r7, sp, 0x38 | r7 += var_38h;
0x00003edc ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x00003ede bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00003ee2 ldr.w r2, [sl] | r2 = *(sl);
0x00003ee6 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00003ee8 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
0x00003eec ldr.w ip, [r2, 0xc] | ip = *((r2 + 0xc));
0x00003ef0 ldr r2, [r1] | r2 = *(r1);
0x00003ef2 str.w sb, [sp, 0x18] | __asm ("str.w sb, [var_18h]");
0x00003ef6 str r2, [sp, 0x20] | var_20h = r2;
0x00003ef8 ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00003efa str r2, [sp, 0x2c] | var_2ch = r2;
0x00003efc ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00003efe str.w ip, [sp, 0x34] | __asm ("str.w ip, [var_34h]");
0x00003f02 stm.w r7, {r0, r1, r2, r3} | *(r7) = r0;
| *((r7 + 4)) = r1;
| *((r7 + 8)) = r2;
| *((r7 + 12)) = r3;
0x00003f06 movs r2, 3 | r2 = 3;
0x00003f08 movs r1, 0x91 | r1 = 0x91;
0x00003f0a mov r0, r5 | r0 = r5;
0x00003f0c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00003f10 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00003f12 mov r2, r4 | r2 = r4;
0x00003f14 mov r1, sb | r1 = sb;
0x00003f16 mov r0, fp | r0 = fp;
0x00003f18 str r3, [sp] | *(sp) = r3;
0x00003f1a ldr r3, [r6] | r3 = *(r6);
0x00003f1c str r3, [sp, 4] | var_4h_2 = r3;
0x00003f1e mov r3, r8 | r3 = r8;
0x00003f20 bl 0x64c4 | r0 = fcn_000064c4 (r0, r1, r2, r3, r4, r5);
0x00003f24 mov r1, r0 | r1 = r0;
0x00003f26 movs r3, 3 | r3 = 3;
0x00003f28 add r2, sp, 0x18 | r2 += var_18h;
0x00003f2a str r1, [sp, 0x18] | var_18h = r1;
0x00003f2c mov r0, r5 | r0 = r5;
0x00003f2e movs r1, 0x95 | r1 = 0x95;
0x00003f30 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00003f34 ldr.w r3, [sl] | r3 = *(sl);
0x00003f38 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00003f3a ldr r2, [sp, 0x48] | r2 = var_48h;
0x00003f3c ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00003f3e str r1, [sp, 0x14] | var_14h = r1;
0x00003f40 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x00003f42 b 0x3e94 |
| } while (1);
| label_1:
0x00003f44 blx 0x348c | fprintf_chk ()
0x00003f48 add r6, sp, 0x258 | r6 += var_258h;
0x00003f4a movs r2, r0 | r2 = r0;
0x00003f4c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00003f4e movs r0, r0 |
0x00003f50 ldrh r0, [r0, r2] | r0 = *((r0 + r2));
0x00003f52 movs r1, r0 | r1 = r0;
0x00003f54 ldr r4, [r6, r7] | r4 = *((r6 + r7));
0x00003f56 movs r1, r0 | r1 = r0;
0x00003f58 add r5, sp, 0x398 | r5 += var_398h;
0x00003f5a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x3fd8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00003fd8 () | void fcn_00003fd8 (int16_t arg_250h, int16_t arg_270h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int32_t var_58h;
| int32_t var_58h_2;
| int16_t var_60h;
| int16_t var_74h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00003fd8 andhs r4, r3, 0x26400 | r4 = r3 & 0x26400;
| }
0x00003fdc push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00003fe0 sub sp, 0x7c |
0x00003fe2 str r1, [sp, 0x34] | var_34h = r1;
0x00003fe4 mov r4, r0 | r4 = r0;
0x00003fe6 add r3, pc | r3 += pc;
0x00003fe8 movs r6, 0 | r6 = 0;
0x00003fea ldr r1, [pc, 0x258] |
0x00003fec add.w r0, r3, 0xcc | r0 = r3 + 0xcc;
0x00003ff0 ldr r3, [pc, 0x254] | r3 = *(0x4248);
0x00003ff2 ldr r5, [pc, 0x258] |
0x00003ff4 add r1, pc | r1 = 0x823e;
0x00003ff6 ldr r3, [r1, r3] |
0x00003ff8 mov.w r1, 0x13c | r1 = 0x13c;
0x00003ffc add r5, pc | r5 = 0x824e;
0x00003ffe ldr r3, [r3] | r3 = *(0x823e);
0x00004000 str r3, [sp, 0x74] | var_74h = r3;
0x00004002 mov.w r3, 0 | r3 = 0;
0x00004006 str r6, [sp, 0x3c] | var_3ch = r6;
0x00004008 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000400c ldr r2, [pc, 0x240] | r2 = *(0x4250);
0x0000400e ldr r3, [pc, 0x244] | r3 = *(0x4256);
0x00004010 ldr r1, [r5, r2] | r1 = *(0x824e);
0x00004012 ldr r2, [r5, r3] | r2 = *(0x824e);
0x00004014 ldr r3, [r1] | r3 = *(0x824e);
0x00004016 add r1, sp, 0x34 | r1 += var_34h;
0x00004018 ldr r0, [r3, 4] | r0 = *(0x8252);
0x0000401a bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000401e ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00004020 mov r2, r6 | r2 = r6;
0x00004022 ldr r7, [r0, 8] | r7 = *(0x825a);
0x00004024 movs r0, 4 | r0 = 4;
0x00004026 cmp r3, 0x14 |
0x00004028 str r3, [sp, 0x10] | var_10h = r3;
0x0000402a it ge |
| if (r3 < 0x14) {
0x0000402c movge r3, 0x14 | r3 = 0x14;
| }
0x0000402e str r3, [sp, 0x14] | var_14h = r3;
0x00004030 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00004032 ldrb r3, [r4] | r3 = *(r4);
0x00004034 str r1, [sp, 0x18] | var_18h = r1;
0x00004036 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00004038 str r1, [sp, 4] | var_4h = r1;
0x0000403a and r1, r3, 1 | r1 = r3 & 1;
0x0000403e ubfx r3, r3, 1, 2 | r3 = (r3 >> 1) & ((1 << 2) - 1);
0x00004042 str r1, [sp, 0xc] | var_ch = r1;
0x00004044 str r3, [sp, 8] | var_8h = r3;
0x00004046 movs r1, 0xb | r1 = 0xb;
0x00004048 ldr r3, [r7] | r3 = *(0x825a);
0x0000404a str r3, [sp] | *(sp) = r3;
0x0000404c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000404e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004052 ldrb r3, [r4] | r3 = *(r4);
0x00004054 tst.w r3, 6 |
| if ((r3 & 6) != 0) {
0x00004058 bne 0x409a | goto label_4;
| }
0x0000405a movs r2, 1 | r2 = 1;
0x0000405c mov r1, r7 | r1 = r7;
0x0000405e mov r0, r4 | r0 = r4;
0x00004060 bl 0x16598 | fcn_00016598 (r0, r1, r2);
| do {
| label_0:
0x00004064 mov r0, r4 | r0 = r4;
0x00004066 bl 0x60cc | fcn_000060cc (r0);
0x0000406a ldr r0, [pc, 0x1ec] |
0x0000406c movs r3, 3 | r3 = 3;
0x0000406e add r2, sp, 0x3c | r2 += var_3ch;
0x00004070 movw r1, 0x191 | r1 = 0x191;
0x00004074 add r0, pc | r0 = 0x82d2;
0x00004076 adds r0, 0xcc | r0 += 0xcc;
0x00004078 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000407c ldr r2, [pc, 0x1dc] |
0x0000407e ldr r3, [pc, 0x1c8] | r3 = *(0x424a);
0x00004080 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00004082 add r2, pc | r2 = 0x82e2;
0x00004084 ldr r3, [r2, r3] | r3 = *(0x82e2);
0x00004086 ldr r2, [r3] | r2 = *(0x82e2);
0x00004088 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0000408a eors r2, r3 | r2 ^= r3;
0x0000408c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004090 bne.w 0x423a | goto label_5;
| }
0x00004094 add sp, 0x7c |
0x00004096 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x0000409a ldr r0, [sp, 0x34] | r0 = var_34h;
0x0000409c bl 0x82b4 | r0 = fcn_000082b4 (r0);
| if (r0 != 0) {
0x000040a0 cbnz r0, 0x40aa | goto label_6;
| }
0x000040a2 mov.w r3, -1 | r3 = -1;
0x000040a6 str r3, [sp, 0x3c] | var_3ch = r3;
0x000040a8 b 0x4064 |
| } while (1);
| label_6:
0x000040aa ldrb r3, [r4] | r3 = *(r4);
0x000040ac and r3, r3, 6 | r3 &= 6;
0x000040b0 cmp r3, 2 |
| if (r3 == 2) {
0x000040b2 beq 0x416c | goto label_7;
| }
0x000040b4 cmp r3, 4 |
| if (r3 != 4) {
0x000040b6 bne 0x4064 | goto label_0;
| }
0x000040b8 ldr r0, [pc, 0x1a4] |
0x000040ba movs r2, 0x34 | r2 = 0x34;
0x000040bc movw r1, 0x153 | r1 = 0x153;
0x000040c0 add r0, pc | r0 = 0x8324;
0x000040c2 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000040c6 mov r6, r0 | r6 = r0;
0x000040c8 cmp r0, 0 |
| if (r0 == 0) {
0x000040ca beq 0x418a | goto label_8;
| }
0x000040cc add r1, sp, 0x40 | r1 += var_40h;
0x000040ce mov r0, r4 | r0 = r4;
0x000040d0 bl 0x3ae8 | fcn_00003ae8 (r0, r1);
0x000040d4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000040d6 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x000040d8 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x000040da ldrb r3, [r4] | r3 = *(r4);
0x000040dc ubfx r3, r3, 1, 2 | r3 = (r3 >> 1) & ((1 << 2) - 1);
0x000040e0 str r3, [r6] | *(r6) = r3;
0x000040e2 ldrb r3, [r4] | r3 = *(r4);
0x000040e4 and r3, r3, 1 | r3 &= 1;
0x000040e8 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x000040ea ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000040ec cmp r3, 4 |
0x000040ee str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000040f0 bgt 0x4192 |
| while (1) {
0x000040f2 ldr r2, [pc, 0x170] |
0x000040f4 movs r3, 6 | r3 = 6;
0x000040f6 strb.w r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x000040fa add.w r1, r6, 8 | r1 = r6 + 8;
0x000040fe ldr r0, [r7, 0x70] | r0 = *((r7 + 0x70));
0x00004100 add.w sb, r7, 0x1c | sb = r7 + 0x1c;
0x00004104 add r2, pc | r2 = 0x836e;
0x00004106 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x0000410a mov r8, r0 | r8 = r0;
0x0000410c cmp r0, 0 |
| if (r0 == 0) {
0x0000410e beq 0x41ae | goto label_9;
| }
0x00004110 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x00004112 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00004114 bl 0x3f5c | fcn_00003f5c (r0);
0x00004116 invalid |
0x0000411a cmp r3, 4 |
| if (r3 > 4) {
0x0000411c bgt.w 0x4230 | goto label_10;
| }
| label_3:
0x00004120 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00004122 mov r3, r8 | r3 = r8;
0x00004124 mov r1, r6 | r1 = r6;
0x00004126 ldr r0, [r7, 0x70] | r0 = *((r7 + 0x70));
0x00004128 adds r2, 0x34 | r2 += 0x34;
0x0000412a bl 0xd638 | fcn_0000d638 (r0, r1, r2, r3);
0x0000412e mov r1, r5 | r1 = r5;
0x00004130 ldr r0, [r7, 0x70] | r0 = *((r7 + 0x70));
0x00004132 bl 0xd800 | fcn_0000d800 (r0, r1);
0x00004136 ldr r3, [r7] | r3 = *(r7);
0x00004138 mov r2, sb | r2 = sb;
0x0000413a ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0000413c ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0000413e bl 0x62ec | fcn_000062ec (r0, r1, r2, r3);
0x00004142 str r0, [sp, 0x3c] | var_3ch = r0;
| label_1:
0x00004144 ldr r5, [r6, 0x20] | r5 = *((r6 + 0x20));
0x00004146 mov.w r1, 0x186 | r1 = 0x186;
0x0000414a ldr r0, [pc, 0x11c] |
0x0000414c ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0000414e add r0, pc | r0 = 0x83bc;
0x00004150 ldr r7, [r5, 8] | r7 = *((r5 + 8));
0x00004152 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00004154 vaddl.u8 q3, d19, d24 | __asm ("vaddl.u8 q3, d19, d24");
| if (r0 != 0) {
0x00004158 cbz r0, 0x418a |
0x0000415a ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0000415c mov r1, r7 | r1 = r7;
0x0000415e ldrd r0, r2, [r3, 8] | __asm ("ldrd r0, r2, [r3, 8]");
0x00004162 blx 0x32a0 | pthread_cond_signal ();
| label_2:
0x00004166 movs r3, 0 | r3 = 0;
0x00004168 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0000416a b 0x4064 | goto label_0;
| label_7:
0x0000416c mov r2, r7 | r2 = r7;
0x0000416e ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00004170 ldr r3, [r2], 0x1c | r3 = *(r2);
| r2 += 0x1c;
0x00004174 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00004176 bl 0x6190 | fcn_00006190 (r0, r1, r2, r3);
0x0000417a movs r2, 1 | r2 = 1;
0x0000417c mov r3, r0 | r3 = r0;
0x0000417e mov r1, r7 | r1 = r7;
0x00004180 mov r0, r4 | r0 = r4;
0x00004182 str r3, [sp, 0x3c] | var_3ch = r3;
0x00004184 bl 0x16598 | fcn_00016598 (r0, r1, r2);
0x00004188 b 0x4064 | goto label_0;
| }
| label_8:
0x0000418a mvn r3, 0x62 | r3 = ~0x62;
0x0000418e str r3, [sp, 0x3c] | var_3ch = r3;
0x00004190 b 0x4064 | goto label_0;
0x00004192 add.w r8, sp, 0x20 | r8 += var_20h;
0x00004196 add.w r1, r4, 0x1c | r1 = r4 + 0x1c;
0x0000419a mov r0, r8 | r0 = r8;
0x0000419c blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x000041a0 ldm.w r8, {r0, r1, r2, r3} | r0 = *(r8);
| r1 = *((r8 + 4));
| r2 = *((r8 + 8));
| r3 = *((r8 + 12));
0x000041a4 add.w ip, r6, 0x10 |
0x000041a8 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000041ac b 0x40f2 |
| }
| label_9:
0x000041ae ldr r2, [sp, 0x40] | r2 = var_40h;
0x000041b0 mov r1, r6 | r1 = r6;
0x000041b2 ldr r0, [r7, 0x70] | r0 = *((r7 + 0x70));
0x000041b4 adds r2, 0x34 | r2 += 0x34;
0x000041b6 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x000041ba ldr r3, [r7] | r3 = *(r7);
0x000041bc mov r2, sb | r2 = sb;
0x000041be ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x000041c0 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x000041c2 bl 0x62ec | fcn_000062ec (r0, r1, r2, r3);
0x000041c6 ldr.w ip, [r6, 0xc] | ip = *((r6 + 0xc));
0x000041ca str r0, [sp, 0x3c] | var_3ch = r0;
0x000041cc cmp.w ip, 4 |
| if (ip <= 4) {
0x000041d0 ble 0x4144 | goto label_1;
| }
0x000041d2 ldr r3, [r6] | r3 = *(r6);
0x000041d4 ldrb.w r0, [sp, 0x44] | r0 = var_44h;
0x000041d8 ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x000041da and r2, r3, 3 | r2 = r3 & 3;
0x000041de ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000041e0 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x000041e4 and r3, r3, 1 | r3 &= 1;
0x000041e8 orr.w r3, r3, r2, lsl 1 | r3 |= (r2 << 1);
0x000041ec add.w r2, r6, 0x10 | r2 = r6 + 0x10;
0x000041f0 orrs r3, r0 | r3 |= r0;
0x000041f2 strb.w r3, [sp, 0x44] | var_44h = r3;
0x000041f6 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000041f8 str r3, [sp, 0x50] | var_50h = r3;
0x000041fa ldr r3, [r1] | r3 = *(r1);
0x000041fc str r3, [sp, 0x48] | var_48h = r3;
0x000041fe ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00004200 str r3, [sp, 0x4c] | var_4ch = r3;
0x00004202 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00004204 str r3, [sp, 0x54] | var_54h = r3;
0x00004206 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x00004208 strd r3, ip, [sp, 0x58] | __asm ("strd r3, ip, [var_58h]");
0x0000420c add.w ip, sp, 0x60 |
0x00004210 ldm r2, {r0, r1, r2, r3} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
| r3 = *((r2 + 12));
0x00004212 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00004216 mov r1, r7 | r1 = r7;
0x00004218 movs r2, 1 | r2 = 1;
0x0000421a add r0, sp, 0x44 | r0 += var_44h;
0x0000421c bl 0x16598 | fcn_00016598 (r0, r1, r2);
0x00004220 ldr r3, [pc, 0x48] | r3 = *(0x426c);
0x00004222 ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x00004224 ldr r0, [r5, r3] | r0 = *((r5 + r3));
0x00004226 bl 0xd800 | fcn_0000d800 (r0, r1);
0x0000422a str.w r8, [r6, 0x20] | __asm ("str.w r8, [r6, 0x20]");
0x0000422e b 0x4166 | goto label_2;
| label_10:
0x00004230 add.w r0, r5, 0x10 | r0 = r5 + 0x10;
0x00004234 blx 0x3620 | fcn_00003620 ();
0x00004238 b 0x4120 | goto label_3;
| label_5:
0x0000423a blx 0x348c | fprintf_chk ()
0x0000423e nop |
0x00004240 ldr r2, [r5, r2] | r2 = *((r5 + r2));
0x00004242 movs r1, r0 | r1 = r0;
0x00004244 add r4, sp, 0x270 | r4 += arg_270h;
0x00004246 movs r2, r0 | r2 = r0;
0x00004248 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000424a movs r0, r0 |
0x0000424c add r4, sp, 0x250 | r4 += arg_250h;
0x0000424e movs r2, r0 | r2 = r0;
0x00004250 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x00004252 movs r0, r0 |
0x00004254 lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x00004256 movs r0, r0 |
0x00004258 ldr r4, [r3, r0] | r4 = *((r3 + r0));
0x0000425a movs r1, r0 | r1 = r0;
0x0000425c add r4, sp, 0x38 | r4 += var_38h;
0x0000425e movs r2, r0 | r2 = r0;
0x00004260 strb r0, [r3, r5] | *((r3 + r5)) = r0;
0x00004262 movs r1, r0 | r1 = r0;
0x00004264 ldrsb pc, [sp, 0xff]! | pc = *((sp += 0xff));
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x4270 */
| #include <stdint.h>
|
; (fcn) fcn.00004270 () | void fcn_00004270 (int16_t arg_188h, int16_t arg_3f0h, int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00004270 andhs r4, r3, 0x14400 | r4 = r3 & 0x14400;
| }
0x00004274 push {r4, r5, r6, r7, lr} |
0x00004276 sub sp, 0x24 |
0x00004278 str r1, [sp, 0x14] | var_14h = r1;
0x0000427a mov r4, r0 | r4 = r0;
0x0000427c add r3, pc | r3 += pc;
0x0000427e movs r7, 0 | r7 = 0;
0x00004280 ldr r1, [pc, 0x138] |
0x00004282 add.w r0, r3, 0xec | r0 = r3 + 0xec;
0x00004286 ldr r3, [pc, 0x138] | r3 = *(0x43c2);
0x00004288 mov r6, r4 | r6 = r4;
0x0000428a ldr r5, [pc, 0x138] |
0x0000428c add r1, pc | r1 = 0x864c;
0x0000428e ldr r3, [r1, r3] |
0x00004290 movw r1, 0x1a1 | r1 = 0x1a1;
0x00004294 add r5, pc | r5 = 0x865e;
0x00004296 ldr r3, [r3] | r3 = *(0x864c);
0x00004298 str r3, [sp, 0x1c] | var_1ch = r3;
0x0000429a mov.w r3, 0 | r3 = 0;
0x0000429e str r7, [sp, 0x18] | var_18h = r7;
0x000042a0 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000042a4 ldr r2, [pc, 0x120] | r2 = *(0x43c8);
0x000042a6 ldr r3, [pc, 0x124] | r3 = *(0x43ce);
0x000042a8 ldr r1, [r5, r2] | r1 = *(0x865e);
0x000042aa ldr r2, [r5, r3] | r2 = *(0x865e);
0x000042ac ldr r3, [r1] | r3 = *(0x865e);
0x000042ae add r1, sp, 0x14 | r1 += var_14h;
0x000042b0 ldr r0, [r3, 4] | r0 = *(0x8662);
0x000042b2 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x000042b6 ldr r3, [r6, 4]! | r3 = *((r6 += 4));
0x000042ba mov r2, r7 | r2 = r7;
0x000042bc ldr r5, [r0, 8] | r5 = *(0x866a);
0x000042be movs r1, 0xe | r1 = 0xe;
0x000042c0 movs r0, 4 | r0 = 4;
0x000042c2 str r3, [sp, 4] | var_4h = r3;
0x000042c4 ldr r3, [r5] | r3 = *(0x866a);
0x000042c6 str r3, [sp] | *(sp) = r3;
0x000042c8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000042ca bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000042ce ldr r2, [pc, 0x100] |
0x000042d0 mov r1, r6 | r1 = r6;
0x000042d2 ldr r0, [r5, 0x74] | r0 = *(0x86de);
0x000042d4 add r2, pc | r2 = 0x86aa;
0x000042d6 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x000042da cmp r0, 0 |
| if (r0 == 0) {
0x000042dc beq 0x4392 | goto label_2;
| }
0x000042de ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000042e0 ldr r1, [r5] | r1 = *(r5);
0x000042e2 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000042e4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000042e6 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000042e8 ldr r3, [r6] | r3 = *(r6);
0x000042ea cmp r3, 1 |
| if (r3 == 1) {
0x000042ec beq 0x434c | goto label_3;
| }
0x000042ee str r3, [sp, 8] | var_8h = r3;
0x000042f0 mov r2, r7 | r2 = r7;
0x000042f2 ldr r3, [pc, 0xe0] |
0x000042f4 strd r1, r0, [sp] | __asm ("strd r1, r0, [sp]");
0x000042f8 movs r1, 4 | r1 = 4;
0x000042fa movs r0, 3 | r0 = 3;
0x000042fc add r3, pc | r3 = 0x86d6;
0x000042fe bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_0:
0x00004302 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00004304 cmp r3, 4 |
0x00004306 bgt 0x4342 |
| while (1) {
0x00004308 ldr r0, [pc, 0xcc] |
0x0000430a mov r2, r4 | r2 = r4;
0x0000430c movw r1, 0x1bd | r1 = 0x1bd;
0x00004310 add r0, pc | r0 = 0x86ec;
0x00004312 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00004316 ldr r0, [pc, 0xc4] |
0x00004318 movs r3, 3 | r3 = 3;
0x0000431a add r2, sp, 0x18 | r2 += var_18h;
0x0000431c mov.w r1, 0x1be | r1 = 0x1be;
0x00004320 add r0, pc | r0 = 0x8702;
0x00004322 adds r0, 0xec | r0 += 0xec;
0x00004324 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00004328 ldr r2, [pc, 0xb4] |
0x0000432a ldr r3, [pc, 0x94] | r3 = *(0x43c2);
0x0000432c ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000432e add r2, pc | r2 = 0x8712;
0x00004330 ldr r3, [r2, r3] | r3 = *(0x8712);
0x00004332 ldr r2, [r3] | r2 = *(0x8712);
0x00004334 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004336 eors r2, r3 | r2 ^= r3;
0x00004338 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000433c bne 0x43b4 | goto label_4;
| }
0x0000433e add sp, 0x24 |
0x00004340 pop {r4, r5, r6, r7, pc} |
0x00004342 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x00004346 blx 0x3620 | fcn_00003620 ();
0x0000434a b 0x4308 |
| }
| label_3:
0x0000434c ldr r3, [pc, 0x94] |
0x0000434e mov r2, r7 | r2 = r7;
0x00004350 str r0, [sp, 4] | var_4h = r0;
0x00004352 movs r0, 3 | r0 = 3;
0x00004354 str r1, [sp] | *(sp) = r1;
0x00004356 movs r1, 6 | r1 = 6;
0x00004358 add r3, pc | r3 = 0x8740;
0x0000435a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000435e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00004360 cmp r3, 4 |
| if (r3 > 4) {
0x00004362 bgt 0x438c | goto label_5;
| }
0x00004364 ldr r1, [pc, 0x80] |
0x00004366 add r1, pc | r1 = 0x8752;
| do {
0x00004368 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000436a mov r0, r5 | r0 = r5;
0x0000436c ldr r2, [r6] | r2 = *(r6);
0x0000436e bl 0xa244 | r0 = fcn_0000a244 (r0, r1, r2);
0x00004372 mov r3, r0 | r3 = r0;
0x00004374 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00004376 str r3, [sp, 0x18] | var_18h = r3;
0x00004378 bl 0x3f5c | fcn_00003f5c (r0);
0x0000437c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0000437e cmp r3, 4 |
| if (r3 > 4) {
0x00004380 bgt 0x43aa | goto label_6;
| }
| label_1:
0x00004382 ldr r0, [r5, 0x74] | r0 = *((r5 + 0x74));
0x00004384 mov r1, r6 | r1 = r6;
0x00004386 bl 0xd800 | fcn_0000d800 (r0, r1);
0x0000438a b 0x4302 | goto label_0;
| label_5:
0x0000438c ldr r1, [pc, 0x5c] |
0x0000438e add r1, pc | r1 = 0x877e;
0x00004390 b 0x4368 |
| } while (1);
| label_2:
0x00004392 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x00004394 mov r2, r0 | r2 = r0;
0x00004396 ldr r3, [pc, 0x58] |
0x00004398 movs r1, 3 | r1 = 3;
0x0000439a str r6, [sp, 4] | var_4h = r6;
0x0000439c ldr r0, [r5] | r0 = *(r5);
0x0000439e add r3, pc | r3 = 0x8794;
0x000043a0 str r0, [sp] | *(sp) = r0;
0x000043a2 mov r0, r1 | r0 = r1;
0x000043a4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000043a8 b 0x4302 | goto label_0;
| label_6:
0x000043aa add.w r0, r6, 0x10 | r0 = r6 + 0x10;
0x000043ae blx 0x3620 | fcn_00003620 ();
0x000043b2 b 0x4382 | goto label_1;
| label_4:
0x000043b4 blx 0x348c | fprintf_chk ()
0x000043b8 ldrsb r4, [r2, r0] | r4 = *((r2 + r0));
0x000043ba movs r1, r0 | r1 = r0;
0x000043bc add r2, sp, 0x10 | r2 += var_10h;
0x000043be movs r2, r0 | r2 = r0;
0x000043c0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000043c2 movs r0, r0 |
0x000043c4 add r1, sp, 0x3f0 | r1 += arg_3f0h;
0x000043c6 movs r2, r0 | r2 = r0;
0x000043c8 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x000043ca movs r0, r0 |
0x000043cc lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x000043ce movs r0, r0 |
0x000043d0 bl 0xfff523d2 | void (*0xfff523d2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x000043d4 strh r0, [r0, r6] | *((r0 + r6)) = r0;
0x000043d6 movs r1, r0 | r1 = r0;
0x000043d8 strh r0, [r1, r4] | *((r1 + r4)) = r0;
0x000043da movs r1, r0 | r1 = r0;
0x000043dc strb r0, [r6, r5] | *((r6 + r5)) = r0;
0x000043de movs r1, r0 | r1 = r0;
0x000043e0 add r1, sp, 0x188 | r1 += arg_188h;
0x000043e2 movs r2, r0 | r2 = r0;
0x000043e4 strh r4, [r4, r4] | *((r4 + r4)) = r4;
0x000043e6 movs r1, r0 | r1 = r0;
0x000043e8 strh r2, [r2, r4] | *((r2 + r4)) = r2;
0x000043ea movs r1, r0 | r1 = r0;
0x000043ec strh r6, [r4, r3] | *((r4 + r3)) = r6;
0x000043ee movs r1, r0 | r1 = r0;
0x000043f0 strh r6, [r3, r3] | *((r3 + r3)) = r6;
0x000043f2 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x43f4 */
| #include <stdint.h>
|
; (fcn) fcn.000043f4 () | void fcn_000043f4 (int16_t arg_1d8h, int16_t arg_1f8h, int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_4ch;
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_4h_3;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x000043f4 andhs r4, r3, 0x1c400 | r4 = r3 & 0x1c400;
| }
0x000043f8 push.w {r4, r5, r6, r7, r8, lr} |
0x000043fc sub sp, 0x28 |
0x000043fe str r1, [sp, 0x1c] | var_1ch = r1;
0x00004400 mov r4, r0 | r4 = r0;
0x00004402 add r3, pc | r3 += pc;
0x00004404 movs r7, 0 | r7 = 0;
0x00004406 ldr r1, [pc, 0x1b8] |
0x00004408 add.w r0, r3, 0x108 | r0 = r3 + 0x108;
0x0000440c ldr r3, [pc, 0x1b4] | r3 = *(0x45c4);
0x0000440e mov r8, r4 | r8 = r4;
0x00004410 ldr r6, [pc, 0x1b4] |
0x00004412 add r1, pc | r1 = 0x89d8;
0x00004414 ldr r3, [r1, r3] |
0x00004416 movw r1, 0x1cf | r1 = 0x1cf;
0x0000441a add r6, pc | r6 = 0x89e6;
0x0000441c ldr r3, [r3] | r3 = *(0x89d8);
0x0000441e str r3, [sp, 0x24] | var_24h = r3;
0x00004420 mov.w r3, 0 | r3 = 0;
0x00004424 str r7, [sp, 0x20] | var_20h = r7;
0x00004426 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000442a ldr r2, [pc, 0x1a0] | r2 = *(0x45ce);
0x0000442c ldr r3, [pc, 0x1a0] | r3 = *(0x45d0);
0x0000442e ldr r1, [r6, r2] | r1 = *(0x89e6);
0x00004430 ldr r2, [r6, r3] | r2 = *(0x89e6);
0x00004432 ldr r3, [r1] | r3 = *(0x89e6);
0x00004434 add r1, sp, 0x1c | r1 += var_1ch;
0x00004436 ldr r0, [r3, 4] | r0 = *(0x89ea);
0x00004438 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000443c ldr r3, [r8, 4]! | r3 = *((r8 += 4));
0x00004440 mov r2, r7 | r2 = r7;
0x00004442 ldr r5, [r0, 8] | r5 = *(0x89f2);
0x00004444 movs r1, 0xf | r1 = 0xf;
0x00004446 movs r0, 4 | r0 = 4;
0x00004448 str r3, [sp, 4] | var_4h = r3;
0x0000444a ldr r3, [r5] | r3 = *(0x89f2);
0x0000444c str r3, [sp] | *(sp) = r3;
0x0000444e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004450 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004454 ldr r0, [r5, 0x74] | r0 = *(0x8a66);
0x00004456 mov r1, r8 | r1 = r8;
0x00004458 ldr r2, [pc, 0x178] |
0x0000445a str r7, [r0, 8] | *((r0 + 8)) = r7;
0x0000445c add r2, pc | r2 = 0x8a34;
0x0000445e bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x00004462 cmp r0, 0 |
| if (r0 == 0) {
0x00004464 beq 0x44ee | goto label_3;
| }
0x00004466 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x00004468 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000446a ldr r7, [r3, 8] | r7 = *((r3 + 8));
0x0000446c ldr r3, [r7] | r3 = *(r7);
0x0000446e cmp r3, 2 |
| if (r3 == 2) {
0x00004470 beq 0x44be | goto label_4;
| }
0x00004472 ldrb r2, [r4] | r2 = *(r4);
0x00004474 ands r2, r2, 8 | r2 &= 8;
| if (r2 == r2) {
0x00004478 beq 0x4548 | goto label_5;
| }
| do {
| label_0:
0x0000447a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0000447c cmp r3, 4 |
| if (r3 > 4) {
0x0000447e bgt 0x44e4 | goto label_6;
| }
| label_1:
0x00004480 ldr r0, [pc, 0x154] |
0x00004482 mov r2, r4 | r2 = r4;
0x00004484 movw r1, 0x202 | r1 = 0x202;
0x00004488 add r0, pc | r0 = 0x8a64;
0x0000448a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000448e ldr r0, [pc, 0x14c] |
0x00004490 movs r3, 3 | r3 = 3;
0x00004492 add r2, sp, 0x20 | r2 += var_20h;
0x00004494 movw r1, 0x203 | r1 = 0x203;
0x00004498 add r0, pc |
0x0000449a add.w r0, r0, 0x108 | r0 = 0x8b82;
0x0000449e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000044a2 ldr r2, [pc, 0x13c] |
0x000044a4 ldr r3, [pc, 0x11c] | r3 = *(0x45c4);
0x000044a6 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000044a8 add r2, pc | r2 = 0x8a8e;
0x000044aa ldr r3, [r2, r3] | r3 = *(0x8a8e);
0x000044ac ldr r2, [r3] | r2 = *(0x8a8e);
0x000044ae ldr r3, [sp, 0x24] | r3 = var_24h;
0x000044b0 eors r2, r3 | r2 ^= r3;
0x000044b2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000044b6 bne 0x45b8 | goto label_7;
| }
0x000044b8 add sp, 0x28 |
0x000044ba pop.w {r4, r5, r6, r7, r8, pc} |
| label_4:
0x000044be ldrb.w r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x000044c2 cmp r3, 5 |
| if (r3 == 5) {
0x000044c4 beq 0x450c | goto label_8;
| }
0x000044c6 ldrb r2, [r4] | r2 = *(r4);
0x000044c8 ands r2, r2, 8 | r2 &= 8;
0x000044cc bne 0x447a |
| } while (r2 != r2);
0x000044ce ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000044d0 movs r0, 3 | r0 = 3;
0x000044d2 ldr r3, [pc, 0x110] |
0x000044d4 str r1, [sp, 4] | var_4h = r1;
0x000044d6 ldr r1, [r5] | r1 = *(r5);
0x000044d8 add r3, pc | r3 = 0x8ac2;
0x000044da str r1, [sp] | *(sp) = r1;
0x000044dc movs r1, 5 | r1 = 5;
0x000044de bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000044e2 b 0x447a | goto label_0;
| label_6:
0x000044e4 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x000044e8 blx 0x3620 | fcn_00003620 ();
0x000044ec b 0x4480 | goto label_1;
| label_3:
0x000044ee ldrb r2, [r4] | r2 = *(r4);
0x000044f0 ands r2, r2, 8 | r2 &= 8;
| if (r2 != r2) {
0x000044f4 bne 0x447a | goto label_0;
| }
0x000044f6 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000044f8 movs r1, 3 | r1 = 3;
0x000044fa ldr r3, [pc, 0xec] |
0x000044fc str r0, [sp, 4] | var_4h = r0;
0x000044fe ldr r0, [r5] | r0 = *(r5);
0x00004500 add r3, pc | r3 = 0x8aee;
0x00004502 str r0, [sp] | *(sp) = r0;
0x00004504 mov r0, r1 | r0 = r1;
0x00004506 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000450a b 0x447a | goto label_0;
| label_8:
0x0000450c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000450e ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00004510 ldr r2, [r5] | r2 = *(r5);
0x00004512 cmp r0, 4 |
| if (r0 > 4) {
0x00004514 ble 0x451e |
0x00004516 ldrb r3, [r4, 8] | r3 = *((r4 + 8));
0x00004518 tst.w r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x0000451c bne 0x4560 | goto label_9;
| }
| }
0x0000451e add.w r3, r5, 0x1c | r3 = r5 + 0x1c;
0x00004522 str r2, [sp] | *(sp) = r2;
0x00004524 movs r2, 0 | r2 = 0;
0x00004526 add r5, sp, 0x10 | r5 += var_10h;
0x00004528 bl 0x6388 | fcn_00006388 (r0, r1, r2, r3);
0x0000452c movs r2, 7 | r2 = 7;
0x0000452e mov r3, r0 | r3 = r0;
0x00004530 strb.w r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
0x00004534 mov r0, r5 | r0 = r5;
0x00004536 str r3, [sp, 0x20] | var_20h = r3;
0x00004538 adds r7, 0x24 | r7 += 0x24;
0x0000453a bl 0x38d8 | r0 = fcn_000038d8 (r0);
0x0000453e ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004542 stm.w r7, {r0, r1} | *(r7) = r0;
| *((r7 + 4)) = r1;
0x00004544 movs r3, r0 | r3 = r0;
0x00004546 b 0x447a | goto label_0;
| label_5:
0x00004548 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0000454a strd r1, r3, [sp, 4] | __asm ("strd r1, r3, [var_4h]");
0x0000454c asrs r1, r0, 0xc | r1 = r0 >> 0xc;
0x0000454e movs r1, 4 | r1 = 4;
0x00004550 ldr r0, [r5] | r0 = *(r5);
0x00004552 ldr r3, [pc, 0x98] |
0x00004554 str r0, [sp] | *(sp) = r0;
0x00004556 movs r0, 3 | r0 = 3;
0x00004558 add r3, pc | r3 = 0x8b4a;
0x0000455a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000455e b 0x447a | goto label_0;
| label_9:
0x00004560 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x00004564 movs r0, 3 | r0 = 3;
0x00004566 ldr r2, [pc, 0x88] |
0x00004568 mov.w r1, -1 | r1 = -1;
0x0000456c add r2, pc | r2 = 0x8b62;
0x0000456e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004572 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00004574 cmp r3, 4 |
| if (r3 > 4) {
0x00004576 bgt 0x45a8 | goto label_10;
| }
0x00004578 ldr r1, [pc, 0x78] |
0x0000457a add r1, pc | r1 = 0x8b72;
| do {
0x0000457c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000457e mov r0, r5 | r0 = r5;
0x00004580 ldr r2, [r7] | r2 = *(r7);
0x00004582 bl 0xa244 | fcn_0000a244 (r0, r1, r2);
0x00004586 str r0, [sp, 0x20] | var_20h = r0;
0x00004588 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x0000458a bl 0x3f5c | fcn_00003f5c (r0);
0x0000458e ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00004590 cmp r3, 4 |
| if (r3 > 4) {
0x00004592 bgt 0x45ae | goto label_11;
| }
| label_2:
0x00004594 ldr r0, [r5, 0x74] | r0 = *((r5 + 0x74));
0x00004596 mov r1, r7 | r1 = r7;
0x00004598 bl 0xd800 | fcn_0000d800 (r0, r1);
0x0000459c ldr r3, [pc, 0x58] | r3 = *(0x45f8);
0x0000459e ldr r2, [r6, r3] | r2 = *((r6 + r3));
0x000045a0 ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x000045a2 adds r3, 1 | r3++;
0x000045a4 str r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
0x000045a6 b 0x447a | goto label_0;
| label_10:
0x000045a8 ldr r1, [pc, 0x50] |
0x000045aa add r1, pc | r1 = 0x8baa;
0x000045ac b 0x457c |
| } while (1);
| label_11:
0x000045ae add.w r0, r7, 0x10 | r0 = r7 + 0x10;
0x000045b2 blx 0x3620 | fcn_00003620 ();
0x000045b6 b 0x4594 | goto label_2;
| label_7:
0x000045b8 blx 0x348c | fprintf_chk ()
0x000045bc strb r6, [r1, r2] | *((r1 + r2)) = r6;
0x000045be movs r1, r0 | r1 = r0;
0x000045c0 add r0, sp, 0x1f8 | r0 += arg_1f8h;
0x000045c2 movs r2, r0 | r2 = r0;
0x000045c4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000045c6 movs r0, r0 |
0x000045c8 add r0, sp, 0x1d8 | r0 += arg_1d8h;
0x000045ca movs r2, r0 | r2 = r0;
0x000045cc lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x000045ce movs r0, r0 |
0x000045d0 lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x000045d2 movs r0, r0 |
0x000045d4 bl 0xffdca5d6 | void (*0xffdca5d6)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x000045d8 str r0, [r2, r6] | *((r2 + r6)) = r0;
0x000045da movs r1, r0 | r1 = r0;
0x000045dc strh r0, [r7, r7] | *((r7 + r7)) = r0;
0x000045de movs r1, r0 | r1 = r0;
0x000045e0 adr r7, 0x3a0 | r7 = 0x3a0;
0x000045e2 movs r2, r0 | r2 = r0;
0x000045e4 str r4, [r5, r6] | *((r5 + r6)) = r4;
0x000045e6 movs r1, r0 | r1 = r0;
0x000045e8 str r4, [r0, r6] | *((r0 + r6)) = r4;
0x000045ea movs r1, r0 | r1 = r0;
0x000045ec str r4, [r5, r4] | *((r5 + r4)) = r4;
0x000045ee movs r1, r0 | r1 = r0;
0x000045f0 str r0, [r4, r4] | *((r4 + r4)) = r0;
0x000045f2 movs r1, r0 | r1 = r0;
0x000045f4 str r6, [r7, r3] | *((r7 + r3)) = r6;
0x000045f6 movs r1, r0 | r1 = r0;
0x000045f8 lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x000045fa movs r0, r0 |
0x000045fc str r2, [r1, r3] | *((r1 + r3)) = r2;
0x000045fe movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x4600 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00004600 () | void fcn_00004600 (int16_t arg1, int16_t arg2) {
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h_3;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h_3;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_4ch;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00004600 andhs r4, r3, 0x22c00 | r4 = r3 & 0x22c00;
| }
0x00004604 push.w {r4, r5, r6, r7, r8, lr} |
0x00004608 sub sp, 0x50 |
0x0000460a str r1, [sp, 0x14] | var_14h = r1;
0x0000460c mov r4, r0 | r4 = r0;
0x0000460e add r3, pc | r3 += pc;
0x00004610 mov.w r8, 0 | r8 = 0;
0x00004614 ldr r1, [pc, 0x21c] |
0x00004616 add.w r0, r3, 0x124 | r0 = r3 + 0x124;
0x0000461a ldr r3, [pc, 0x21c] | r3 = *(0x483a);
0x0000461c mov r7, r4 | r7 = r4;
0x0000461e ldr r6, [pc, 0x21c] |
0x00004620 add r1, pc | r1 = 0x8e58;
0x00004622 ldr r3, [r1, r3] |
0x00004624 mov.w r1, 0x214 | r1 = 0x214;
0x00004628 add r6, pc | r6 = 0x8e6a;
0x0000462a ldr r3, [r3] | r3 = *(0x8e58);
0x0000462c str r3, [sp, 0x4c] | var_4ch = r3;
0x0000462e mov.w r3, 0 | r3 = 0;
0x00004632 str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h]");
0x00004636 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000463a ldr r2, [pc, 0x204] | r2 = *(0x4842);
0x0000463c ldr r3, [pc, 0x204] | r3 = *(0x4844);
0x0000463e ldr r1, [r6, r2] | r1 = *(0x8e6a);
0x00004640 ldr r2, [r6, r3] | r2 = *(0x8e6a);
0x00004642 ldr r3, [r1] | r3 = *(0x8e6a);
0x00004644 add r1, sp, 0x14 | r1 += var_14h;
0x00004646 ldr r0, [r3, 4] | r0 = *(0x8e6e);
0x00004648 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000464c ldr r3, [r7, 4]! | r3 = *((r7 += 4));
0x00004650 mov r2, r8 | r2 = r8;
0x00004652 ldr r5, [r0, 8] | r5 = *(0x8e76);
0x00004654 movs r1, 0x11 | r1 = 0x11;
0x00004656 movs r0, 4 | r0 = 4;
0x00004658 str r3, [sp, 4] | var_4h = r3;
0x0000465a ldr r3, [r5] | r3 = *(0x8e76);
0x0000465c str r3, [sp] | *(sp) = r3;
0x0000465e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00004660 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004664 ldr r2, [pc, 0x1e0] |
0x00004666 mov r1, r7 | r1 = r7;
0x00004668 ldr r0, [r5, 0x70] | r0 = *(0x8ee6);
0x0000466a add r2, pc | r2 = 0x8eb6;
0x0000466c bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x00004670 cmp r0, 0 |
| if (r0 == 0) {
0x00004672 beq 0x470c | goto label_4;
| }
0x00004674 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x00004676 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00004678 ldr r7, [r3, 8] | r7 = *((r3 + 8));
0x0000467a ldr r3, [r7] | r3 = *(r7);
0x0000467c cmp r3, 2 |
| if (r3 != 2) {
0x0000467e bne 0x46e4 | goto label_5;
| }
0x00004680 ldrb.w r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00004684 cmp r3, 6 |
| if (r3 == 6) {
0x00004686 beq 0x473c | goto label_6;
| }
0x00004688 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0000468a mov r2, r8 | r2 = r8;
0x0000468c ldr r3, [pc, 0x1bc] |
0x0000468e movs r0, 3 | r0 = 3;
0x00004690 str r1, [sp, 4] | var_4h = r1;
0x00004692 ldr r1, [r5] | r1 = *(r5);
0x00004694 add r3, pc | r3 = 0x8ee4;
0x00004696 str r1, [sp] | *(sp) = r1;
0x00004698 movs r1, 5 | r1 = 5;
0x0000469a bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_1:
0x0000469e ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000046a0 cmp r3, 4 |
| if (r3 > 4) {
0x000046a2 bgt 0x4702 | goto label_7;
| }
| do {
| label_0:
0x000046a4 ldr r0, [pc, 0x1a8] |
0x000046a6 mov r2, r4 | r2 = r4;
0x000046a8 movw r1, 0x251 | r1 = 0x251;
0x000046ac add r0, pc | r0 = 0x8f00;
0x000046ae bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000046b2 ldr r0, [pc, 0x1a0] |
0x000046b4 movs r3, 3 | r3 = 3;
0x000046b6 add r2, sp, 0x18 | r2 += var_18h;
0x000046b8 movw r1, 0x252 | r1 = 0x252;
0x000046bc add r0, pc |
0x000046be add.w r0, r0, 0x124 | r0 = 0x903a;
0x000046c2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000046c6 ldr r2, [pc, 0x190] |
0x000046c8 ldr r3, [pc, 0x16c] | r3 = *(0x4838);
0x000046ca ldr r0, [sp, 0x18] | r0 = var_18h;
0x000046cc add r2, pc | r2 = 0x8f2a;
0x000046ce ldr r3, [r2, r3] | r3 = *(0x8f2a);
0x000046d0 ldr r2, [r3] | r2 = *(0x8f2a);
0x000046d2 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000046d4 eors r2, r3 | r2 ^= r3;
0x000046d6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000046da bne.w 0x482a | goto label_8;
| }
0x000046de add sp, 0x50 |
0x000046e0 pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x000046e4 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000046e6 mov r2, r8 | r2 = r8;
0x000046e8 str r3, [sp, 8] | var_8h_3 = r3;
0x000046ea ldr r3, [pc, 0x170] |
0x000046ec str r1, [sp, 4] | var_4h = r1;
0x000046ee movs r1, 4 | r1 = 4;
0x000046f0 ldr r0, [r5] | r0 = *(r5);
0x000046f2 add r3, pc | r3 = 0x8f54;
0x000046f4 str r0, [sp] | *(sp) = r0;
0x000046f6 movs r0, 3 | r0 = 3;
0x000046f8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000046fc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000046fe cmp r3, 4 |
0x00004700 ble 0x46a4 |
| } while (r3 <= 4);
| label_7:
0x00004702 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x00004706 blx 0x3620 | fcn_00003620 ();
0x0000470a b 0x46a4 | goto label_0;
| label_4:
0x0000470c ldrb r2, [r4] | r2 = *(r4);
0x0000470e ands r2, r2, 8 | r2 &= 8;
| if (r2 == r2) {
0x00004712 beq 0x4726 | goto label_9;
| }
0x00004714 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00004716 bl 0x82b4 | r0 = fcn_000082b4 (r0);
0x0000471a cmp r0, 0 |
| if (r0 != 0) {
0x0000471c bne 0x47ec | goto label_10;
| }
| do {
0x0000471e mov.w r3, -1 | r3 = -1;
0x00004722 str r3, [sp, 0x18] | var_18h = r3;
0x00004724 b 0x469e | goto label_1;
| label_9:
0x00004726 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00004728 movs r1, 3 | r1 = 3;
0x0000472a ldr r3, [pc, 0x134] |
0x0000472c str r0, [sp, 4] | var_4h = r0;
0x0000472e ldr r0, [r5] | r0 = *(r5);
0x00004730 add r3, pc | r3 = 0x8f96;
0x00004732 str r0, [sp] | *(sp) = r0;
0x00004734 mov r0, r1 | r0 = r1;
0x00004736 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000473a b 0x469e | goto label_1;
| label_6:
0x0000473c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000473e bl 0x82b4 | r0 = fcn_000082b4 (r0);
0x00004742 cmp r0, 0 |
0x00004744 beq 0x471e |
| } while (r0 == 0);
0x00004746 mov r1, r8 | r1 = r8;
0x00004748 add.w r8, sp, 0x1c | r8 += var_1ch_2;
0x0000474c movs r2, 0x30 | r2 = 0x30;
0x0000474e mov r0, r8 | r0 = r8;
0x00004750 blx 0x30d8 | fcn_000030d8 ();
0x00004754 mov r2, r5 | r2 = r5;
0x00004756 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00004758 ldr r3, [r2], 0x1c | r3 = *(r2);
| r2 += 0x1c;
0x0000475c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000475e bl 0x6428 | fcn_00006428 (r0, r1, r2, r3);
0x00004762 ldrd ip, r3, [r7] | __asm ("ldrd ip, r3, [r7]");
0x00004766 ldrb.w r2, [sp, 0x1c] | r2 = var_1ch_2;
0x0000476a str r0, [sp, 0x18] | var_18h = r0;
0x0000476c and r3, r3, 1 | r3 &= 1;
0x00004770 and r1, ip, 3 | r1 = ip & 3;
0x00004774 orr.w r3, r3, r1, lsl 1 | r3 |= (r1 << 1);
0x00004778 bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0000477c orrs r3, r2 | r3 |= r2;
0x0000477e ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x00004780 strb.w r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00004784 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00004786 str r2, [sp, 0x28] | var_28h = r2;
| if (r3 != 0) {
0x00004788 cbz r3, 0x479a |
0x0000478a ldr r2, [r3] | r2 = *(r3);
0x0000478c str r2, [sp, 0x20] | var_20h = r2;
0x0000478e ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00004790 str r2, [sp, 0x24] | var_24h = r2;
0x00004792 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00004794 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00004796 str r2, [sp, 0x2c] | var_2ch = r2;
0x00004798 str r3, [sp, 0x30] | var_30h = r3;
| }
0x0000479a ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0000479c cmp r3, 4 |
0x0000479e str r3, [sp, 0x34] | var_34h = r3;
| if (r3 <= 4) {
0x000047a0 ble 0x47fe | goto label_11;
| }
0x000047a2 ldr.w r8, [pc, 0xc0] |
0x000047a6 add.w r3, r7, 0x10 | r3 = r7 + 0x10;
0x000047aa ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000047ac add.w lr, sp, 0x38 | lr += var_38h;
0x000047b0 add r8, pc | r8 = 0x901a;
0x000047b2 stm.w lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
| do {
| label_2:
0x000047b6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000047b8 mov r2, ip | r2 = ip;
0x000047ba mov r1, r8 | r1 = r8;
0x000047bc mov r0, r5 | r0 = r5;
0x000047be bl 0xa244 | fcn_0000a244 (r0, r1, r2);
0x000047c2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000047c4 add r3, r0 | r3 += r0;
0x000047c6 str r3, [sp, 0x18] | var_18h = r3;
0x000047c8 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000047ca cmp r3, 4 |
| if (r3 > 4) {
0x000047cc bgt 0x4820 | goto label_12;
| }
| label_3:
0x000047ce ldr r1, [r7, 0x20] | r1 = *((r7 + 0x20));
0x000047d0 ldr r3, [pc, 0x94] | r3 = *(0x4868);
0x000047d2 ldr r6, [r6, r3] | r6 = *((r6 + r3));
| if (r1 != 0) {
0x000047d4 cbz r1, 0x47dc |
0x000047d6 mov r0, r6 | r0 = r6;
0x000047d8 bl 0xd800 | fcn_0000d800 (r0, r1);
| }
0x000047dc ldr r0, [r5, 0x70] | r0 = *((r5 + 0x70));
0x000047de mov r1, r7 | r1 = r7;
0x000047e0 bl 0xd800 | fcn_0000d800 (r0, r1);
0x000047e4 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000047e6 adds r3, 1 | r3++;
0x000047e8 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000047ea b 0x469e | goto label_1;
| label_10:
0x000047ec mov r2, r5 | r2 = r5;
0x000047ee ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000047f0 ldr r3, [r2], 0x1c | r3 = *(r2);
| r2 += 0x1c;
0x000047f4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000047f6 bl 0x6428 | fcn_00006428 (r0, r1, r2, r3);
0x000047fa str r0, [sp, 0x18] | var_18h = r0;
0x000047fc b 0x469e | goto label_1;
| label_11:
0x000047fe mov r0, r8 | r0 = r8;
0x00004800 movs r2, 0 | r2 = 0;
0x00004802 mov r1, r5 | r1 = r5;
0x00004804 ldr.w r8, [pc, 0x64] |
0x00004808 bl 0x16598 | fcn_00016598 (r0, r1, r2);
0x0000480c ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0000480e ldr.w ip, [r7] | ip = *(r7);
0x00004812 add r8, pc | r8 = 0x9082;
0x00004814 cmp r3, 4 |
0x00004816 bgt 0x47b6 |
| } while (r3 > 4);
0x00004818 ldr.w r8, [pc, 0x54] |
0x0000481c add r8, pc | r8 = 0x9090;
0x0000481e b 0x47b6 | goto label_2;
| label_12:
0x00004820 add.w r0, r7, 0x10 | r0 = r7 + 0x10;
0x00004824 blx 0x3620 | fcn_00003620 ();
0x00004828 b 0x47ce | goto label_3;
| label_8:
0x0000482a blx 0x348c | fprintf_chk ()
0x0000482e nop |
0x00004830 strh r2, [r0, r2] | *((r0 + r2)) = r2;
0x00004832 movs r1, r0 | r1 = r0;
0x00004834 adr r6, 0x1c0 | r6 = 0x1c0;
0x00004836 movs r2, r0 | r2 = r0;
0x00004838 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000483a movs r0, r0 |
0x0000483c adr r6, 0x1a0 | r6 = 0x1a0;
0x0000483e movs r2, r0 | r2 = r0;
0x00004840 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x00004842 movs r0, r0 |
0x00004844 lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x00004846 movs r0, r0 |
0x00004848 bl 0x3bc84a | void (*0x3bc84a)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0000484c str r4, [r0, r1] | *((r0 + r1)) = r4;
0x0000484e movs r1, r0 | r1 = r0;
0x00004850 ldr r7, [pc, 0x1b0] | r7 = *(0x4a04);
0x00004852 movs r1, r0 | r1 = r0;
0x00004854 str r4, [r2, r7] | *((r2 + r7)) = r4;
0x00004856 movs r1, r0 | r1 = r0;
0x00004858 adr r5, 0x310 | r5 = 0x310;
0x0000485a movs r2, r0 | r2 = r0;
0x0000485c ldr r7, [pc, 0x398] | r7 = *(0x4bf8);
0x0000485e movs r1, r0 | r1 = r0;
0x00004860 ldr r7, [pc, 0x2a0] | r7 = *(0x4b04);
0x00004862 movs r1, r0 | r1 = r0;
0x00004864 ldr r7, [pc, 0x80] | r7 = *(0x48e8);
0x00004866 movs r1, r0 | r1 = r0;
0x00004868 lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x0000486a movs r0, r0 |
0x0000486c ldr r6, [pc, 0x2f8] | r6 = *(0x4b68);
0x0000486e movs r1, r0 | r1 = r0;
0x00004870 ldr r6, [pc, 0x2e0] | r6 = *(0x4b54);
0x00004872 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x4874 */
| #include <stdint.h>
|
; (fcn) fcn.00004874 () | void fcn_00004874 (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00004874 andhs r4, r3, 0x19400 | r4 = r3 & 0x19400;
| }
0x00004878 push.w {r4, r5, r6, r7, r8, lr} |
0x0000487c sub sp, 0x20 |
0x0000487e str r1, [sp, 0x14] | var_14h_2 = r1;
0x00004880 mov r4, r0 | r4 = r0;
0x00004882 add r3, pc | r3 += pc;
0x00004884 mov.w r8, 0 | r8 = 0;
0x00004888 ldr r1, [pc, 0x184] |
0x0000488a add.w r0, r3, 0x140 | r0 = r3 + 0x140;
0x0000488e ldr r3, [pc, 0x184] | r3 = *(0x4a16);
0x00004890 mov r7, r4 | r7 = r4;
0x00004892 ldr r6, [pc, 0x184] |
0x00004894 add r1, pc | r1 = 0x92a8;
0x00004896 ldr r3, [r1, r3] |
0x00004898 movw r1, 0x263 | r1 = 0x263;
0x0000489c add r6, pc | r6 = 0x92ba;
0x0000489e ldr r3, [r3] | r3 = *(0x92a8);
0x000048a0 str r3, [sp, 0x1c] | var_1ch = r3;
0x000048a2 mov.w r3, 0 | r3 = 0;
0x000048a6 str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h_2]");
0x000048aa bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000048ae ldr r2, [pc, 0x16c] | r2 = *(0x4a1e);
0x000048b0 ldr r3, [pc, 0x16c] | r3 = *(0x4a20);
0x000048b2 ldr r1, [r6, r2] | r1 = *(0x92ba);
0x000048b4 ldr r2, [r6, r3] | r2 = *(0x92ba);
0x000048b6 ldr r3, [r1] | r3 = *(0x92ba);
0x000048b8 add r1, sp, 0x14 | r1 += var_14h_2;
0x000048ba ldr r0, [r3, 4] | r0 = *(0x92be);
0x000048bc bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x000048c0 ldr r3, [r7, 4]! | r3 = *((r7 += 4));
0x000048c4 mov r2, r8 | r2 = r8;
0x000048c6 ldr r5, [r0, 8] | r5 = *(0x92c6);
0x000048c8 movs r1, 0x13 | r1 = 0x13;
0x000048ca movs r0, 4 | r0 = 4;
0x000048cc str r3, [sp, 4] | var_4h_2 = r3;
0x000048ce ldr r3, [r5] | r3 = *(0x92c6);
0x000048d0 str r3, [sp] | *(sp) = r3;
0x000048d2 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000048d4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000048d8 ldr r2, [pc, 0x148] |
0x000048da mov r1, r7 | r1 = r7;
0x000048dc ldr r0, [r5, 0x74] | r0 = *(0x933a);
0x000048de add r2, pc | r2 = 0x9306;
0x000048e0 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x000048e4 cmp r0, 0 |
| if (r0 == 0) {
0x000048e6 beq 0x497a | goto label_4;
| }
0x000048e8 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000048ea ldr r1, [r5] | r1 = *(r5);
0x000048ec ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000048ee ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000048f0 ldr r7, [r3, 8] | r7 = *((r3 + 8));
0x000048f2 ldr r3, [r7] | r3 = *(r7);
0x000048f4 cmp r3, 2 |
| if (r3 != 2) {
0x000048f6 bne 0x4956 | goto label_5;
| }
0x000048f8 ldrb.w r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x000048fc cmp r3, 7 |
| if (r3 == 7) {
0x000048fe beq 0x4998 | goto label_6;
| }
0x00004900 ldr r3, [pc, 0x124] |
0x00004902 mov r2, r8 | r2 = r8;
0x00004904 strd r1, r0, [sp] | __asm ("strd r1, r0, [sp]");
0x00004908 movs r1, 5 | r1 = 5;
0x0000490a movs r0, 3 | r0 = 3;
0x0000490c add r3, pc | r3 = 0x9338;
0x0000490e bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_1:
0x00004912 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00004914 cmp r3, 4 |
| if (r3 > 4) {
0x00004916 bgt 0x4970 | goto label_7;
| }
| do {
| label_0:
0x00004918 ldr r0, [pc, 0x110] |
0x0000491a mov r2, r4 | r2 = r4;
0x0000491c movw r1, 0x28a | r1 = 0x28a;
0x00004920 add r0, pc | r0 = 0x9350;
0x00004922 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00004926 ldr r0, [pc, 0x108] |
0x00004928 movs r3, 3 | r3 = 3;
0x0000492a add r2, sp, 0x18 | r2 += var_18h_2;
0x0000492c movw r1, 0x28b | r1 = 0x28b;
0x00004930 add r0, pc |
0x00004932 add.w r0, r0, 0x140 | r0 = 0x94a6;
0x00004936 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000493a ldr r2, [pc, 0xf8] |
0x0000493c ldr r3, [pc, 0xd4] | r3 = *(0x4a14);
0x0000493e ldr r0, [sp, 0x18] | r0 = var_18h_2;
0x00004940 add r2, pc | r2 = 0x937a;
0x00004942 ldr r3, [r2, r3] | r3 = *(0x937a);
0x00004944 ldr r2, [r3] | r2 = *(0x937a);
0x00004946 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004948 eors r2, r3 | r2 ^= r3;
0x0000494a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000494e bne 0x4a08 | goto label_8;
| }
0x00004950 add sp, 0x20 |
0x00004952 pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x00004956 str r3, [sp, 8] | var_8h_2 = r3;
0x00004958 mov r2, r8 | r2 = r8;
0x0000495a ldr r3, [pc, 0xdc] |
0x0000495c strd r1, r0, [sp] | __asm ("strd r1, r0, [sp]");
0x00004960 movs r1, 4 | r1 = 4;
0x00004962 movs r0, 3 | r0 = 3;
0x00004964 add r3, pc | r3 = 0x93a2;
0x00004966 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000496a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0000496c cmp r3, 4 |
0x0000496e ble 0x4918 |
| } while (r3 <= 4);
| label_7:
0x00004970 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x00004974 blx 0x3620 | fcn_00003620 ();
0x00004978 b 0x4918 | goto label_0;
| label_4:
0x0000497a ldrb r2, [r4] | r2 = *(r4);
0x0000497c ands r2, r2, 8 | r2 &= 8;
| if (r2 != r2) {
0x00004980 bne 0x4912 | goto label_1;
| }
0x00004982 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00004984 str r4, [sp, 0xc] | *((sp + 0xc)) = r4;
0x00004986 lsls r4, r5, 0xb | r4 = r5 << 0xb;
0x00004988 str r0, [sp] | *(sp) = r0;
0x0000498a ldr r0, [r5] | r0 = *(r5);
0x0000498c add r3, pc | r3 += pc;
0x0000498e str r0, [sp] | *(sp) = r0;
0x00004990 mov r0, r1 | r0 = r1;
0x00004992 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004996 b 0x4912 | goto label_1;
| label_6:
0x00004998 ldr r3, [pc, 0xa4] |
0x0000499a mov r2, r8 | r2 = r8;
0x0000499c strd r1, r0, [sp] | __asm ("strd r1, r0, [sp]");
0x000049a0 movs r1, 6 | r1 = 6;
0x000049a2 movs r0, 3 | r0 = 3;
0x000049a4 add r3, pc | r3 = 0x93e8;
0x000049a6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000049aa ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000049ac cmp r3, 4 |
| if (r3 > 4) {
0x000049ae bgt 0x49e2 | goto label_9;
| }
0x000049b0 ldr r1, [pc, 0x90] |
0x000049b2 add r1, pc | r1 = 0x93fa;
| do {
0x000049b4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000049b6 mov r0, r5 | r0 = r5;
0x000049b8 ldr r2, [r7] | r2 = *(r7);
0x000049ba bl 0xa244 | fcn_0000a244 (r0, r1, r2);
0x000049be str r0, [sp, 0x18] | var_18h_2 = r0;
| if (r0 != 0) {
0x000049c0 cbnz r0, 0x49e8 | goto label_10;
| }
| label_2:
0x000049c2 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x000049c4 bl 0x3f5c | fcn_00003f5c (r0);
0x000049c8 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000049ca cmp r3, 4 |
| if (r3 > 4) {
0x000049cc bgt 0x49fe | goto label_11;
| }
| label_3:
0x000049ce ldr r0, [r5, 0x74] | r0 = *((r5 + 0x74));
0x000049d0 mov r1, r7 | r1 = r7;
0x000049d2 bl 0xd800 | fcn_0000d800 (r0, r1);
0x000049d6 ldr r3, [pc, 0x70] | r3 = *(0x4a4a);
0x000049d8 ldr r2, [r6, r3] | r2 = *((r6 + r3));
0x000049da ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x000049dc adds r3, 1 | r3++;
0x000049de str r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
0x000049e0 b 0x4912 | goto label_1;
| label_9:
0x000049e2 ldr r1, [pc, 0x68] |
0x000049e4 add r1, pc | r1 = 0x9436;
0x000049e6 b 0x49b4 |
| } while (1);
| label_10:
0x000049e8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000049ea mov.w r1, -1 | r1 = -1;
0x000049ee ldr r3, [r5] | r3 = *(r5);
0x000049f0 movs r0, 5 | r0 = 5;
0x000049f2 str r2, [sp] | *(sp) = r2;
0x000049f4 ldr r2, [pc, 0x58] |
0x000049f6 add r2, pc | r2 = 0x944a;
0x000049f8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000049fc b 0x49c2 | goto label_2;
| label_11:
0x000049fe add.w r0, r7, 0x10 | r0 = r7 + 0x10;
0x00004a02 blx 0x3620 | fcn_00003620 ();
0x00004a06 b 0x49ce | goto label_3;
| label_8:
0x00004a08 blx 0x348c | fprintf_chk ()
0x00004a0c str r6, [r1, r0] | *((r1 + r0)) = r6;
0x00004a0e movs r1, r0 | r1 = r0;
0x00004a10 adr r3, 0x3f0 | r3 = 0x3f0;
0x00004a12 movs r2, r0 | r2 = r0;
0x00004a14 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00004a16 movs r0, r0 |
0x00004a18 adr r3, 0x3d0 | r3 = 0x3d0;
0x00004a1a movs r2, r0 | r2 = r0;
0x00004a1c lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x00004a1e movs r0, r0 |
0x00004a20 lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x00004a22 movs r0, r0 |
0x00004a24 bl 0x148a26 | void (*0x148a26)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00004a28 ldr r5, [pc, 0x350] | r5 = *(0x4d7c);
0x00004a2a movs r1, r0 | r1 = r0;
0x00004a2c ldr r4, [pc, 0x3e0] | r4 = *(0x4e10);
0x00004a2e movs r1, r0 | r1 = r0;
0x00004a30 ldr r7, [pc, 0x180] | r7 = *(0x4bb4);
0x00004a32 movs r1, r0 | r1 = r0;
0x00004a34 adr r3, 0x140 | r3 = 0x140;
0x00004a36 movs r2, r0 | r2 = r0;
0x00004a38 ldr r5, [pc, 0x1f0] | r5 = *(0x4c2c);
0x00004a3a movs r1, r0 | r1 = r0;
0x00004a3c ldr r5, [pc, 0x150] | r5 = *(0x4b90);
0x00004a3e movs r1, r0 | r1 = r0;
0x00004a40 ldr r5, [pc, 0xf0] | r5 = *(0x4b34);
0x00004a42 movs r1, r0 | r1 = r0;
0x00004a44 ldr r4, [pc, 0x318] | r4 = *(0x4d60);
0x00004a46 movs r1, r0 | r1 = r0;
0x00004a48 lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x00004a4a movs r0, r0 |
0x00004a4c ldr r4, [pc, 0x240] | r4 = *(0x4c90);
0x00004a4e movs r1, r0 | r1 = r0;
0x00004a50 ldr r4, [pc, 0x3c8] | r4 = *(0x4e1c);
0x00004a52 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x4a54 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00004a54 () | void fcn_00004a54 () {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_0h_3;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| if (? < ?) {
0x00004a54 andhs r4, r3, 0x1cc00 | r4 = r3 & 0x1cc00;
| }
0x00004a58 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00004a5c movs r6, 0 | r6 = 0;
0x00004a5e sub sp, 0x1c |
0x00004a60 ldr r4, [pc, 0x1c4] |
0x00004a62 add r3, pc | r3 += pc;
0x00004a64 add r5, sp, 8 | r5 += var_8h;
0x00004a66 str r6, [sp, 0x10] | var_10h = r6;
0x00004a68 ldr r6, [pc, 0x1c0] |
0x00004a6a add r4, pc | r4 = 0x9696;
0x00004a6c stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x00004a70 add.w r0, r3, 0x15c | r0 = r3 + 0x15c;
0x00004a74 ldr r3, [pc, 0x1b8] | r3 = *(0x4c30);
0x00004a76 mov.w r1, 0x298 | r1 = 0x298;
0x00004a7a add r6, pc | r6 = 0x96aa;
0x00004a7c ldr r3, [r6, r3] |
0x00004a7e add r6, sp, 0x10 | r6 += var_10h;
0x00004a80 ldr r3, [r3] | r3 = *(0x96aa);
0x00004a82 str r3, [sp, 0x14] | var_14h = r3;
0x00004a84 mov.w r3, 0 | r3 = 0;
0x00004a88 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00004a8c ldr r2, [pc, 0x1a4] | r2 = *(0x4c34);
0x00004a8e mov r3, r4 | r3 = r4;
0x00004a90 mov r1, r6 | r1 = r6;
0x00004a92 ldr r7, [r4, r2] | r7 = *(0x9696);
0x00004a94 ldr r3, [r7] | r3 = *(0x9696);
0x00004a96 ldr r0, [r3, 4] | r0 = *(0x969a);
0x00004a98 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00004a9c ldr r3, [sp, 0x10] | r3 = var_10h;
0x00004a9e cmp r3, 0 |
| if (r3 == 0) {
0x00004aa0 beq 0x4b8c | goto label_4;
| }
0x00004aa2 ldr.w sb, [pc, 0x194] |
0x00004aa6 ldr.w sl, [pc, 0x194] |
0x00004aaa ldr.w r8, [pc, 0x194] |
0x00004aae add sb, pc | sb = 0x96ec;
0x00004ab0 add sl, pc | sl = 0x96f2;
0x00004ab2 add r8, pc | r8 = 0x96f8;
0x00004ab4 b 0x4b2e | goto label_2;
| label_1:
0x00004ab6 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x00004ab8 bpl 0x4adc |
0x00004aba add.w r3, r4, 0x14 | r3 = r4 + 0x14;
0x00004abe ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004ac2 ldm r3, {r2, r3} | r2 = *(r3);
| r3 = *((r3 + 4));
0x00004ac4 bl 0x393c | fcn_0000393c (r0);
0x00004ac8 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x00004aca mov.w r2, 0x3e8 | r2 = 0x3e8;
0x00004ace mul r3, r2, r3 | r3 = r2 * r3;
0x00004ad2 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00004ad4 cmp r0, r3 |
0x00004ad6 sbcs r1, r2 | __asm ("sbcs r1, r2");
| if (r0 >= r3) {
0x00004ad8 bge.w 0x4be0 | goto label_5;
| }
| }
0x00004adc add.w r3, r4, 0x20 | r3 = r4 + 0x20;
0x00004ae0 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004ae4 ldm r3, {r2, r3} | r2 = *(r3);
| r3 = *((r3 + 4));
0x00004ae6 mov.w fp, 0x3e8 |
0x00004aea bl 0x393c | fcn_0000393c (r0);
0x00004aee ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x00004af0 mul r3, fp, r3 | r3 = fp * r3;
0x00004af4 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00004af6 cmp r0, r3 |
0x00004af8 sbcs r1, r2 | __asm ("sbcs r1, r2");
| if (r0 < r3) {
0x00004afa bge 0x4b18 |
0x00004afc add.w r3, r4, 0x28 | r3 = r4 + 0x28;
0x00004b00 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004b04 ldm r3, {r2, r3} | r2 = *(r3);
| r3 = *((r3 + 4));
0x00004b06 bl 0x393c | fcn_0000393c (r0);
0x00004b0a ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x00004b0c mul r3, fp, r3 | r3 = fp * r3;
0x00004b10 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00004b12 cmp r0, r3 |
0x00004b14 sbcs r1, r2 | __asm ("sbcs r1, r2");
| if (r0 < r3) {
0x00004b16 blt 0x4b28 | goto label_0;
| }
| }
0x00004b18 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00004b1a bl 0x82b4 | r0 = fcn_000082b4 (r0);
0x00004b1e cmp r0, 0 |
| if (r0 != 0) {
0x00004b20 bne 0x4bba | goto label_6;
| }
0x00004b22 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004b24 lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 >= r3) {
0x00004b26 bpl 0x4bea | goto label_7;
| }
| do {
| label_0:
0x00004b28 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00004b2a cmp r3, 0 |
| if (r3 == 0) {
0x00004b2c beq 0x4b8c | goto label_4;
| }
| label_2:
0x00004b2e ldr r2, [r7] | r2 = *(r7);
0x00004b30 mov r1, r6 | r1 = r6;
0x00004b32 ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x00004b34 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00004b36 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00004b3a ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004b3c lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
0x00004b3e bpl 0x4b28 |
| } while (r0 >= r3);
0x00004b40 ldr r2, [r4, 0x60] | r2 = *((r4 + 0x60));
0x00004b42 cmp r2, 0 |
| if (r2 == 0) {
0x00004b44 beq 0x4b28 | goto label_0;
| }
0x00004b46 lsls r1, r3, 0x1b | r1 = r3 << 0x1b;
| if (r1 >= r3) {
0x00004b48 bpl 0x4ab6 | goto label_1;
| }
0x00004b4a add.w r3, r4, 0x30 | r3 = r4 + 0x30;
0x00004b4e ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004b52 ldm r3, {r2, r3} | r2 = *(r3);
| r3 = *((r3 + 4));
0x00004b54 bl 0x393c | fcn_0000393c (r0);
0x00004b58 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x00004b5a mov.w r2, 0x3e8 | r2 = 0x3e8;
0x00004b5e mul r3, r2, r3 | r3 = r2 * r3;
0x00004b62 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00004b64 cmp r0, r3 |
0x00004b66 sbcs r1, r2 | __asm ("sbcs r1, r2");
| if (r0 < r3) {
0x00004b68 blt 0x4b28 | goto label_0;
| }
0x00004b6a ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00004b6c ldr r3, [r4] | r3 = *(r4);
0x00004b6e str r2, [sp] | *(sp) = r2;
0x00004b70 ldr r2, [pc, 0xd0] |
0x00004b72 add r2, pc | r2 = 0x97ba;
| label_3:
0x00004b74 mov.w r1, -1 | r1 = -1;
0x00004b78 movs r0, 4 | r0 = 4;
0x00004b7a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004b7e mov r0, r4 | r0 = r4;
0x00004b80 movs r1, 1 | r1 = 1;
0x00004b82 bl 0x17734 | fcn_00017734 (r0);
0x00004b86 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00004b88 cmp r3, 0 |
| if (r3 != 0) {
0x00004b8a bne 0x4b2e | goto label_2;
| }
| label_4:
0x00004b8c ldr r0, [pc, 0xb8] |
0x00004b8e movs r3, 3 | r3 = 3;
0x00004b90 movs r2, 0 | r2 = 0;
0x00004b92 mov.w r1, 0x2cc | r1 = 0x2cc;
0x00004b96 add r0, pc |
0x00004b98 add.w r0, r0, 0x15c | r0 = 0x993e;
0x00004b9c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00004ba0 ldr r2, [pc, 0xa8] |
0x00004ba2 ldr r3, [pc, 0x8c] | r3 = *(0x4c32);
0x00004ba4 add r2, pc | r2 = 0x97f4;
0x00004ba6 ldr r3, [r2, r3] | r3 = *(0x97f4);
0x00004ba8 ldr r2, [r3] | r2 = *(0x97f4);
0x00004baa ldr r3, [sp, 0x14] | r3 = var_14h;
0x00004bac eors r2, r3 | r2 ^= r3;
0x00004bae mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00004bb2 bne 0x4c1e |
0x00004bb4 add sp, 0x1c |
0x00004bb6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00004bba mov r0, r4 | r0 = r4;
0x00004bbc ldr r1, [r0], 0x1c | r1 = *(r0);
| r0 += 0x1c;
0x00004bc0 bl 0x6e0c | r0 = fcn_00006e0c (r0, r1);
| if (r0 == 0) {
0x00004bc4 cbnz r0, 0x4c14 |
0x00004bc6 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004bca add.w r3, r4, 0x30 | r3 = r4 + 0x30;
0x00004bce stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00004bd2 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004bd4 bic r3, r3, 0x30 | r3 = BIT_MASK (r3, 0x30);
0x00004bd8 orr r3, r3, 0x10 | r3 |= 0x10;
0x00004bdc strb r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00004bde b 0x4b28 | goto label_0;
| label_5:
0x00004be0 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00004be2 ldr r3, [r4] | r3 = *(r4);
0x00004be4 str r2, [sp] | *(sp) = r2;
0x00004be6 mov r2, r8 | r2 = r8;
0x00004be8 b 0x4b74 | goto label_3;
| label_7:
0x00004bea ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00004bec mov.w r1, -1 | r1 = -1;
0x00004bf0 ldr r3, [r4] | r3 = *(r4);
0x00004bf2 movs r0, 4 | r0 = 4;
0x00004bf4 adds r4, 0x14 | r4 += 0x14;
0x00004bf6 str r2, [sp] | *(sp) = r2;
0x00004bf8 mov r2, sb | r2 = sb;
0x00004bfa bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004bfe ldrb r3, [r4, -0x4] | r3 = *((r4 - 0x4));
0x00004c02 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00004c06 orr r3, r3, 0x20 | r3 |= 0x20;
0x00004c0a strb r3, [r4, -0x4] | *((r4 - 0x4)) = r3;
0x00004c0e stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
0x00004c12 b 0x4b28 | goto label_0;
| }
0x00004c14 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00004c16 ldr r3, [r4] | r3 = *(r4);
0x00004c18 str r2, [sp] | *(sp) = r2;
0x00004c1a mov r2, sl | r2 = sl;
0x00004c1c b 0x4b74 | goto label_3;
| }
0x00004c1e blx 0x348c | fprintf_chk ()
0x00004c22 nop |
0x00004c24 ldr r6, [pc, 0xb8] | r6 = *(0x4ce0);
0x00004c26 movs r1, r0 | r1 = r0;
0x00004c28 adr r2, 0x98 | r2 = 0x98;
0x00004c2a movs r2, r0 | r2 = r0;
0x00004c2c adr r2, 0x58 | r2 = 0x58;
0x00004c2e movs r2, r0 | r2 = r0;
0x00004c30 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00004c32 movs r0, r0 |
0x00004c34 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x00004c36 movs r0, r0 |
0x00004c38 ldr r5, [pc, 0x168] | r5 = *(0x4da4);
0x00004c3a movs r1, r0 | r1 = r0;
0x00004c3c ldr r5, [pc, 0x60] | r5 = *(0x4ca0);
0x00004c3e movs r1, r0 | r1 = r0;
0x00004c40 ldr r4, [pc, 0x348] | r4 = *(0x4f8c);
0x00004c42 movs r1, r0 | r1 = r0;
0x00004c44 ldr r3, [pc, 0x2e8] | r3 = *(0x4f30);
0x00004c46 movs r1, r0 | r1 = r0;
0x00004c48 ldr r4, [pc, 0x3e8] | r4 = *(0x5034);
0x00004c4a movs r1, r0 | r1 = r0;
0x00004c4c adr r0, 0x3b0 | r0 = 0x3b0;
0x00004c4e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x4c50 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00004c50 () | void fcn_00004c50 (int16_t arg_0h, int16_t arg_2b0h, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_38h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_60h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_80h;
| int16_t var_84h;
| r2 = arg3;
| r3 = arg4;
0x00004c50 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00004c54 sub sp, 0x8c |
0x00004c56 str r2, [sp, 0x10] | var_10h_2 = r2;
0x00004c58 add r4, sp, 0x38 | r4 += var_38h;
0x00004c5a mov sl, r3 | sl = r3;
0x00004c5c add.w r8, sp, 0x44 | r8 += var_44h;
0x00004c60 ldr r2, [pc, 0x27c] |
0x00004c62 ldr r3, [pc, 0x280] | r3 = *(0x4ee6);
0x00004c64 stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
0x00004c68 movs r1, 0 | r1 = 0;
0x00004c6a ldr r0, [pc, 0x27c] |
0x00004c6c add r2, pc | r2 = 0x9b50;
0x00004c6e str r4, [sp, 0x20] | var_20h = r4;
0x00004c70 str r1, [sp, 0x44] | var_44h = r1;
0x00004c72 mov.w r1, 0x324 | r1 = 0x324;
0x00004c76 ldr r3, [r2, r3] |
0x00004c78 add r0, pc |
0x00004c7a add.w r0, r0, 0x174 | r0 = 0x9cda;
0x00004c7e movs r2, 3 | r2 = 3;
0x00004c80 ldr r4, [pc, 0x268] |
0x00004c82 ldr r3, [r3] | r3 = *(0x9b50);
0x00004c84 str r3, [sp, 0x84] | var_84h = r3;
0x00004c86 mov.w r3, 0 | r3 = 0;
0x00004c8a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00004c8e ldr r3, [pc, 0x260] | r3 = *(0x4ef2);
0x00004c90 add r4, pc | r4 = 0x9b80;
0x00004c92 mov r1, r8 | r1 = r8;
0x00004c94 ldr.w fp, [r4, r3] | fp = *(0x9b80);
0x00004c98 ldr r3, [pc, 0x258] |
0x00004c9a add r3, pc | r3 = 0x9b92;
0x00004c9c str r3, [sp, 0x28] | var_28h = r3;
0x00004c9e ldr r3, [pc, 0x258] |
0x00004ca0 add r3, pc | r3 = 0x9b9e;
0x00004ca2 str r3, [sp, 0x1c] | var_1ch = r3;
0x00004ca4 ldr r3, [pc, 0x254] |
0x00004ca6 add r3, pc | r3 = 0x9ba6;
0x00004ca8 str r3, [sp, 0x2c] | var_2ch = r3;
0x00004caa ldr.w r3, [fp] |
0x00004cae ldr r0, [r3, 4] | r0 = *(0x9b84);
0x00004cb0 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00004cb2 invalid |
0x00004cb6 add r3, pc |
0x00004cb8 add.w r3, r3, 0x188 | r3 = 0xe9c2;
0x00004cbc str r3, [sp, 0x24] | var_24h = r3;
| do {
| label_0:
0x00004cbe ldr r2, [sp, 0x44] | r2 = var_44h;
0x00004cc0 cmp r2, 0 |
| if (r2 == 0) {
0x00004cc2 beq.w 0x4dce | goto label_10;
| }
| label_2:
0x00004cc6 ldr.w r3, [fp] | r3 = *(fp);
0x00004cca mov r1, r8 | r1 = r8;
0x00004ccc ldr r4, [r2, 8] | r4 = *((r2 + 8));
0x00004cce ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00004cd0 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00004cd4 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004cd6 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
0x00004cd8 bpl 0x4cbe |
| } while (r1 >= r3);
0x00004cda lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
| if (r2 >= r3) {
0x00004cdc bpl.w 0x4eb0 | goto label_11;
| }
0x00004ce0 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00004ce2 bl 0x82b4 | fcn_000082b4 (r0);
0x00004ce6 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00004ce8 cmp r3, 0 |
0x00004cea it ne |
| if (r3 == 0) {
0x00004cec cmpne r0, 0 | __asm ("cmpne r0, 0");
| goto label_12;
| }
| if (r3 == 0) {
| label_12:
0x00004cee beq 0x4cbe | goto label_0;
| }
0x00004cf0 movs r3, 0 | r3 = 0;
0x00004cf2 add r5, sp, 0x4c | r5 += var_4ch;
0x00004cf4 str r3, [sp, 0x48] | var_48h = r3;
0x00004cf6 movs r2, 3 | r2 = 3;
0x00004cf8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00004cfa str r5, [sp, 0x18] | var_18h = r5;
0x00004cfc ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x00004d00 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x00004d04 movw r1, 0x2da | r1 = 0x2da;
0x00004d08 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00004d0a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00004d0e cmp.w sl, 0 |
| if (sl == 0) {
0x00004d12 beq.w 0x4ec6 | goto label_13;
| }
| label_7:
0x00004d16 add.w sb, sp, 0x48 | sb += var_48h;
| do {
| label_1:
0x00004d1a ldr r0, [r4, 0x74] | r0 = *((r4 + 0x74));
0x00004d1c mov r1, sb | r1 = sb;
0x00004d1e bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00004d22 cmp r0, 0 |
| if (r0 == 0) {
0x00004d24 beq 0x4db4 | goto label_8;
| }
0x00004d26 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004d28 and r3, r3, 0xc | r3 &= 0xc;
0x00004d2c cmp r3, 0xc |
| if (r3 != 0xc) {
0x00004d2e bne 0x4db4 | goto label_8;
| }
0x00004d30 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00004d32 bl 0x82b4 | r0 = fcn_000082b4 (r0);
0x00004d36 cmp r0, 0 |
| if (r0 == 0) {
0x00004d38 beq 0x4db4 | goto label_8;
| }
0x00004d3a ldr r3, [sp, 0x48] | r3 = var_48h;
0x00004d3c ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x00004d3e cmp.w sl, 0 |
| if (sl == 0) {
0x00004d42 beq 0x4dfa | goto label_14;
| }
0x00004d44 ldr r3, [r5] | r3 = *(r5);
0x00004d46 cmp r3, 1 |
| if (r3 == 1) {
0x00004d48 beq 0x4e28 | goto label_6;
| }
| label_3:
0x00004d4a cmp r3, 2 |
| if (r3 == 2) {
0x00004d4c beq.w 0x4eba | goto label_15;
| }
0x00004d50 cmp r3, 0 |
0x00004d52 beq 0x4d1a |
| } while (r3 == 0);
0x00004d54 ldrb.w r1, [r5, 0x2c] | r1 = *((r5 + 0x2c));
| label_5:
0x00004d58 cmp r1, 7 |
| if (r1 != 7) {
0x00004d5a bne 0x4d1a | goto label_1;
| }
0x00004d5c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00004d5e movs r2, 0 | r2 = 0;
0x00004d60 movs r0, 3 | r0 = 3;
0x00004d62 str r3, [sp, 8] | var_8h_2 = r3;
0x00004d64 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00004d66 str r3, [sp, 4] | var_4h_2 = r3;
0x00004d68 ldr r3, [r4] | r3 = *(r4);
0x00004d6a str r3, [sp] | *(sp) = r3;
0x00004d6c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00004d6e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004d72 mov r3, r4 | r3 = r4;
0x00004d74 ldrd r1, r0, [r5, 8] | __asm ("ldrd r1, r0, [r5, 8]");
0x00004d78 ldr r2, [r3], 0x1c | r2 = *(r3);
| r3 += 0x1c;
0x00004d7c str r2, [sp] | *(sp) = r2;
0x00004d7e movs r2, 0 | r2 = 0;
0x00004d80 bl 0x6388 | r0 = fcn_00006388 (r0, r1, r2, r3);
0x00004d84 cmp r0, 0 |
| if (r0 == 0) {
0x00004d86 beq.w 0x4e9c | goto label_9;
| }
| label_4:
0x00004d8a ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00004d8c ldr r5, [r4, 0x1c] | r5 = *((r4 + 0x1c));
0x00004d8e ldr r6, [r4] | r6 = *(r4);
0x00004d90 bfc r3, 3, 1 | value_0 = BIT_MASK (1, );
| value_0 = ~value_0;
| r3 &= value_0;
0x00004d94 strb r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00004d96 mov r0, r5 | r0 = r5;
0x00004d98 bl 0x9254 | fcn_00009254 (r0);
0x00004d9c movs r1, 0x1d | r1 = 0x1d;
0x00004d9e strd r5, r0, [sp] | __asm ("strd r5, r0, [sp]");
0x00004da2 mov r3, r6 | r3 = r6;
0x00004da4 movs r0, 4 | r0 = 4;
0x00004da6 movs r2, 0 | r2 = 0;
0x00004da8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004dac mov r0, r4 | r0 = r4;
0x00004dae movs r1, 1 | r1 = 1;
0x00004db0 bl 0x17734 | fcn_00017734 (r0);
| label_8:
0x00004db4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00004db6 movs r2, 0 | r2 = 0;
0x00004db8 movs r3, 3 | r3 = 3;
0x00004dba movw r1, 0x316 | r1 = 0x316;
0x00004dbe add.w r0, r0, 0x188 | r0 += 0x188;
0x00004dc2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00004dc6 ldr r2, [sp, 0x44] | r2 = var_44h;
0x00004dc8 cmp r2, 0 |
| if (r2 != 0) {
0x00004dca bne.w 0x4cc6 | goto label_2;
| }
| label_10:
0x00004dce ldr r0, [pc, 0x134] |
0x00004dd0 movs r3, 3 | r3 = 3;
0x00004dd2 movw r1, 0x337 | r1 = 0x337;
0x00004dd6 add r0, pc |
0x00004dd8 add.w r0, r0, 0x174 | r0 = 0x9e54;
0x00004ddc bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00004de0 ldr r2, [pc, 0x124] |
0x00004de2 ldr r3, [pc, 0x100] | r3 = *(0x4ee6);
0x00004de4 add r2, pc | r2 = 0x9cf0;
0x00004de6 ldr r3, [r2, r3] | r3 = *(0x9cf0);
0x00004de8 ldr r2, [r3] | r2 = *(0x9cf0);
0x00004dea ldr r3, [sp, 0x84] | r3 = var_84h;
0x00004dec eors r2, r3 | r2 ^= r3;
0x00004dee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004df2 bne 0x4eda | goto label_16;
| }
0x00004df4 add sp, 0x8c |
0x00004df6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x00004dfa ldr r1, [sp, 0x18] | r1 = var_18h;
0x00004dfc add.w r3, r5, 0x24 | r3 = r5 + 0x24;
0x00004e00 ldm r3, {r2, r3} | r2 = *(r3);
| r3 = *((r3 + 4));
0x00004e02 ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x00004e04 bl 0x393c | fcn_0000393c (r0);
0x00004e08 ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x00004e0a mov.w r2, 0x3e8 | r2 = 0x3e8;
0x00004e0e cmp r3, 0xa |
0x00004e10 it lt |
| if (r3 >= 0xa) {
0x00004e12 movlt r3, 0xa | r3 = 0xa;
| }
0x00004e14 mul r3, r2, r3 | r3 = r2 * r3;
0x00004e16 ssat r7, 0x1b, r3, lsl 7 | __asm ("ssat r7, 0x1b, r3, lsl 7");
0x00004e1a cmp r3, r0 |
0x00004e1c sbcs r2, r1 | __asm ("sbcs r2, r1");
| if (r3 >= r0) {
0x00004e1e bge.w 0x4d1a | goto label_1;
| }
0x00004e22 ldr r3, [r5] | r3 = *(r5);
0x00004e24 cmp r3, 1 |
| if (r3 != 1) {
0x00004e26 bne 0x4d4a | goto label_3;
| }
| label_6:
0x00004e28 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00004e2a movs r2, 0 | r2 = 0;
0x00004e2c movs r1, 7 | r1 = 7;
0x00004e2e movs r0, 3 | r0 = 3;
0x00004e30 add r6, sp, 0x54 | r6 += var_54h;
0x00004e32 str r3, [sp, 8] | var_8h_2 = r3;
0x00004e34 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00004e36 str r3, [sp, 4] | var_4h_2 = r3;
0x00004e38 ldr r3, [r4] | r3 = *(r4);
0x00004e3a str r3, [sp] | *(sp) = r3;
0x00004e3c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004e3e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00004e42 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00004e44 add.w r3, r5, 0x10 | r3 = r5 + 0x10;
0x00004e48 ldr r7, [r5, 0x20] | r7 = *((r5 + 0x20));
0x00004e4a add.w lr, sp, 0x70 | lr += var_70h;
0x00004e4e mov ip, r4 |
0x00004e50 str r2, [sp, 0x14] | var_14h_2 = r2;
0x00004e52 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00004e54 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x00004e56 str r2, [sp, 0x60] | var_60h = r2;
0x00004e58 ldr r2, [r7] | r2 = *(r7);
0x00004e5a str r2, [sp, 0x58] | var_58h = r2;
0x00004e5c ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x00004e5e strd r2, r1, [sp, 0x64] | __asm ("strd r2, r1, [sp, 0x64]");
0x00004e62 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00004e64 stm.w lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x00004e68 mov r0, r6 | r0 = r6;
0x00004e6a ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x00004e6c str r2, [sp, 0x6c] | var_6ch = r2;
0x00004e6e ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00004e70 str r3, [sp, 0x80] | var_80h = r3;
0x00004e72 ldr r1, [ip], 0x1c | r1 = *(ip);
| ip += 0x1c;
0x00004e76 ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x00004e7a strd ip, r1, [sp] | __asm ("strd ip, r1, [sp]");
0x00004e7e movs r1, 1 | r1 = 1;
0x00004e80 bl 0x64c4 | fcn_000064c4 (r0, r1, r2, r3, r4, r5);
0x00004e84 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00004e86 ldr r2, [sp, 0x80] | r2 = var_80h;
0x00004e88 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x00004e8a adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x00004e8c beq.w 0x4d8a | goto label_4;
| }
0x00004e90 ldr r3, [r5] | r3 = *(r5);
0x00004e92 cmp r3, 0 |
0x00004e94 it eq |
| if (r3 == 0) {
0x00004e96 cmneq r0, 0x16 | __asm ("cmneq r0, 0x16");
| }
| if (r3 == 0) {
0x00004e9a beq 0x4ed0 | goto label_17;
| }
| label_9:
0x00004e9c add r6, sp, 0x30 | r6 += var_30h;
0x00004e9e adds r5, 0x24 | r5 += 0x24;
0x00004ea0 mov r0, r6 | r0 = r6;
0x00004ea2 bl 0x38d8 | r0 = fcn_000038d8 (r0);
0x00004ea6 ldm.w r6, {r0, r1} | r0 = *(r6);
| r1 = *((r6 + 4));
0x00004eaa stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
0x00004eae b 0x4d1a | goto label_1;
| label_11:
0x00004eb0 mov r0, r4 | r0 = r4;
0x00004eb2 movs r1, 1 | r1 = 1;
0x00004eb4 bl 0x17734 | fcn_00017734 (r0);
0x00004eb8 b 0x4cbe | goto label_0;
| label_15:
0x00004eba ldrb.w r1, [r5, 0x2c] | r1 = *((r5 + 0x2c));
0x00004ebe cmp r1, 5 |
| if (r1 != 5) {
0x00004ec0 bne.w 0x4d58 | goto label_5;
| }
0x00004ec4 b 0x4e28 | goto label_6;
| label_13:
0x00004ec6 ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x00004ec8 cmp r3, 0 |
| if (r3 > 0) {
0x00004eca bgt.w 0x4d16 | goto label_7;
| }
0x00004ece b 0x4db4 | goto label_8;
| label_17:
0x00004ed0 mov r1, r6 | r1 = r6;
0x00004ed2 mov r0, r4 | r0 = r4;
0x00004ed4 bl 0x3b98 | fcn_00003b98 (r0, r1);
0x00004ed8 b 0x4e9c | goto label_9;
| label_16:
0x00004eda blx 0x348c | fprintf_chk ()
0x00004ede nop |
0x00004ee0 adr r0, 0x90 | r0 = 0x90;
0x00004ee2 movs r2, r0 | r2 = r0;
0x00004ee4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00004ee6 movs r0, r0 |
0x00004ee8 ldr r4, [pc, 0x60] | r4 = *(0x4f4c);
0x00004eea movs r1, r0 | r1 = r0;
0x00004eec adr r0, 0 | r0 = 0;
0x00004eee movs r2, r0 | r2 = r0;
0x00004ef0 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x00004ef2 movs r0, r0 |
0x00004ef4 ldr r3, [pc, 0x3d8] | r3 = *(0x52d0);
0x00004ef6 movs r1, r0 | r1 = r0;
0x00004ef8 ldr r3, [pc, 0x290] | r3 = *(0x518c);
0x00004efa movs r1, r0 | r1 = r0;
0x00004efc ldr r2, [pc, 0xc8] | r2 = *(0x4fc8);
0x00004efe movs r1, r0 | r1 = r0;
0x00004f00 ldr r3, [pc, 0x368] | r3 = *(0x526c);
0x00004f02 movs r1, r0 | r1 = r0;
0x00004f04 ldr r2, [pc, 0x2e8] | r2 = *(0x51f0);
0x00004f06 movs r1, r0 | r1 = r0;
0x00004f08 ldr r6, [sp, 0x2b0] | r6 = *(arg_2b0h);
0x00004f0a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x4f0c */
| #include <stdint.h>
|
; (fcn) fcn.00004f0c () | void fcn_00004f0c (int16_t arg_60h, int16_t arg_1b8h, int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| if (? < ?) {
0x00004f0c andhs r4, r3, 0x8c00 | r4 = r3 & 0x8c00;
| }
0x00004f10 push {r4, r5, r6, lr} |
0x00004f12 mov r5, r0 | r5 = r0;
0x00004f14 ldr r6, [pc, 0x88] |
0x00004f16 sub sp, 8 |
0x00004f18 add r3, pc | r3 += pc;
0x00004f1a movs r4, 0 | r4 = 0;
0x00004f1c add.w r0, r3, 0x1a0 | r0 = r3 + 0x1a0;
0x00004f20 ldr r3, [pc, 0x80] | r3 = *(0x4fa4);
0x00004f22 add r6, pc | r6 = 0x9ec6;
0x00004f24 movw r1, 0x37e | r1 = 0x37e;
0x00004f28 ldr r3, [r6, r3] |
0x00004f2a mov r6, sp | r6 = sp;
0x00004f2c ldr r3, [r3] | r3 = *(0x9ec6);
0x00004f2e str r3, [sp, 4] | var_4h = r3;
0x00004f30 mov.w r3, 0 | r3 = 0;
0x00004f34 str r4, [sp] | *(sp) = r4;
0x00004f36 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00004f3a b 0x4f4c |
| while (r0 != 0) {
0x00004f3c ldr r3, [sp] | r3 = *(sp);
0x00004f3e ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x00004f40 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00004f42 bl 0x3f5c | fcn_00003f5c (r0);
0x00004f44 invalid |
0x00004f48 cmp r3, 4 |
| if (r3 > 4) {
0x00004f4a bgt 0x4f8c | goto label_1;
| }
| label_0:
0x00004f4c mov r1, r6 | r1 = r6;
0x00004f4e mov r0, r5 | r0 = r5;
0x00004f50 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00004f54 mov r4, r0 | r4 = r0;
0x00004f56 cmp r0, 0 |
0x00004f58 bne 0x4f3c |
| }
0x00004f5a mov r0, r5 | r0 = r5;
0x00004f5c bl 0xd94c | fcn_0000d94c (r0);
0x00004f60 ldr r0, [pc, 0x44] |
0x00004f62 movs r3, 3 | r3 = 3;
0x00004f64 mov r2, r4 | r2 = r4;
0x00004f66 movw r1, 0x387 | r1 = 0x387;
0x00004f6a add r0, pc |
0x00004f6c add.w r0, r0, 0x1a0 | r0 = 0xa0b6;
0x00004f70 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00004f74 ldr r2, [pc, 0x34] |
0x00004f76 ldr r3, [pc, 0x2c] | r3 = *(0x4fa6);
0x00004f78 add r2, pc | r2 = 0x9f28;
0x00004f7a ldr r3, [r2, r3] | r3 = *(0x9f28);
0x00004f7c ldr r2, [r3] | r2 = *(0x9f28);
0x00004f7e ldr r3, [sp, 4] | r3 = var_4h;
0x00004f80 eors r2, r3 | r2 ^= r3;
0x00004f82 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00004f86 bne 0x4f96 |
0x00004f88 add sp, 8 |
0x00004f8a pop {r4, r5, r6, pc} |
| label_1:
0x00004f8c add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x00004f90 blx 0x3620 | fcn_00003620 ();
0x00004f94 b 0x4f4c | goto label_0;
| }
0x00004f96 blx 0x348c | fprintf_chk ()
0x00004f9a nop |
0x00004f9c ldr r1, [pc, 0x1e0] | r1 = *(0x5180);
0x00004f9e movs r1, r0 | r1 = r0;
0x00004fa0 ldr r5, [sp, 0x1b8] | r5 = *(arg_1b8h);
0x00004fa2 movs r2, r0 | r2 = r0;
0x00004fa4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00004fa6 movs r0, r0 |
0x00004fa8 ldr r1, [pc, 0x98] | r1 = *(0x5044);
0x00004faa movs r1, r0 | r1 = r0;
0x00004fac ldr r5, [sp, 0x60] | r5 = *(arg_60h);
0x00004fae movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x534c */
| #include <stdint.h>
|
; (fcn) fcn.0000534c () | void fcn_0000534c (int16_t arg_d8h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x0000534c invalid |
0x00005350 movs r3, 0 | r3 = 0;
0x00005352 push {r4, r5, lr} |
0x00005354 mov r4, r1 | r4 = r1;
0x00005356 ldr r1, [pc, 0x80] |
0x00005358 mov r5, r0 | r5 = r0;
0x0000535a add ip, pc |
0x0000535c sub sp, 0xc |
0x0000535e ldr r0, [pc, 0x7c] |
0x00005360 movs r2, 3 | r2 = 3;
0x00005362 ldr.w r1, [ip, r1] | r1 = *((ip + r1));
0x00005366 add r0, pc | r0 = 0xa748;
0x00005368 ldr r1, [r1] | r1 = *(0x53da);
0x0000536a str r1, [sp, 4] | var_4h = r1;
0x0000536c mov.w r1, 0 | r1 = 0;
0x00005370 movs r1, 0x86 | r1 = 0x86;
0x00005372 str r3, [sp] | *(sp) = r3;
0x00005374 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00005378 cmp r4, 0 |
0x0000537a it ne |
| if (r4 != 0) {
0x0000537c cmpne r5, 0 | __asm ("cmpne r5, 0");
| }
| if (r4 == 0) {
0x0000537e beq 0x539e | goto label_0;
| }
0x00005380 mov r1, r4 | r1 = r4;
0x00005382 mov r0, r5 | r0 = r5;
0x00005384 bl 0x52d8 | r0 = fcn_000052d8 (r0, r1);
0x00005388 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0000538a cbz r0, 0x53ca | goto label_1;
| }
0x0000538c add r4, r5 | r4 += r5;
0x0000538e b 0x539a |
| while (r1 <= r4) {
0x00005390 subs r0, r4, r1 | r0 = r4 - r1;
0x00005392 bl 0x52d8 | r0 = fcn_000052d8 (r0, r1);
0x00005396 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x00005398 cbz r0, 0x53ca | goto label_1;
| }
0x0000539a cmp r1, r4 |
0x0000539c blo 0x5390 |
| }
| label_0:
0x0000539e movs r4, 1 | r4 = 1;
| do {
0x000053a0 ldr r0, [pc, 0x3c] |
0x000053a2 movs r3, 3 | r3 = 3;
0x000053a4 mov r2, sp | r2 = sp;
0x000053a6 movs r1, 0x92 | r1 = 0x92;
0x000053a8 str r4, [sp] | *(sp) = r4;
0x000053aa add r0, pc | r0 = 0xa78e;
0x000053ac bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000053b0 ldr r2, [pc, 0x30] |
0x000053b2 ldr r3, [pc, 0x24] | r3 = *(0x53da);
0x000053b4 ldr r0, [sp] | r0 = *(sp);
0x000053b6 add r2, pc | r2 = 0xa79e;
0x000053b8 ldr r3, [r2, r3] | r3 = *(0xa79e);
0x000053ba ldr r2, [r3] | r2 = *(0xa79e);
0x000053bc ldr r3, [sp, 4] | r3 = var_4h;
0x000053be eors r2, r3 | r2 ^= r3;
0x000053c0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000053c4 bne 0x53ce | goto label_2;
| }
0x000053c6 add sp, 0xc |
0x000053c8 pop {r4, r5, pc} |
| label_1:
0x000053ca mov r4, r1 | r4 = r1;
0x000053cc b 0x53a0 |
| } while (1);
| label_2:
0x000053ce blx 0x348c | fprintf_chk ()
0x000053d2 nop |
0x000053d4 ldr r1, [sp, 0xd8] | r1 = *(arg_d8h);
0x000053d6 movs r2, r0 | r2 = r0;
0x000053d8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000053da movs r0, r0 |
0x000053dc bx r5 | return uint32_t (*r5)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x53e8 */
| #include <stdint.h>
|
; (fcn) fcn.000053e8 () | void fcn_000053e8 (int16_t arg_150h, int16_t arg_248h, int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| if (? < ?) {
0x000053e8 andhs r4, r3, 0x6800 | r4 = r3 & 0x6800;
| }
0x000053ec ldr.w ip, [pc, 0x68] | ip = *(0x00005458);
0x000053f0 movs r1, 0xa0 | r1 = 0xa0;
0x000053f2 push {r4, r5, lr} |
0x000053f4 mov r4, r0 | r4 = r0;
0x000053f6 add r3, pc | r3 += pc;
0x000053f8 sub sp, 0xc |
0x000053fa add.w r0, r3, 0x10 | r0 = r3 + 0x10;
0x000053fe add ip, pc |
0x00005400 ldr r3, [pc, 0x58] |
0x00005402 movs r5, 0 | r5 = 0;
0x00005404 ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00005408 ldr r3, [r3] | r3 = *(0x545c);
0x0000540a str r3, [sp, 4] | var_4h = r3;
0x0000540c mov.w r3, 0 | r3 = 0;
0x00005410 str r5, [sp] | *(sp) = r5;
0x00005412 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
| if (r4 != 0) {
0x00005416 cbz r4, 0x5426 |
0x00005418 mov r0, r4 | r0 = r4;
0x0000541a blx 0x3258 | unlink (r0);
0x0000541e mov r1, r4 | r1 = r4;
0x00005420 bl 0x534c | fcn_0000534c (r0, r1, r2);
0x00005424 str r0, [sp] | *(sp) = r0;
| }
0x00005426 ldr r0, [pc, 0x38] |
0x00005428 movs r3, 3 | r3 = 3;
0x0000542a mov r2, sp | r2 = sp;
0x0000542c movs r1, 0xa5 | r1 = 0xa5;
0x0000542e add r0, pc | r0 = 0xa894;
0x00005430 adds r0, 0x10 | r0 += 0x10;
0x00005432 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005436 ldr r2, [pc, 0x2c] |
0x00005438 ldr r3, [pc, 0x20] | r3 = *(0x545c);
0x0000543a ldr r0, [sp] | r0 = *(sp);
0x0000543c add r2, pc | r2 = 0xa8a6;
0x0000543e ldr r3, [r2, r3] | r3 = *(0xa8a6);
0x00005440 ldr r2, [r3] | r2 = *(0xa8a6);
0x00005442 ldr r3, [sp, 4] | r3 = var_4h;
0x00005444 eors r2, r3 | r2 ^= r3;
0x00005446 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000544a bne 0x5450 |
0x0000544c add sp, 0xc |
0x0000544e pop {r4, r5, pc} |
| }
0x00005450 blx 0x348c | fprintf_chk ()
0x00005454 mov lr, r3 | lr = r3;
0x00005456 movs r1, r0 | r1 = r0;
0x00005458 ldr r0, [sp, 0x248] | r0 = *(arg_248h);
0x0000545a movs r2, r0 | r2 = r0;
0x0000545c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000545e movs r0, r0 |
0x00005460 mov r6, ip | r6 = ip;
0x00005462 movs r1, r0 | r1 = r0;
0x00005464 ldr r0, [sp, 0x150] | r0 = *(arg_150h);
0x00005466 movs r2, r0 | r2 = r0;
0x00005468 ldr r0, [pc, 4] | r0 = *(0x00005470);
0x0000546a add r0, pc | r0 += pc;
0x0000546c strb r1, [r0] | *(r0) = r1;
0x0000546e bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x5790 */
| #include <stdint.h>
|
; (fcn) fcn.00005790 () | void fcn_00005790 (int16_t arg_218h, int16_t arg_3a8h, int16_t arg1, int16_t arg2) {
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_4ch;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00005790 andhs r4, r3, 0x9400 | r4 = r3 & 0x9400;
| }
0x00005794 push {r4, r5, r6, lr} |
0x00005796 mov r4, r1 | r4 = r1;
0x00005798 ldr r1, [pc, 0x90] |
0x0000579a mov r5, r0 | r5 = r0;
0x0000579c add r3, pc | r3 += pc;
0x0000579e sub sp, 8 |
0x000057a0 add.w r0, r3, 0x30 | r0 = r3 + 0x30;
0x000057a4 ldr r3, [pc, 0x88] | r3 = *(0x5830);
0x000057a6 add r1, pc | r1 = 0xafd6;
0x000057a8 movs r6, 0 | r6 = 0;
0x000057aa ldr r3, [r1, r3] |
0x000057ac movw r1, 0x12d | r1 = 0x12d;
0x000057b0 ldr r3, [r3] | r3 = *(0xafd6);
0x000057b2 str r3, [sp, 4] | var_4h = r3;
0x000057b4 mov.w r3, 0 | r3 = 0;
0x000057b8 str r6, [sp] | *(sp) = r6;
0x000057ba bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000057be ldr r1, [sp] | r1 = *(sp);
0x000057c0 cmp r4, 0x7f |
0x000057c2 lsr.w r2, r4, 7 | r2 = r4 >> 7;
0x000057c6 and r3, r4, 0x7f | r3 = r4 & 0x7f;
0x000057ca add r1, r5 | r1 += r5;
| if (r4 < 0x7f) {
0x000057cc bls 0x57e6 | goto label_1;
| }
| do {
0x000057ce orr r3, r3, 0x80 | r3 |= 0x80;
| if (r5 == 0) {
0x000057d2 cbz r5, 0x581e | goto label_2;
| }
0x000057d4 mov r4, r2 | r4 = r2;
0x000057d6 strb r3, [r1], 1 | *(r1) = r3;
| r1++;
| label_0:
0x000057da cmp r4, 0x7f |
0x000057dc lsr.w r2, r4, 7 | r2 = r4 >> 7;
0x000057e0 and r3, r4, 0x7f | r3 = r4 & 0x7f;
0x000057e4 bhi 0x57ce |
| } while (r4 > 0x7f);
| label_1:
0x000057e6 rsb.w r2, r5, 1 | r2 = 1 - r5;
0x000057ea adds r4, r2, r1 | r4 = r2 + r1;
| if (r5 != 0) {
0x000057ec cbz r5, 0x57f0 |
0x000057ee strb r3, [r1] | *(r1) = r3;
| }
0x000057f0 ldr r0, [pc, 0x40] |
0x000057f2 movs r3, 3 | r3 = 3;
0x000057f4 mov r2, sp | r2 = sp;
0x000057f6 mov.w r1, 0x13a | r1 = 0x13a;
0x000057fa str r4, [sp] | *(sp) = r4;
0x000057fc add r0, pc | r0 = 0xb034;
0x000057fe adds r0, 0x30 | r0 += 0x30;
0x00005800 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005804 ldr r2, [pc, 0x30] |
0x00005806 ldr r3, [pc, 0x28] | r3 = *(0x5832);
0x00005808 ldr r0, [sp] | r0 = *(sp);
0x0000580a add r2, pc | r2 = 0xb046;
0x0000580c ldr r3, [r2, r3] | r3 = *(0xb046);
0x0000580e ldr r2, [r3] | r2 = *(0xb046);
0x00005810 ldr r3, [sp, 4] | r3 = var_4h;
0x00005812 eors r2, r3 | r2 ^= r3;
0x00005814 mov.w r3, 0 | r3 = 0;
0x00005816 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x00005818 bne 0x5824 |
0x0000581a add sp, 8 |
0x0000581c pop {r4, r5, r6, pc} |
| label_2:
0x0000581e adds r1, 1 | r1++;
0x00005820 mov r4, r2 | r4 = r2;
0x00005822 b 0x57da | goto label_0;
| }
0x00005824 blx 0x348c | fprintf_chk ()
0x00005828 mvns r4, r4 | r4 = ~r4;
0x0000582a movs r1, r0 | r1 = r0;
0x0000582c str r4, [sp, 0x3a8] | *(arg_3a8h) = r4;
0x0000582e movs r2, r0 | r2 = r0;
0x00005830 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00005832 movs r0, r0 |
0x00005834 bics r4, r0 | __asm ("bics r4, r0");
0x00005836 movs r1, r0 | r1 = r0;
0x00005838 str r4, [sp, 0x218] | *(arg_218h) = r4;
0x0000583a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x583c */
| #include <stdint.h>
|
; (fcn) fcn.0000583c () | void fcn_0000583c (int16_t arg_60h, int16_t arg_64h, int16_t arg_e8h, int16_t arg_2b8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_30h_2;
| int32_t var_0h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000583c addslt fp, r4, r0, ror r5 | __asm ("addslt fp, r4, r0, ror r5");
0x00005840 str r2, [sp, 0x24] | var_24h = r2;
0x00005842 mov r4, r0 | r4 = r0;
0x00005844 mov.w r6, -1 | r6 = -1;
0x00005848 mov r5, r1 | r5 = r1;
0x0000584a ldr r2, [pc, 0x10c] |
0x0000584c movs r1, 0xc6 | r1 = 0xc6;
0x0000584e str r3, [sp, 0x20] | var_20h = r3;
0x00005850 ldr r3, [pc, 0x108] | r3 = *(0x595c);
0x00005852 ldr.w ip, [pc, 0x10c] |
0x00005856 add r2, pc | r2 = 0xb1b4;
0x00005858 ldr r3, [r2, r3] |
0x0000585a movs r2, 3 | r2 = 3;
0x0000585c add ip, pc | ip = 0xb1c2;
0x0000585e add.w r0, ip, 0x44 | r0 = ip + 0x44;
0x00005862 ldr r3, [r3] | r3 = *(0xb1b4);
0x00005864 str r3, [sp, 0x4c] | var_4ch = r3;
0x00005866 mov.w r3, 0 | r3 = 0;
0x0000586a str r6, [sp, 0x2c] | var_2ch = r6;
0x0000586c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00005870 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00005872 movs r0, 0 | r0 = 0;
0x00005874 bl 0x5790 | r0 = fcn_00005790 (r0, r1, r2, r3);
0x00005878 adds r2, r0, 1 | r2 = r0 + 1;
0x0000587a ldr r0, [pc, 0xe8] |
0x0000587c movs r1, 0xc8 | r1 = 0xc8;
0x0000587e str r2, [sp, 0x30] | var_30h = r2;
0x00005880 add r0, pc | r0 = 0xb1ea;
0x00005882 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00005886 str r0, [sp, 0x34] | var_34h = r0;
0x00005888 cmp r0, 0 |
| if (r0 == 0) {
0x0000588a beq 0x591e | goto label_3;
| }
0x0000588c uxtb r6, r5 | r6 = (int8_t) r5;
0x0000588e strb r6, [r0] | *(r0) = r6;
0x00005890 and r6, r6, 0xf0 | r6 &= 0xf0;
0x00005894 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00005896 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00005898 adds r0, 1 | r0++;
0x0000589a bl 0x5790 | fcn_00005790 (r0, r1, r2, r3);
0x0000589e cmp r6, 0x60 |
| if (r6 == 0x60) {
0x000058a0 beq 0x5922 | goto label_4;
| }
0x000058a2 add r5, sp, 0x20 | r5 += var_20h;
0x000058a4 add r6, sp, 0x24 | r6 += var_24h;
| label_2:
0x000058a6 movs r3, 1 | r3 = 1;
0x000058a8 movs r1, 0 | r1 = 0;
0x000058aa add r2, sp, 0x60 | r2 += arg_60h;
0x000058ac strd r3, r6, [sp, 0x38] | __asm ("strd r3, r6, [var_38h]");
0x000058b0 str r2, [sp, 0x44] | var_44h = r2;
0x000058b2 add r3, sp, 0x38 | r3 += var_38h;
0x000058b4 str r1, [sp, 0x48] | var_48h = r1;
0x000058b6 add r2, sp, 0x30 | r2 += var_30h;
0x000058b8 add r1, sp, 0x34 | r1 += var_34h;
0x000058ba mov r0, r4 | r0 = r4;
0x000058bc str r5, [sp, 0x40] | var_40h = r5;
0x000058be bl 0xf338 | r0 = fcn_0000f338 (r0, r1, r2, r3);
0x000058c2 mov r3, r0 | r3 = r0;
0x000058c4 str r0, [sp, 0x2c] | var_2ch = r0;
| if (r0 == 0) {
0x000058c6 cbz r0, 0x5904 | goto label_5;
| }
0x000058c8 adds r3, 0x16 | r3 += 0x16;
0x000058ca bne 0x58f6 |
| while (1) {
| label_0:
0x000058cc ldr r0, [pc, 0x98] |
0x000058ce movs r3, 3 | r3 = 3;
0x000058d0 add r2, sp, 0x2c | r2 += var_2ch;
0x000058d2 movs r1, 0xe9 | r1 = 0xe9;
0x000058d4 add r0, pc | r0 = 0xb240;
0x000058d6 adds r0, 0x44 | r0 += 0x44;
0x000058d8 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000058dc ldr r2, [pc, 0x8c] |
0x000058de ldr r3, [pc, 0x7c] | r3 = *(0x595e);
0x000058e0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000058e2 add r2, pc | r2 = 0xb252;
0x000058e4 ldr r3, [r2, r3] | r3 = *(0xb252);
0x000058e6 ldr r2, [r3] | r2 = *(0xb252);
0x000058e8 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000058ea eors r2, r3 | r2 ^= r3;
0x000058ec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000058f0 bne 0x5954 | goto label_6;
| }
0x000058f2 add sp, 0x50 |
0x000058f4 pop {r4, r5, r6, pc} |
| label_1:
0x000058f6 ldr r0, [pc, 0x78] |
0x000058f8 movs r1, 0xe6 | r1 = 0xe6;
0x000058fa ldr r2, [sp, 0x34] | r2 = var_34h;
0x000058fc add r0, pc | r0 = 0xb272;
0x000058fe bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00005902 b 0x58cc |
| }
| label_5:
0x00005904 add r5, sp, 0x18 | r5 += var_18h;
0x00005906 adds r4, 4 | r4 += 4;
0x00005908 mov r0, r5 | r0 = r5;
0x0000590a bl 0x38d8 | fcn_000038d8 (r0);
0x0000590e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00005910 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00005914 adds r3, 0x16 | r3 += 0x16;
0x00005916 stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
| if (r3 == 0x16) {
0x0000591a beq 0x58cc | goto label_0;
| }
0x0000591c b 0x58f6 | goto label_1;
| label_3:
0x0000591e str r6, [sp, 0x2c] | var_2ch = r6;
0x00005920 b 0x58cc | goto label_0;
| label_4:
0x00005922 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00005924 movs r2, 0 | r2 = 0;
0x00005926 ldr r1, [sp, 0x64] | r1 = *(arg_64h);
0x00005928 ubfx r5, r5, 4, 4 | r5 = (r5 >> 4) & ((1 << 4) - 1);
0x0000592c add r6, sp, 0x24 | r6 += var_24h;
0x0000592e strd r2, r1, [sp, 0x10] | __asm ("strd r2, r1, [var_10h]");
0x00005932 ldrb r2, [r3] | r2 = *(r3);
0x00005934 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x00005936 str r5, [sp, 8] | var_8h_2 = r5;
0x00005938 add r5, sp, 0x20 | r5 += var_20h;
0x0000593a strd r6, r5, [sp] | __asm ("strd r6, r5, [sp]");
0x0000593e add.w r3, r3, r2, lsl 8 | r3 += (r2 << 8);
0x00005942 ldrd r2, r1, [sp, 0x30] | __asm ("ldrd r2, r1, [var_30h]");
0x00005946 str r3, [sp, 0xc] | var_ch_2 = r3;
0x00005948 movs r3, 1 | r3 = 1;
0x0000594a ldr r0, [r4] | r0 = *(r4);
0x0000594c bl 0x9fe8 | fcn_00009fe8 (r0, r1, r2, r3, r4, r5, r6);
0x00005950 str r0, [sp, 0x2c] | var_2ch = r0;
0x00005952 b 0x58a6 | goto label_2;
| label_6:
0x00005954 blx 0x348c | fprintf_chk ()
0x00005958 str r4, [sp, 0xe8] | *(arg_e8h) = r4;
0x0000595a movs r2, r0 | r2 = r0;
0x0000595c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000595e movs r0, r0 |
0x00005960 orrs r4, r4 | r4 |= r4;
0x00005962 movs r1, r0 | r1 = r0;
0x00005964 tst r0, r7 |
0x00005966 movs r1, r0 | r1 = r0;
0x00005968 cmp r4, r5 |
0x0000596a movs r1, r0 | r1 = r0;
0x0000596c str r3, [sp, 0x2b8] | *(arg_2b8h) = r3;
0x0000596e movs r2, r0 | r2 = r0;
0x00005970 sbcs r4, r7 | __asm ("sbcs r4, r7");
0x00005972 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x5974 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00005974 () | void fcn_00005974 (int16_t arg_30h, int16_t arg_170h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_28h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00005974 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00005978 mov r4, r2 | r4 = r2;
0x0000597a ldr r2, [pc, 0xe0] |
0x0000597c mov r6, r3 | r6 = r3;
0x0000597e mov r7, r0 | r7 = r0;
0x00005980 sub sp, 0x10 |
0x00005982 ldr r3, [pc, 0xdc] | r3 = *(0x5a62);
0x00005984 mov sb, r1 | sb = r1;
0x00005986 add r2, pc | r2 = 0xb3e8;
0x00005988 ldr r0, [pc, 0xd8] |
0x0000598a ldr.w r8, [pc, 0xdc] |
0x0000598e movw r1, 0x28b | r1 = 0x28b;
0x00005992 ldr r3, [r2, r3] |
0x00005994 movs r2, 3 | r2 = 3;
0x00005996 add r0, pc | r0 = 0xb3fe;
0x00005998 ldr.w sl, [sp, 0x30] | sl = *(arg_30h);
0x0000599c adds r0, 0x54 | r0 += 0x54;
0x0000599e add r8, pc | r8 = 0xb40c;
0x000059a0 ldr r3, [r3] | r3 = *(0xb3e8);
0x000059a2 str r3, [sp, 0xc] | var_ch = r3;
0x000059a4 mov.w r3, 0 | r3 = 0;
0x000059a8 mov.w r3, -1 | r3 = -1;
0x000059ac str r3, [sp, 8] | var_8h = r3;
0x000059ae bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000059b2 movs r2, 2 | r2 = 2;
0x000059b4 mov.w r1, 0x28c | r1 = 0x28c;
0x000059b8 mov r0, r8 | r0 = r8;
0x000059ba bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
| if (r0 == 0) {
0x000059be cbz r0, 0x5a1c | goto label_0;
| }
0x000059c0 sub.w r3, sb, 6 | r3 = sb - 6;
0x000059c4 and r6, r6, 1 | r6 &= 1;
0x000059c8 clz r3, r3 | r3 &= r3;
0x000059cc mov r5, r0 | r5 = r0;
0x000059ce lsrs r3, r3, 5 | r3 >>= 5;
0x000059d0 movs r1, 0 | r1 = 0;
0x000059d2 bfc r1, 0, 8 | value_0 = BIT_MASK (8, );
| value_0 = ~value_0;
| r1 &= value_0;
0x000059d6 lsls r3, r3, 1 | r3 <<= 1;
0x000059d8 mov r0, sl | r0 = sl;
0x000059da mov r2, r5 | r2 = r5;
0x000059dc orr.w r6, r3, r6, lsl 3 | r6 = r3 | (r6 << 3);
0x000059e0 add.w r3, r4, 0xff | r3 = r4 + 0xff;
0x000059e4 ands.w r3, r3, r4, asr 32 | r3 &= (r4 >> 32);
0x000059e8 it lo |
| if (r3 >= r3) {
0x000059ea movlo r3, r4 | r3 = r4;
| }
0x000059ec asrs r3, r3, 8 | r3 >>= 8;
0x000059ee orr.w r6, r6, sb, lsl 4 | r6 |= (sb << 4);
0x000059f0 asrs r1, r1, 0x18 | r1 >>= 0x18;
0x000059f2 strb r3, [r5] | *(r5) = r3;
0x000059f4 rsbs r3, r4, 0 | r3 = r4 - ;
0x000059f6 uxtb r3, r3 | r3 = (int8_t) r3;
0x000059f8 uxtb r4, r4 | r4 = (int8_t) r4;
0x000059fa it pl |
| if (r3 >= r3) {
0x000059fc rsbpl r4, r3, 0 | __asm ("rsbpl r4, r3, 0");
| }
0x000059fe movs r3, 1 | r3 = 1;
0x00005a00 strb r4, [r5, 1] | *((r5 + 1)) = r4;
0x00005a02 and r4, r1, 1 | r4 = r1 & 1;
0x00005a06 orrs r6, r4 | r6 |= r4;
0x00005a08 str r3, [sp] | *(sp) = r3;
0x00005a0a bfi r1, r6, 0, 8 | value_1 = BIT_MASK (0, 8);
| value_2 = r6 & value_1;
| value_1 = ~value_1;
| r1 &= value_1;
| r1 |= value_2;
0x00005a0c lsls r7, r0, 4 | r7 = r0 << 4;
0x00005a0e movs r3, 2 | r3 = 2;
0x00005a10 str r7, [sp, 4] | var_4h = r7;
0x00005a12 bl 0x583c | fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x00005a16 str r0, [sp, 8] | var_8h = r0;
0x00005a18 adds r0, 0x16 | r0 += 0x16;
0x00005a1a bne 0x5a4a |
| while (1) {
| label_0:
0x00005a1c ldr r0, [pc, 0x4c] |
0x00005a1e movs r3, 3 | r3 = 3;
0x00005a20 add r2, sp, 8 | r2 += var_8h;
0x00005a22 movw r1, 0x297 | r1 = 0x297;
0x00005a26 add r0, pc | r0 = 0xb496;
0x00005a28 adds r0, 0x54 | r0 += 0x54;
0x00005a2a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005a2e ldr r2, [pc, 0x40] |
0x00005a30 ldr r3, [pc, 0x2c] | r3 = *(0x5a60);
0x00005a32 ldr r0, [sp, 8] | r0 = var_8h;
0x00005a34 add r2, pc | r2 = 0xb4aa;
0x00005a36 ldr r3, [r2, r3] | r3 = *(0xb4aa);
0x00005a38 ldr r2, [r3] | r2 = *(0xb4aa);
0x00005a3a ldr r3, [sp, 0xc] | r3 = var_ch;
0x00005a3c eors r2, r3 | r2 ^= r3;
0x00005a3e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00005a42 bne 0x5a58 | goto label_1;
| }
0x00005a44 add sp, 0x10 |
0x00005a46 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00005a4a mov r2, r5 | r2 = r5;
0x00005a4c movw r1, 0x295 | r1 = 0x295;
0x00005a50 mov r0, r8 | r0 = r8;
0x00005a52 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00005a56 b 0x5a1c |
| }
| label_1:
0x00005a58 blx 0x348c | fprintf_chk ()
0x00005a5c str r3, [sp, 0x28] | var_28h = r3;
0x00005a5e movs r2, r0 | r2 = r0;
0x00005a60 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00005a62 movs r0, r0 |
0x00005a64 rors r2, r5 | __asm ("rors r2, r5");
0x00005a66 movs r1, r0 | r1 = r0;
0x00005a68 asrs r2, r3 | r2 >>= r3;
0x00005a6a movs r1, r0 | r1 = r0;
0x00005a6c adcs r2, r3 | __asm ("adcs r2, r3");
0x00005a6e movs r1, r0 | r1 = r0;
0x00005a70 str r2, [sp, 0x170] | *(arg_170h) = r2;
0x00005a72 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x5a74 */
| #include <stdint.h>
|
; (fcn) fcn.00005a74 () | void fcn_00005a74 (int16_t arg_f8h, int16_t arg_1a8h, int16_t arg_2a0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_ch_4;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h_2;
| int16_t var_2ch;
| int16_t var_7h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00005a74 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00005a78 mov sb, r1 | sb = r1;
0x00005a7a ldr r1, [pc, 0x138] |
0x00005a7c mov sl, r3 | sl = r3;
0x00005a7e mov r8, r0 | r8 = r0;
0x00005a80 sub sp, 0x30 |
0x00005a82 ldr r3, [pc, 0x134] | r3 = *(0x5bba);
0x00005a84 mov r7, r2 | r7 = r2;
0x00005a86 add r1, pc | r1 = 0xb640;
0x00005a88 ldr r0, [pc, 0x130] |
0x00005a8a mov.w r2, -1 | r2 = -1;
0x00005a8e ldr r3, [r1, r3] |
0x00005a90 mov.w r1, 0x100 | r1 = 0x100;
0x00005a94 add r0, pc | r0 = 0xb654;
0x00005a96 adds r0, 0x68 | r0 += 0x68;
0x00005a98 ldr r3, [r3] | r3 = *(0xb640);
0x00005a9a str r3, [sp, 0x2c] | var_2ch = r3;
0x00005a9c mov.w r3, 0 | r3 = 0;
0x00005aa0 str r2, [sp, 0x20] | var_20h = r2;
0x00005aa2 movs r2, 3 | r2 = 3;
0x00005aa4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00005aa8 ldr r3, [r7] | r3 = *(r7);
0x00005aaa cmp r3, 0 |
| if (r3 <= 0) {
0x00005aac ble 0x5bac | goto label_4;
| }
0x00005aae ldr r4, [r7, 8] | r4 = *((r7 + 8));
0x00005ab0 movs r5, 0 | r5 = 0;
0x00005ab2 add.w ip, r4, r3, lsl 2 |
| do {
0x00005ab6 ldr r6, [r4], 4 | r6 = *(r4);
| r4 += 4;
0x00005aba cmp r4, ip |
0x00005abc add r5, r6 | r5 += r6;
0x00005abe bne 0x5ab6 |
| } while (r4 != ip);
| label_3:
0x00005ac0 mov r1, r5 | r1 = r5;
0x00005ac2 movs r0, 0 | r0 = 0;
0x00005ac4 bl 0x5790 | r0 = fcn_00005790 (r0, r1, r2, r3);
0x00005ac8 adds r2, r0, 1 | r2 = r0 + 1;
0x00005aca ldr r0, [pc, 0xf4] |
0x00005acc mov.w r1, 0x104 | r1 = 0x104;
0x00005ad0 str r2, [sp, 0x24] | var_24h = r2;
0x00005ad2 add r0, pc | r0 = 0xb698;
0x00005ad4 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00005ad6 invalid |
0x00005ada cmp r0, 0 |
| if (r0 == 0) {
0x00005adc beq 0x5ba4 | goto label_5;
| }
0x00005ade uxtb.w r4, sb | r4 = (int8_t) sb;
0x00005ae2 mov r1, r5 | r1 = r5;
0x00005ae4 strb r4, [r0] | *(r0) = r4;
0x00005ae6 ldr r0, [sp, 0x28] | r0 = var_28h_2;
0x00005ae8 adds r0, 1 | r0++;
0x00005aea bl 0x5790 | fcn_00005790 (r0, r1, r2, r3);
0x00005aee and r3, r4, 0xf0 | r3 = r4 & 0xf0;
0x00005af2 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x00005af4 beq 0x5b4c | goto label_6;
| }
| label_0:
0x00005af6 mov r3, r7 | r3 = r7;
0x00005af8 add r2, sp, 0x24 | r2 += var_24h;
0x00005afa add r1, sp, 0x28 | r1 += var_28h_2;
0x00005afc mov r0, r8 | r0 = r8;
0x00005afe bl 0xf338 | r0 = fcn_0000f338 (r0, r1, r2, r3);
0x00005b02 mov r3, r0 | r3 = r0;
0x00005b04 str r0, [sp, 0x20] | var_20h = r0;
0x00005b06 cmp r0, 0 |
| if (r0 == 0) {
0x00005b08 beq 0x5b88 | goto label_7;
| }
0x00005b0a adds r3, 0x16 | r3 += 0x16;
0x00005b0c bne 0x5b3c |
| while (1) {
| label_1:
0x00005b0e ldr r0, [pc, 0xb4] |
0x00005b10 movs r3, 3 | r3 = 3;
0x00005b12 add r2, sp, 0x20 | r2 += var_20h;
0x00005b14 mov.w r1, 0x11e | r1 = 0x11e;
0x00005b16 strb r7, [r1, 6] | *((r1 + 6)) = r7;
0x00005b18 add r0, pc | r0 = 0xb6e2;
0x00005b1a adds r0, 0x68 | r0 += 0x68;
0x00005b1c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005b20 ldr r2, [pc, 0xa4] |
0x00005b22 ldr r3, [pc, 0x94] | r3 = *(0x5bba);
0x00005b24 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00005b26 add r2, pc | r2 = 0xb6f2;
0x00005b28 ldr r3, [r2, r3] | r3 = *(0xb6f2);
0x00005b2a ldr r2, [r3] | r2 = *(0xb6f2);
0x00005b2c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00005b2e eors r2, r3 | r2 ^= r3;
0x00005b30 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00005b34 bne 0x5bb0 | goto label_8;
| }
0x00005b36 add sp, 0x30 |
0x00005b38 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x00005b3c ldr r0, [pc, 0x8c] |
0x00005b3e mov.w r1, 0x11c | r1 = 0x11c;
0x00005b42 ldr r2, [sp, 0x28] | r2 = var_28h_2;
0x00005b44 add r0, pc | r0 = 0xb714;
0x00005b46 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00005b4a b 0x5b0e |
| }
| label_6:
0x00005b4c tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00005b50 beq 0x5af6 | goto label_0;
| }
0x00005b52 ldr r6, [r7, 4] | r6 = *((r7 + 4));
0x00005b54 movs r1, 0 | r1 = 0;
0x00005b56 ldr.w lr, [r7, 8] |
0x00005b5a ubfx r4, sb, 4, 4 | r4 = (sb >> 4) & ((1 << 4) - 1);
0x00005b5e ldr r3, [r7] | r3 = *(r7);
0x00005b60 ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x00005b62 strd r1, sl, [sp, 0x10] | __asm ("strd r1, sl, [sp, 0x10]");
0x00005b66 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00005b68 ldrb.w ip, [r5] | ip = *(r5);
0x00005b6c ldrb r5, [r5, 1] | r5 = *((r5 + 1));
0x00005b6e ldr.w r0, [r8] | r0 = *(r8);
0x00005b72 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x00005b74 strd lr, r4, [sp, 4] | __asm ("strd lr, r4, [sp, 4]");
0x00005b78 add.w r5, r5, ip, lsl 8 | r5 += (ip << 8);
0x00005b7c str r6, [sp] | *(sp) = r6;
0x00005b7e str r5, [sp, 0xc] | var_ch_4 = r5;
0x00005b80 bl 0x9fe8 | fcn_00009fe8 (r0, r1, r2, r3, r4, r5, r6);
0x00005b84 str r0, [sp, 0x20] | var_20h = r0;
0x00005b86 b 0x5af6 | goto label_0;
| label_7:
0x00005b88 add r4, sp, 0x18 | r4 += var_18h;
0x00005b8a add.w r8, r8, 4 | r8 += 4;
0x00005b8c lsrs r4, r0, 0x20 | r4 = r0 >> 0x20;
0x00005b8e mov r0, r4 | r0 = r4;
0x00005b90 bl 0x38d8 | fcn_000038d8 (r0);
0x00005b94 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00005b96 ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x00005b9a adds r3, 0x16 | r3 += 0x16;
0x00005b9c stm.w r8, {r0, r1} | *(r8) = r0;
| *((r8 + 4)) = r1;
| if (r3 == 0x16) {
0x00005ba0 beq 0x5b0e | goto label_1;
| }
0x00005ba2 b 0x5b3c | goto label_2;
| label_5:
0x00005ba4 mov.w r3, -1 | r3 = -1;
0x00005ba8 str r3, [sp, 0x20] | var_20h = r3;
0x00005baa b 0x5b0e | goto label_1;
| label_4:
0x00005bac movs r5, 0 | r5 = 0;
0x00005bae b 0x5ac0 | goto label_3;
| label_8:
0x00005bb0 blx 0x348c | fprintf_chk ()
0x00005bb4 str r2, [sp, 0x28] | var_28h_2 = r2;
0x00005bb6 movs r2, r0 | r2 = r0;
0x00005bb8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00005bba movs r0, r0 |
0x00005bbc lsrs r4, r5 | r4 >>= r5;
0x00005bbe movs r1, r0 | r1 = r0;
0x00005bc0 subs r7, 0xe6 | r7 -= 0xe6;
0x00005bc2 movs r1, r0 | r1 = r0;
0x00005bc4 eors r0, r5 | r0 ^= r5;
0x00005bc6 movs r1, r0 | r1 = r0;
0x00005bc8 str r1, [sp, 0x1a8] | *(arg_1a8h) = r1;
0x00005bca movs r2, r0 | r2 = r0;
0x00005bcc subs r7, 0x74 | r7 -= 0x74;
0x00005bce movs r1, r0 | r1 = r0;
0x00005bd0 ldr r3, [pc, 0x98] |
0x00005bd2 movs r2, 3 | r2 = 3;
0x00005bd4 push.w {r4, r5, r6, r7, r8, lr} |
0x00005bd8 mov r4, r1 | r4 = r1;
0x00005bda ldr r1, [pc, 0x94] |
0x00005bdc mov r7, r0 | r7 = r0;
0x00005bde add r3, pc | r3 = 0xb84e;
0x00005be0 sub sp, 0x10 |
0x00005be2 add.w r0, r3, 0x7c | r0 = r3 + 0x7c;
0x00005be6 ldr r3, [pc, 0x8c] | r3 = *(0x5c76);
0x00005be8 add r1, pc | r1 = 0xb85e;
0x00005bea mov.w r5, -1 | r5 = -1;
0x00005bee movs r6, 4 | r6 = 4;
0x00005bf0 add.w r8, sp, 7 | r8 += var_7h;
0x00005bf4 ldr r3, [r1, r3] |
0x00005bf6 movw r1, 0x14d | r1 = 0x14d;
0x00005bfa ldr r3, [r3] | r3 = *(0xb85e);
0x00005bfc str r3, [sp, 0xc] | var_ch_2 = r3;
0x00005bfe mov.w r3, 0 | r3 = 0;
0x00005c02 str r5, [sp, 8] | var_8h_2 = r5;
0x00005c04 movs r5, 1 | r5 = 1;
0x00005c06 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00005c0a movs r3, 0 | r3 = 0;
0x00005c0c str r3, [r4] | *(r4) = r3;
| do {
0x00005c0e mov r1, r8 | r1 = r8;
0x00005c10 mov r0, r7 | r0 = r7;
0x00005c12 bl 0xf058 | fcn_0000f058 (r0, r1);
0x00005c16 str r0, [sp, 8] | var_8h_2 = r0;
| if (r0 != 0) {
0x00005c18 cbnz r0, 0x5c3a | goto label_9;
| }
0x00005c1a ldr r3, [r4] | r3 = *(r4);
0x00005c1c ldrb.w r2, [sp, 7] | r2 = var_7h;
0x00005c20 and r0, r2, 0x7f | r0 = r2 & 0x7f;
0x00005c24 mla r3, r5, r0, r3 | __asm ("mla r3, r5, r0, r3");
0x00005c28 lsls r5, r5, 7 | r5 <<= 7;
0x00005c2a str r3, [r4] | *(r4) = r3;
0x00005c2c lsls r3, r2, 0x18 | r3 = r2 << 0x18;
| if (r3 >= r2) {
0x00005c2e bpl 0x5c3a | goto label_9;
| }
0x00005c30 subs r6, 1 | r6--;
0x00005c32 bne 0x5c0e |
| } while (r6 != 1);
0x00005c34 mov.w r3, -1 | r3 = -1;
0x00005c38 str r3, [sp, 8] | var_8h_2 = r3;
| label_9:
0x00005c3a ldr r0, [pc, 0x3c] |
0x00005c3c movs r3, 3 | r3 = 3;
0x00005c3e add r2, sp, 8 | r2 += var_8h_2;
0x00005c40 movw r1, 0x15d | r1 = 0x15d;
0x00005c44 add r0, pc | r0 = 0xb8c2;
0x00005c46 adds r0, 0x7c | r0 += 0x7c;
0x00005c48 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005c4c ldr r2, [pc, 0x2c] |
0x00005c4e ldr r3, [pc, 0x24] | r3 = *(0x5c76);
0x00005c50 ldr r0, [sp, 8] | r0 = var_8h_2;
0x00005c52 add r2, pc | r2 = 0xb8d2;
0x00005c54 ldr r3, [r2, r3] | r3 = *(0xb8d2);
0x00005c56 ldr r2, [r3] | r2 = *(0xb8d2);
0x00005c58 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00005c5a eors r2, r3 | r2 ^= r3;
0x00005c5c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00005c60 bne 0x5c68 |
0x00005c62 add sp, 0x10 |
0x00005c64 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00005c68 blx 0x348c | fprintf_chk ()
0x00005c6c subs r7, 0xa2 | r7 -= 0xa2;
0x00005c6e movs r1, r0 | r1 = r0;
0x00005c70 str r0, [sp, 0x2a0] | *(arg_2a0h) = r0;
0x00005c72 movs r2, r0 | r2 = r0;
0x00005c74 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00005c76 movs r0, r0 |
0x00005c78 subs r7, 0x3c | r7 -= 0x3c;
0x00005c7a movs r1, r0 | r1 = r0;
0x00005c7c str r0, [sp, 0xf8] | *(arg_f8h) = r0;
0x00005c7e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x5c80 */
| #include <stdint.h>
|
; (fcn) fcn.00005c80 () | void fcn_00005c80 (int16_t arg_198h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch_3;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h_2;
| int16_t var_28h_3;
| int16_t var_2ch_2;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_28h_2;
| int16_t var_b8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00005c80 push {r2, r3, r5, r6, r8, sb, fp, lr} |
0x00005c84 ldr r7, [pc, 0x3c0] | r7 = *(0x6048);
0x00005c86 mov r6, r1 | r6 = r1;
0x00005c88 ldr r1, [pc, 0x1ac] |
0x00005c8a mov r7, r0 | r7 = r0;
0x00005c8c add r3, pc | r3 += pc;
0x00005c8e sub sp, 0x3c |
0x00005c90 add.w r0, r3, 0x90 | r0 = r3 + 0x90;
0x00005c94 ldr r3, [pc, 0x1a4] | r3 = *(0x5e3c);
0x00005c96 add r1, pc | r1 = 0xbad2;
0x00005c98 ldr.w sb, [pc, 0x1a4] | sb = *(0x00005e40);
0x00005c9c mov r4, r2 | r4 = r2;
0x00005c9e movs r5, 0 | r5 = 0;
0x00005ca0 ldr r3, [r1, r3] |
0x00005ca2 movs r2, 3 | r2 = 3;
0x00005ca4 mov.w sl, -1 | sl = -1;
0x00005ca8 movs r1, 0x70 | r1 = 0x70;
0x00005caa add sb, pc | sb += pc;
0x00005cac ldr r3, [r3] | r3 = *(0xbad2);
0x00005cae str r3, [sp, 0x34] | var_34h = r3;
0x00005cb0 mov.w r3, 0 | r3 = 0;
0x00005cb4 str r5, [sp, 0x28] | var_28h_3 = r5;
0x00005cb6 str r5, [sp, 0x30] | var_30h = r5;
0x00005cb8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00005cbc str.w sl, [r4] | __asm ("str.w sl, [r4]");
0x00005cc0 bl 0xf150 | fcn_0000f150 ();
0x00005cc4 add.w r1, sb, 4 | r1 = sb + 4;
0x00005cc8 mov r8, r0 | r8 = r0;
0x00005cca mov r0, r6 | r0 = r6;
0x00005ccc bl 0xf058 | r0 = fcn_0000f058 (r0, r1);
0x00005cd0 mov r3, r0 | r3 = r0;
0x00005cd2 str r0, [r4] | *(r4) = r0;
0x00005cd4 cmp r0, 0 |
| if (r0 == 0) {
0x00005cd6 bne 0x5d70 |
0x00005cd8 add.w fp, sp, 0x2c |
0x00005cdc mov r0, r6 | r0 = r6;
0x00005cde mov r1, fp | r1 = fp;
0x00005ce0 bl 0x5bd0 | r0 = void (*0x5bd0)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
0x00005ce4 mov r3, r0 | r3 = r0;
0x00005ce6 str r0, [r4] | *(r4) = r0;
0x00005ce8 cmp r0, 0 |
| if (r0 != 0) {
0x00005cea bne 0x5d70 | goto label_0;
| }
0x00005cec add r2, sp, 0x30 | r2 += var_30h;
0x00005cee str r0, [sp, 0x1c] | var_1ch = r0;
0x00005cf0 ldr r1, [sp, 0x2c] | r1 = var_2ch_2;
0x00005cf2 mov r0, r6 | r0 = r6;
0x00005cf4 bl 0xf180 | r0 = fcn_0000f180 (r0, r1, r2);
0x00005cf8 mov r2, r0 | r2 = r0;
0x00005cfa str r0, [sp, 0x28] | var_28h_3 = r0;
0x00005cfc ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
0x00005cfe ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00005d00 subs r5, r0, 0 | r5 = r0 - 0;
0x00005d02 it ne |
| if (r5 == r0) {
0x00005d04 movne r5, 1 | r5 = 1;
| }
0x00005d06 cmp r2, 0 |
0x00005d08 it ne |
| if (r2 == 0) {
0x00005d0a movne r5, 0 | r5 = 0;
| }
0x00005d0c cmp r5, 0 |
| if (r5 != 0) {
0x00005d0e bne.w 0x5e26 | goto label_3;
| }
0x00005d12 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00005d14 cmp r0, r3 |
0x00005d16 itt hi |
| if (r0 <= r3) {
0x00005d18 mvnhi r3, 0x15 | r3 = ~0x15;
| }
| if (r0 > r3) {
0x00005d1c str r3, [r4] | *(r4) = r3;
| }
| if (r0 > r3) {
0x00005d1e bhi 0x5da0 | goto label_4;
| }
0x00005d20 ldrb.w r1, [sb, 4] | r1 = *((sb + 4));
0x00005d24 lsrs r5, r1, 4 | r5 = r1 >> 4;
0x00005d26 str r5, [sp, 0x1c] | var_1ch = r5;
| if (r5 == r1) {
0x00005d28 beq 0x5da8 | goto label_5;
| }
0x00005d2a cmp r7, 4 |
0x00005d2c ite le |
| if (r7 > 4) {
0x00005d2e movle r3, 1 | r3 = 1;
| }
| if (r7 <= 4) {
0x00005d30 movgt r3, 0 | r3 = 0;
| }
0x00005d32 cmp r5, 0xd |
0x00005d34 it le |
| if (r5 > 0xd) {
0x00005d36 movle r3, 0 | r3 = 0;
| }
0x00005d38 cmp r3, 0 |
| if (r3 != 0) {
0x00005d3a bne 0x5da8 | goto label_5;
| }
0x00005d3c ldr r3, [pc, 0x104] |
0x00005d3e add r3, pc | r3 = 0xbb86;
0x00005d40 ldr.w r5, [r3, r5, lsl 2] | r5 = *(0xbb86);
| if (r5 == 0) {
0x00005d44 cbz r5, 0x5da8 | goto label_5;
| }
0x00005d46 mov r3, r0 | r3 = r0;
0x00005d48 mov r0, r7 | r0 = r7;
0x00005d4a blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t) (r0, r3);
0x00005d4c mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00005d4e cbz r0, 0x5dba | goto label_6;
| }
0x00005d50 ldrb.w r3, [sb, 4] | r3 = *((sb + 4));
0x00005d54 and r3, r3, 0xf6 | r3 &= 0xf6;
0x00005d58 cmp r3, 0x34 |
| if (r3 == 0x34) {
0x00005d5a beq 0x5dd0 | goto label_7;
| }
| label_1:
0x00005d5c add r7, sp, 0x20 | r7 += var_20h_2;
0x00005d5e adds r6, 0xc | r6 += 0xc;
0x00005d60 mov r0, r7 | r0 = r7;
0x00005d62 bl 0x38d8 | fcn_000038d8 (r0);
0x00005d66 ldr r3, [r4] | r3 = *(r4);
0x00005d68 ldm.w r7, {r0, r1} | r0 = *(r7);
| r1 = *((r7 + 4));
0x00005d6c stm.w r6, {r0, r1} | *(r6) = r0;
| *((r6 + 4)) = r1;
| }
| label_0:
0x00005d70 adds r3, 0x16 | r3 += 0x16;
0x00005d72 beq 0x5da0 |
| while (1) {
| label_2:
0x00005d74 ldr r0, [pc, 0xd0] |
0x00005d76 movs r3, 3 | r3 = 3;
0x00005d78 mov r2, r4 | r2 = r4;
0x00005d7a movs r1, 0xb0 | r1 = 0xb0;
0x00005d7c add r0, pc | r0 = 0xbbc8;
0x00005d7e adds r0, 0x90 | r0 += 0x90;
0x00005d80 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005d84 ldr r2, [pc, 0xc4] |
0x00005d86 ldr r3, [pc, 0xb4] | r3 = *(0x5e3e);
0x00005d88 add r2, pc | r2 = 0xbbd8;
0x00005d8a ldr r3, [r2, r3] | r3 = *(0xbbd8);
0x00005d8c ldr r2, [r3] | r2 = *(0xbbd8);
0x00005d8e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00005d90 eors r2, r3 | r2 ^= r3;
0x00005d92 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00005d96 bne 0x5e30 | goto label_8;
| }
0x00005d98 mov r0, r5 | r0 = r5;
0x00005d9a add sp, 0x3c |
0x00005d9c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00005da0 mov r0, r8 | r0 = r8;
0x00005da2 bl 0xf168 | fcn_0000f168 (r0);
0x00005da6 b 0x5d74 |
| }
| label_5:
0x00005da8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00005daa movs r2, 0 | r2 = 0;
0x00005dac movs r1, 2 | r1 = 2;
0x00005dae movs r0, 3 | r0 = 3;
0x00005db0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00005db4 movs r5, 0 | r5 = 0;
0x00005db6 ldr r3, [r4] | r3 = *(r4);
0x00005db8 b 0x5d70 | goto label_0;
| label_6:
0x00005dba ldr r2, [pc, 0x94] |
0x00005dbc mov r1, sl | r1 = sl;
0x00005dbe ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00005dc0 movs r0, 5 | r0 = 5;
0x00005dc2 str.w sl, [r4] | __asm ("str.w sl, [r4]");
0x00005dc6 add r2, pc | r2 = 0xbc1c;
0x00005dc8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00005dcc ldr r3, [r4] | r3 = *(r4);
0x00005dce b 0x5d70 | goto label_0;
| label_7:
0x00005dd0 ldr r0, [pc, 0x80] |
0x00005dd2 movs r2, 0xa | r2 = 0xa;
0x00005dd4 movs r1, 0x9a | r1 = 0x9a;
0x00005dd6 add r0, pc | r0 = 0xbc2e;
0x00005dd8 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00005ddc mov sb, r0 | sb = r0;
| if (r0 != 0) {
0x00005dde cbz r0, 0x5e28 |
0x00005de0 ldr.w sl, [pc, 0x74] | sl = *(0x00005e58);
0x00005de4 add sl, pc | sl += pc;
0x00005de6 ldrb.w r3, [sl, 4] | r3 = *((sl + 4));
0x00005dea strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x00005dee ldr r1, [sp, 0x2c] | r1 = var_2ch_2;
0x00005df0 bl 0x5790 | fcn_00005790 (r0, r1, r2, r3);
0x00005df4 str r7, [sp, 0x14] | var_14h = r7;
0x00005df6 movs r3, 1 | r3 = 1;
0x00005df8 ldrb.w r1, [sl, 4] | r1 = *((sl + 4));
0x00005dfa asrs r4, r0, 0x20 | r4 = r0 >> 0x20;
0x00005dfc adds r2, r0, 1 | r2 = r0 + 1;
0x00005dfe str r3, [sp, 0x10] | var_10h = r3;
0x00005e00 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00005e02 lsrs r1, r1, 4 | r1 >>= 4;
0x00005e04 str r0, [sp, 0xc] | var_ch_3 = r0;
0x00005e06 strd fp, r1, [sp, 4] | __asm ("strd fp, r1, [sp, 4]");
0x00005e0a add r1, sp, 0x28 | r1 += var_28h_3;
0x00005e0c str r1, [sp] | *(sp) = r1;
0x00005e0e mov r1, sb | r1 = sb;
0x00005e10 ldr r0, [r6] | r0 = *(r6);
0x00005e12 bl 0x9fe8 | fcn_00009fe8 (r0, r1, r2, r3, r4, r5, r6);
0x00005e16 str r0, [r4] | *(r4) = r0;
0x00005e18 mov r2, sb | r2 = sb;
0x00005e1a ldr r0, [pc, 0x40] |
0x00005e1c movs r1, 0xa5 | r1 = 0xa5;
0x00005e1e add r0, pc | r0 = 0xbc80;
0x00005e20 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00005e24 b 0x5d5c | goto label_1;
| label_3:
0x00005e26 mov r5, r3 | r5 = r3;
| }
0x00005e28 mov.w r3, -1 | r3 = -1;
0x00005e2c str r3, [r4] | *(r4) = r3;
0x00005e2e b 0x5d74 | goto label_2;
| label_8:
0x00005e30 blx 0x348c | fprintf_chk ()
0x00005e34 subs r6, 0xf4 | r6 -= 0xf4;
0x00005e36 movs r1, r0 | r1 = r0;
0x00005e38 ldrh r2, [r7, 0x3e] | r2 = *((r7 + 0x3e));
0x00005e3a movs r2, r0 | r2 = r0;
0x00005e3c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00005e3e movs r0, r0 |
0x00005e40 str r5, [sp, 0x198] | *(arg_198h) = r5;
0x00005e42 movs r2, r0 | r2 = r0;
0x00005e44 str r3, [sp, 0xb8] | var_b8h = r3;
0x00005e46 movs r2, r0 | r2 = r0;
0x00005e48 subs r6, 4 | r6 -= 4;
0x00005e4a movs r1, r0 | r1 = r0;
0x00005e4c ldrh r0, [r1, 0x38] | r0 = *((r1 + 0x38));
0x00005e4e movs r2, r0 | r2 = r0;
0x00005e50 subs r5, 0x36 | r5 -= 0x36;
0x00005e52 movs r1, r0 | r1 = r0;
0x00005e54 subs r4, 0xe2 | r4 -= 0xe2;
0x00005e56 movs r1, r0 | r1 = r0;
0x00005e58 str r4, [sp, 0xb0] | var_28h_2 = r4;
0x00005e5a movs r2, r0 | r2 = r0;
0x00005e5c subs r4, 0x9a | r4 -= 0x9a;
0x00005e5e movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x5f74 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00005f74 () | void fcn_00005f74 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00005f74 push {r0, r2, r3, r6, r8, sb, fp, lr} |
0x00005f78 mvns r0, r6 | r0 = ~r6;
0x00005f7a mov r5, r2 | r5 = r2;
0x00005f7c ldr r2, [pc, 0x130] |
0x00005f7e mov r4, r0 | r4 = r0;
0x00005f80 add r3, pc | r3 += pc;
0x00005f82 sub sp, 0x1c |
0x00005f84 add.w r0, r3, 0xa4 | r0 = r3 + 0xa4;
0x00005f88 ldr r3, [pc, 0x128] | r3 = *(0x60b4);
0x00005f8a add r2, pc | r2 = 0xc03e;
0x00005f8c movs r6, 0 | r6 = 0;
0x00005f8e mov r7, r1 | r7 = r1;
0x00005f90 movw r1, 0x201 | r1 = 0x201;
0x00005f92 movs r1, 1 | r1 = 1;
0x00005f94 ldr r3, [r2, r3] |
0x00005f96 movs r2, 3 | r2 = 3;
0x00005f98 mov r8, r6 | r8 = r6;
0x00005f9a ldr r3, [r3] | r3 = *(0xc03e);
0x00005f9c str r3, [sp, 0x14] | var_14h = r3;
0x00005f9e mov.w r3, 0 | r3 = 0;
0x00005fa2 str r6, [sp, 0xc] | var_ch = r6;
0x00005fa4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00005fa8 ldr.w r2, [r4, 0x9c] | r2 = *((r4 + 0x9c));
0x00005fac mvn r3, 0x1f | r3 = ~0x1f;
0x00005fb0 bfi r8, r3, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r3 & value_0;
| value_0 = ~value_0;
| r8 &= value_0;
| r8 |= value_1;
0x00005fb4 cmp r2, 4 |
| if (r2 > 4) {
0x00005fb6 ble 0x5fbe |
0x00005fb8 orrs.w r3, r5, r7 | r3 = r5 | r7;
| if (r3 != r5) {
0x00005fbc bne 0x6012 | goto label_2;
| }
| }
0x00005fbe movs r3, 0 | r3 = 0;
0x00005fc0 mov r1, r8 | r1 = r8;
0x00005fc2 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x00005fc6 add.w r0, r4, 0x1c | r0 = r4 + 0x1c;
0x00005fca mov r2, r3 | r2 = r3;
0x00005fcc bl 0x583c | fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x00005fd0 str r0, [sp, 0xc] | var_ch = r0;
| do {
| label_0:
0x00005fd2 ldr r5, [r4] | r5 = *(r4);
0x00005fd4 movs r2, 0 | r2 = 0;
0x00005fd6 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00005fd8 movs r1, 0x1c | r1 = 0x1c;
0x00005fda strd r5, r0, [sp] | __asm ("strd r5, r0, [sp]");
0x00005fde movs r0, 4 | r0 = 4;
0x00005fe0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00005fe4 ldr r0, [pc, 0xd0] |
0x00005fe6 movs r3, 3 | r3 = 3;
0x00005fe8 add r2, sp, 0xc | r2 += var_ch;
0x00005fea mov.w r1, 0x21c | r1 = 0x21c;
0x00005fee add r0, pc | r0 = 0xc0aa;
0x00005ff0 adds r0, 0xa4 | r0 += 0xa4;
0x00005ff2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00005ff6 ldr r2, [pc, 0xc4] |
0x00005ff8 ldr r3, [pc, 0xb8] | r3 = *(0x60b4);
0x00005ffa ldr r0, [sp, 0xc] | r0 = var_ch;
0x00005ffc add r2, pc | r2 = 0xc0be;
0x00005ffe ldr r3, [r2, r3] | r3 = *(0xc0be);
0x00006000 ldr r2, [r3] | r2 = *(0xc0be);
0x00006002 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00006004 eors r2, r3 | r2 ^= r3;
0x00006006 mov.w r0, 1 | r0 = 1;
0x0000600a movs r0, r0 |
0x0000600c add sp, 0x1c |
0x0000600e pop.w {r4, r5, r6, r7, r8, sb, pc} |
| if (r5 == 0) {
| label_2:
0x00006012 cbz r5, 0x6078 | goto label_3;
| }
0x00006014 mov r0, r5 | r0 = r5;
0x00006016 bl 0xda6c | r0 = fcn_0000da6c (r0);
0x0000601a add.w sb, r0, 1 | sb = r0 + 1;
0x0000601e ldr r0, [pc, 0xa0] |
0x00006020 mov r2, sb | r2 = sb;
0x00006022 movw r1, 0x20b | r1 = 0x20b;
0x00006026 str r6, [sp, 0x10] | var_10h = r6;
0x00006028 add r0, pc | r0 = 0xc0ee;
0x0000602a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000602e mov r6, r0 | r6 = r0;
0x00006030 cmp r0, 0 |
| if (r0 == 0) {
0x00006032 beq 0x609c | goto label_4;
| }
0x00006034 str r0, [sp, 0x10] | var_10h = r0;
0x00006036 mov r1, r5 | r1 = r5;
0x00006038 strb r7, [r0] | *(r0) = r7;
0x0000603a add r0, sp, 0x10 | r0 += var_10h;
0x0000603c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000603e adds r3, 1 | r3++;
0x00006040 str r3, [sp, 0x10] | var_10h = r3;
0x00006042 bl 0xdc44 | fcn_0000dc44 (r0, r1);
| label_1:
0x00006046 ldr.w r2, [r4, 0x9c] | r2 = *((r4 + 0x9c));
0x0000604a mov r3, sb | r3 = sb;
0x0000604c mov r1, r8 | r1 = r8;
0x0000604e add.w r0, r4, 0x1c | r0 = r4 + 0x1c;
0x00006052 str r2, [sp, 4] | var_4h = r2;
0x00006054 movs r2, 1 | r2 = 1;
0x00006056 str r2, [sp] | *(sp) = r2;
0x00006058 mov r2, r6 | r2 = r6;
0x0000605a bl 0x583c | r0 = fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x0000605e cmn.w r0, 0x16 |
0x00006062 str r0, [sp, 0xc] | var_ch = r0;
0x00006064 beq 0x5fd2 |
| } while (r0 == 0x16);
0x00006066 ldr r0, [pc, 0x5c] |
0x00006068 mov r2, r6 | r2 = r6;
0x0000606a movw r1, 0x216 | r1 = 0x216;
0x0000606e add r0, pc | r0 = 0xc138;
0x00006070 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00006074 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00006076 b 0x5fd2 | goto label_0;
| label_3:
0x00006078 ldr r0, [pc, 0x4c] |
0x0000607a movs r2, 1 | r2 = 1;
0x0000607c movw r1, 0x20b | r1 = 0x20b;
0x00006080 str r5, [sp, 0x10] | var_10h = r5;
0x00006082 add r0, pc | r0 = 0xc14e;
0x00006084 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00006088 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x0000608a cbz r0, 0x609c |
0x0000608c str r6, [sp, 0x10] | var_10h = r6;
0x0000608e mov.w sb, 1 | sb = 1;
0x00006092 strb r7, [r6] | *(r6) = r7;
0x00006094 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00006096 add r3, sb | r3 += sb;
0x00006098 str r3, [sp, 0x10] | var_10h = r3;
0x0000609a b 0x6046 | goto label_1;
| }
| label_4:
0x0000609c mov.w r3, -1 | r3 = -1;
0x000060a0 mov r0, r3 | r0 = r3;
0x000060a2 str r3, [sp, 0xc] | var_ch = r3;
0x000060a4 b 0x5fd2 | goto label_0;
0x000060a6 blx 0x348c | fprintf_chk ()
0x000060aa nop |
0x000060ac subs r4, 0 |
0x000060ae movs r1, r0 | r1 = r0;
0x000060b0 ldrh r6, [r0, 0x28] | r6 = *((r0 + 0x28));
0x000060b2 movs r2, r0 | r2 = r0;
0x000060b4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000060b6 movs r0, r0 |
0x000060b8 subs r3, 0x92 | r3 -= 0x92;
0x000060ba movs r1, r0 | r1 = r0;
0x000060bc ldrh r4, [r2, 0x24] | r4 = *((r2 + 0x24));
0x000060be movs r2, r0 | r2 = r0;
0x000060c0 subs r2, 0x90 | r2 -= 0x90;
0x000060c2 movs r1, r0 | r1 = r0;
0x000060c4 subs r2, 0x4a | r2 -= 0x4a;
0x000060c6 movs r1, r0 | r1 = r0;
0x000060c8 subs r2, 0x36 | r2 -= 0x36;
0x000060ca movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x6190 */
| #include <stdint.h>
|
; (fcn) fcn.00006190 () | void fcn_00006190 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00006190 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x00006194 mov r5, r2 | r5 = r2;
0x00006196 ldr r2, [pc, 0x80] |
0x00006198 mov r7, r3 | r7 = r3;
0x0000619a sub sp, 0x1c |
0x0000619c mov r6, r1 | r6 = r1;
0x0000619e ldr r3, [pc, 0x7c] | r3 = *(0x621e);
0x000061a0 mov.w r8, 0 | r8 = 0;
0x000061a4 ldr r4, [pc, 0x78] |
0x000061a6 add r2, pc | r2 = 0xc3c4;
0x000061a8 mov sb, r0 | sb = r0;
0x000061aa mov.w r1, 0x2a8 | r1 = 0x2a8;
0x000061ae ldr r3, [r2, r3] |
0x000061b0 movs r2, 3 | r2 = 3;
0x000061b2 add r4, pc | r4 = 0xc3d6;
0x000061b4 adds r4, 0xec | r4 += 0xec;
0x000061b6 mov r0, r4 | r0 = r4;
0x000061b8 ldr r3, [r3] | r3 = *(0xc3c4);
0x000061ba str r3, [sp, 0x14] | var_14h = r3;
0x000061bc mov.w r3, 0 | r3 = 0;
0x000061c0 str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h]");
0x000061c4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000061c8 mov r3, r8 | r3 = r8;
0x000061ca mov r2, r6 | r2 = r6;
0x000061cc movs r1, 4 | r1 = 4;
0x000061ce mov r0, sb | r0 = sb;
0x000061d0 str r5, [sp] | *(sp) = r5;
0x000061d2 bl 0x5974 | fcn_00005974 (r0, r1, r2, r3, r4, r5);
0x000061d6 mov r2, r8 | r2 = r8;
0x000061d8 movs r1, 0xc | r1 = 0xc;
0x000061da str r6, [sp, 4] | var_4h = r6;
0x000061dc str r0, [sp, 0x10] | var_10h = r0;
0x000061de ldr r3, [r5] | r3 = *(r5);
0x000061e0 str r0, [sp, 8] | var_8h = r0;
0x000061e2 movs r0, 4 | r0 = 4;
0x000061e4 str r7, [sp] | *(sp) = r7;
0x000061e6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000061ea movs r3, 3 | r3 = 3;
0x000061ec add r2, sp, 0x10 | r2 += var_10h;
0x000061ee mov r0, r4 | r0 = r4;
0x000061f0 movw r1, 0x2ab | r1 = 0x2ab;
0x000061f4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000061f6 ldc2l p10, c4, [lr], 0x28 | __asm ("ldc2l p10, c4, [lr], 0x28");
0x000061fa ldr r3, [pc, 0x20] | r3 = *(0x621e);
0x000061fc ldr r0, [sp, 0x10] | r0 = var_10h;
0x000061fe add r2, pc | r2 += pc;
0x00006200 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00006202 ldr r2, [r3] | r2 = *(0x621e);
0x00006204 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00006206 eors r2, r3 | r2 ^= r3;
0x00006208 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000620c bne 0x6214 |
0x0000620e add sp, 0x1c |
0x00006210 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x00006214 blx 0x348c | fprintf_chk ()
0x00006218 ldrh r2, [r5, 0x16] | r2 = *((r5 + 0x16));
0x0000621a movs r2, r0 | r2 = r0;
0x0000621c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000621e movs r0, r0 |
0x00006220 subs r1, 0xce | r1 -= 0xce;
0x00006222 movs r1, r0 | r1 = r0;
0x00006224 ldrh r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00006226 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x62ec */
| #include <stdint.h>
|
; (fcn) fcn.000062ec () | void fcn_000062ec (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_20h;
| int16_t var_6ch;
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000062ec mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x000062f0 mov r5, r2 | r5 = r2;
0x000062f2 ldr r2, [pc, 0x84] |
0x000062f4 mov r7, r3 | r7 = r3;
0x000062f6 sub sp, 0x1c |
0x000062f8 mov r6, r1 | r6 = r1;
0x000062fa ldr r3, [pc, 0x80] | r3 = *(0x637e);
0x000062fc mov.w r8, 0 | r8 = 0;
0x00006300 ldr r4, [pc, 0x7c] |
0x00006302 add r2, pc | r2 = 0xc680;
0x00006304 mov sb, r0 | sb = r0;
0x00006306 movw r1, 0x2de | r1 = 0x2de;
0x0000630a ldr r3, [r2, r3] |
0x0000630c movs r2, 3 | r2 = 3;
0x0000630e add r4, pc |
0x00006310 add.w r4, r4, 0x134 | r4 = 0xc7c6;
0x00006314 mov r0, r4 | r0 = r4;
0x00006316 ldr r3, [r3] | r3 = *(0xc680);
0x00006318 str r3, [sp, 0x14] | var_14h = r3;
0x0000631a mov.w r3, 0 | r3 = 0;
0x0000631e str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h]");
0x00006322 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006326 mov r3, r8 | r3 = r8;
0x00006328 mov r2, r6 | r2 = r6;
0x0000632a movs r1, 5 | r1 = 5;
0x0000632c mov r0, sb | r0 = sb;
0x0000632e str r5, [sp] | *(sp) = r5;
0x00006330 bl 0x5974 | fcn_00005974 (r0, r1, r2, r3, r4, r5);
0x00006334 mov r2, r8 | r2 = r8;
0x00006336 movs r1, 0xd | r1 = 0xd;
0x00006338 str r6, [sp, 4] | var_4h = r6;
0x0000633a str r0, [sp, 0x10] | var_10h = r0;
0x0000633c ldr r3, [r5] | r3 = *(r5);
0x0000633e str r0, [sp, 8] | var_8h = r0;
0x00006340 movs r0, 4 | r0 = 4;
0x00006342 str r7, [sp] | *(sp) = r7;
0x00006344 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00006348 movs r3, 3 | r3 = 3;
0x0000634a add r2, sp, 0x10 | r2 += var_10h;
0x0000634c mov r0, r4 | r0 = r4;
0x0000634e movw r1, 0x2e1 | r1 = 0x2e1;
0x00006352 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006356 ldr r2, [pc, 0x2c] |
0x00006358 ldr r3, [pc, 0x20] | r3 = *(0x637c);
0x0000635a ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000635c add r2, pc | r2 = 0xc6e6;
0x0000635e ldr r3, [r2, r3] | r3 = *(0xc6e6);
0x00006360 ldr r2, [r3] | r2 = *(0xc6e6);
0x00006362 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00006364 eors r2, r3 | r2 ^= r3;
0x00006366 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000636a bne 0x6372 |
0x0000636c add sp, 0x1c |
0x0000636e pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x00006370 strh r0, [r6, 0x1e] | *((r6 + 0x1e)) = r0;
| }
0x00006372 blx 0x348c | fprintf_chk ()
0x00006376 nop |
0x00006378 ldrh r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x0000637a movs r2, r0 | r2 = r0;
0x0000637c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000637e movs r0, r0 |
0x00006380 subs r0, 0x72 | r0 -= 0x72;
0x00006382 movs r1, r0 | r1 = r0;
0x00006384 ldrh r4, [r6, 8] | r4 = *((r6 + 8));
0x00006386 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x6388 */
| #include <stdint.h>
|
; (fcn) fcn.00006388 () | void fcn_00006388 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00006388 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x0000638c mov sl, r2 | sl = r2;
0x0000638e ldr r2, [pc, 0x88] |
0x00006390 mov r5, r3 | r5 = r3;
0x00006392 sub sp, 0x18 |
0x00006394 mov r6, r1 | r6 = r1;
0x00006396 ldr r3, [pc, 0x84] | r3 = *(0x641e);
0x00006398 mov r7, r0 | r7 = r0;
0x0000639a ldr r4, [pc, 0x84] |
0x0000639c add r2, pc | r2 = 0xc7ba;
0x0000639e ldr.w sb, [sp, 0x38] | sb = var_0h;
0x000063a2 mov.w r8, 0 | r8 = 0;
0x000063a6 ldr r3, [r2, r3] |
0x000063a8 movw r1, 0x2f3 | r1 = 0x2f3;
0x000063ac add r4, pc |
0x000063ae movs r2, 3 | r2 = 3;
0x000063b0 add.w r4, r4, 0x14c | r4 = 0xc91e;
0x000063b4 mov r0, r4 | r0 = r4;
0x000063b6 ldr r3, [r3] | r3 = *(0xc7ba);
0x000063b8 str r3, [sp, 0x14] | var_14h_2 = r3;
0x000063ba mov.w r3, 0 | r3 = 0;
0x000063be str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h_2]");
0x000063c2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000063c6 mov r3, sl | r3 = sl;
0x000063c8 mov r2, r6 | r2 = r6;
0x000063ca movs r1, 6 | r1 = 6;
0x000063cc mov r0, r7 | r0 = r7;
0x000063ce str r5, [sp] | *(sp) = r5;
0x000063d0 bl 0x5974 | fcn_00005974 (r0, r1, r2, r3, r4, r5);
0x000063d4 mov r2, r8 | r2 = r8;
0x000063d6 movs r1, 0x10 | r1 = 0x10;
0x000063d8 str r6, [sp, 4] | var_4h_2 = r6;
0x000063da str r0, [sp, 0x10] | var_10h_2 = r0;
0x000063dc ldr r3, [r5] | r3 = *(r5);
0x000063de str r0, [sp, 8] | var_8h_2 = r0;
0x000063e0 movs r0, 4 | r0 = 4;
0x000063e2 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000063e6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000063ea movs r3, 3 | r3 = 3;
0x000063ec add r2, sp, 0x10 | r2 += var_10h_2;
0x000063ee mov r0, r4 | r0 = r4;
0x000063f0 movw r1, 0x2f6 | r1 = 0x2f6;
0x000063f4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000063f8 ldr r2, [pc, 0x28] |
0x000063fa ldr r3, [pc, 0x20] | r3 = *(0x641e);
0x000063fc ldr r0, [sp, 0x10] | r0 = var_10h_2;
0x000063fe add r2, pc | r2 = 0xc826;
0x00006400 ldr r3, [r2, r3] | r3 = *(0xc826);
0x00006402 ldr r2, [r3] | r2 = *(0xc826);
0x00006404 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x00006406 eors r2, r3 | r2 ^= r3;
0x00006408 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000640c bne 0x6414 |
0x0000640e add sp, 0x18 |
0x00006410 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
0x00006414 blx 0x348c | fprintf_chk ()
0x00006418 ldrh r4, [r6, 6] | r4 = *((r6 + 6));
0x0000641a movs r2, r0 | r2 = r0;
0x0000641c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000641e movs r0, r0 |
0x00006420 adds r7, 0xd4 | r7 += 0xd4;
0x00006422 movs r1, r0 | r1 = r0;
0x00006424 ldrh r2, [r2, 4] | r2 = *((r2 + 4));
0x00006426 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x6428 */
| #include <stdint.h>
|
; (fcn) fcn.00006428 () | void fcn_00006428 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_8h_3;
| int16_t var_10h_3;
| int16_t var_14h_3;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00006428 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x0000642c mov r5, r2 | r5 = r2;
0x0000642e ldr r2, [pc, 0x84] |
0x00006430 mov r7, r3 | r7 = r3;
0x00006432 sub sp, 0x1c |
0x00006434 mov r6, r1 | r6 = r1;
0x00006436 ldr r3, [pc, 0x80] | r3 = *(0x64ba);
0x00006438 mov.w r8, 0 | r8 = 0;
0x0000643c ldr r4, [pc, 0x7c] |
0x0000643e add r2, pc | r2 = 0xc8f8;
0x00006440 mov sb, r0 | sb = r0;
0x00006442 movw r1, 0x307 | r1 = 0x307;
0x00006446 ldr r3, [r2, r3] |
0x00006448 movs r2, 3 | r2 = 3;
0x0000644a add r4, pc |
0x0000644c add.w r4, r4, 0x164 | r4 = 0xca6e;
0x00006450 mov r0, r4 | r0 = r4;
0x00006452 ldr r3, [r3] | r3 = *(0xc8f8);
0x00006454 str r3, [sp, 0x14] | var_14h_3 = r3;
0x00006456 mov.w r3, 0 | r3 = 0;
0x0000645a str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h_3]");
0x0000645e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006462 mov r3, r8 | r3 = r8;
0x00006464 mov r2, r6 | r2 = r6;
0x00006466 movs r1, 7 | r1 = 7;
0x00006468 mov r0, sb | r0 = sb;
0x0000646a str r5, [sp] | *(sp) = r5;
0x0000646c bl 0x5974 | fcn_00005974 (r0, r1, r2, r3, r4, r5);
0x0000646e invalid |
0x00006472 movs r1, 0x12 | r1 = 0x12;
0x00006474 str r6, [sp, 4] | var_4h_3 = r6;
0x00006476 str r0, [sp, 0x10] | var_10h_3 = r0;
0x00006478 ldr r3, [r5] | r3 = *(r5);
0x0000647a str r0, [sp, 8] | var_8h_3 = r0;
0x0000647c movs r0, 4 | r0 = 4;
0x0000647e str r7, [sp] | *(sp) = r7;
0x00006480 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00006484 movs r3, 3 | r3 = 3;
0x00006486 add r2, sp, 0x10 | r2 += var_10h_3;
0x00006488 mov r0, r4 | r0 = r4;
0x0000648a movw r1, 0x30a | r1 = 0x30a;
0x0000648e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006492 ldr r2, [pc, 0x2c] |
0x00006494 ldr r3, [pc, 0x20] | r3 = *(0x64b8);
0x00006496 ldr r0, [sp, 0x10] | r0 = var_10h_3;
0x00006498 add r2, pc | r2 = 0xc95e;
0x0000649a ldr r3, [r2, r3] | r3 = *(0xc95e);
0x0000649c ldr r2, [r3] | r2 = *(0xc95e);
0x0000649e ldr r3, [sp, 0x14] | r3 = var_14h_3;
0x000064a0 eors r2, r3 | r2 ^= r3;
0x000064a2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000064a6 bne 0x64ae |
0x000064a8 add sp, 0x1c |
0x000064aa pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x000064ae blx 0x348c | fprintf_chk ()
0x000064b2 nop |
0x000064b4 ldrh r2, [r2, 2] | r2 = *((r2 + 2));
0x000064b6 movs r2, r0 | r2 = r0;
0x000064b8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000064ba movs r0, r0 |
0x000064bc adds r7, 0x36 | r7 += 0x36;
0x000064be movs r1, r0 | r1 = r0;
0x000064c0 strh r0, [r7, 0x3e] | *((r7 + 0x3e)) = r0;
0x000064c2 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x64c4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000064c4 () | void fcn_000064c4 (int16_t arg_98h, int16_t arg_9ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_10h;
| int32_t var_10h_2;
| int32_t var_18h;
| int32_t var_18h_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int32_t var_4ch;
| int32_t var_4ch_2;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000064c4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000064c8 mov r5, r2 | r5 = r2;
0x000064ca ldr r2, [pc, 0x278] |
0x000064cc mov r7, r3 | r7 = r3;
0x000064ce mov r4, r0 | r4 = r0;
0x000064d0 sub sp, 0x74 |
0x000064d2 ldr r3, [pc, 0x274] | r3 = *(0x674a);
0x000064d4 mov sl, r1 | sl = r1;
0x000064d6 add r2, pc | r2 = 0xcc20;
0x000064d8 ldr r0, [pc, 0x270] |
0x000064da movw r1, 0x359 | r1 = 0x359;
0x000064de ldr.w r8, [sp, 0x98] | r8 = *(arg_98h);
0x000064e2 ldr r3, [r2, r3] |
0x000064e4 movs r2, 3 | r2 = 3;
0x000064e6 add r0, pc |
0x000064e8 ldr.w sb, [sp, 0x9c] | sb = *(arg_9ch);
0x000064ec add.w r0, r0, 0x17c | r0 = 0xcdb2;
0x000064f0 ldr r3, [r3] | r3 = *(0xcc20);
0x000064f2 str r3, [sp, 0x6c] | var_6ch = r3;
0x000064f4 mov.w r3, 0 | r3 = 0;
0x000064f8 mov.w r3, -1 | r3 = -1;
0x000064fc str r3, [sp, 0x20] | var_20h = r3;
0x000064fe bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006502 ldr r0, [pc, 0x24c] |
0x00006504 movs r2, 2 | r2 = 2;
0x00006506 movw r1, 0x35a | r1 = 0x35a;
0x0000650a add r0, pc | r0 = 0xcc60;
0x0000650c bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00006510 cmp r0, 0 |
| if (r0 == 0) {
0x00006512 beq.w 0x6682 | goto label_3;
| }
0x00006514 strh r6, [r6, 4] | *((r6 + 4)) = r6;
0x00006516 and r1, r7, 1 | r1 = r7 & 1;
0x0000651a and r3, r5, 3 | r3 = r5 & 3;
0x0000651e orr r1, r1, 0x30 | r1 |= 0x30;
0x00006522 and sl, sl, 1 | sl &= 1;
0x00006526 orr.w r1, r1, r3, lsl 1 | r1 |= (r3 << 1);
0x0000652a cmp r5, 0 |
0x0000652c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0000652e mov r6, r0 | r6 = r0;
0x00006530 orr.w r1, r1, sl, lsl 3 | r1 |= (sl << 3);
0x00006534 mov.w sl, 0 | sl = 0;
0x00006538 bfi sl, r1, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| sl &= value_0;
| sl |= value_1;
| if (r5 <= 0) {
0x0000653c ble.w 0x66b2 | goto label_4;
| }
0x00006540 cmp r3, 4 |
0x00006542 mov.w fp, 2 |
0x00006546 bgt.w 0x66bc |
| while (1) {
0x0000654a ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000654c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000654e str r6, [sp, 0x28] | var_28h = r6;
0x00006550 str r3, [sp, 0x34] | var_34h = r3;
0x00006552 movs r3, 0 | r3 = 0;
0x00006554 str r3, [sp, 0x24] | var_24h = r3;
0x00006556 str r3, [sp, 0x30] | var_30h = r3;
0x00006558 movs r3, 2 | r3 = 2;
0x0000655a str r3, [sp, 0x38] | var_38h = r3;
0x0000655c str r0, [sp, 0x2c] | var_2ch = r0;
0x0000655e blx 0x3258 | unlink (r0);
0x00006562 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00006564 add.w ip, sp, 0x48 |
0x00006566 lsrs r0, r1, 0x11 | r0 = r1 >> 0x11;
0x00006568 ldr r3, [pc, 0x1e8] |
0x0000656a strd r0, fp, [sp, 0x3c] | __asm ("strd r0, fp, [var_3ch]");
0x0000656c lsrs r7, r1, 0xc | r7 = r1 >> 0xc;
0x0000656e str r2, [sp, 0x44] | var_44h = r2;
0x00006570 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x00006572 add r3, pc |
0x00006574 add.w r3, r3, 0x194 | r3 = 0xce5e;
0x00006576 strb r2, [r1, 0xf] | *((r1 + 0xf)) = r2;
0x00006578 str.w ip, [sp, 0x64] | __asm ("str.w ip, [var_64h]");
0x0000657a stm r0!, {r2, r5, r6} | *(r0!) = r2;
| *((r0! + 4)) = r5;
| *((r0! + 8)) = r6;
0x0000657c str r2, [sp, 0x68] | var_68h = r2;
0x0000657e movs r2, 4 | r2 = 4;
0x00006580 str r2, [sp, 0x58] | var_58h = r2;
0x00006582 add r2, sp, 0x28 | r2 += var_28h;
0x00006584 str r2, [sp, 0x5c] | var_5ch = r2;
0x00006586 add r2, sp, 0x38 | r2 += var_38h;
0x00006588 str r2, [sp, 0x60] | var_60h = r2;
0x0000658a ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000658c stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00006590 mov r2, fp | r2 = fp;
0x00006592 ldr r0, [pc, 0x1c4] |
0x00006594 movw r1, 0x36b | r1 = 0x36b;
0x00006596 adds r1, 0x6b | r1 += 0x6b;
0x00006598 add r0, pc | r0 = 0xccf6;
0x0000659a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000659e str r0, [sp, 0x24] | var_24h = r0;
0x000065a0 str r0, [sp, 0x30] | var_30h = r0;
0x000065a2 cmp r0, 0 |
| if (r0 != 0) {
0x000065a4 beq 0x666e |
0x000065a6 cmp r5, 0 |
| if (r5 > 0) {
0x000065a8 ble 0x65d4 |
0x000065aa ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000065ac add.w r2, r3, 0xff | r2 = r3 + 0xff;
0x000065b0 ands.w r2, r2, r3, asr 32 | r2 &= (r3 >> 32);
0x000065b4 it lo |
| if (r2 >= r2) {
0x000065b6 movlo r2, r3 | r2 = r3;
| }
0x000065b8 asrs r2, r2, 8 | r2 >>= 8;
0x000065ba strb r2, [r0] | *(r0) = r2;
0x000065bc rsbs r2, r3, 0 | r2 = r3 - ;
0x000065be uxtb r2, r2 | r2 = (int8_t) r2;
0x000065c0 uxtb r3, r3 | r3 = (int8_t) r3;
0x000065c2 it pl |
| if (r2 >= r2) {
0x000065c4 rsbpl r3, r2, 0 | __asm ("rsbpl r3, r2, 0");
| }
0x000065c6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000065c8 adds r1, r2, 1 | r1 = r2 + 1;
0x000065ca str r1, [sp, 0x24] | var_24h = r1;
0x000065cc strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x000065ce ldr r3, [sp, 0x24] | r3 = var_24h;
0x000065d0 adds r3, 1 | r3++;
0x000065d2 str r3, [sp, 0x24] | var_24h = r3;
| }
0x000065d4 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000065d6 cmp r3, 4 |
| if (r3 > 4) {
0x000065d8 bgt.w 0x66e6 | goto label_5;
| }
| label_1:
0x000065dc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000065de mov r1, sl | r1 = sl;
0x000065e0 str r6, [sp, 0x24] | var_24h = r6;
0x000065e2 add r2, sp, 0x58 | r2 += var_58h;
0x000065e4 mov r0, r8 | r0 = r8;
0x000065e6 add.w ip, r3, 0xff |
0x000065ea ands.w ip, ip, r3, asr 32 |
0x000065ee it lo |
| if (ip >= ip) {
0x000065f0 movlo ip, r3 |
| }
0x000065f2 asr.w ip, ip, 8 |
0x000065f6 strb.w ip, [r6] | *(r6) = ip;
0x000065fa rsbs.w ip, r3, 0 |
0x000065fe uxtb.w ip, ip | ip = (int8_t) ip;
0x00006602 uxtb r3, r3 | r3 = (int8_t) r3;
0x00006604 it pl |
| if (ip >= ip) {
0x00006606 rsbpl r3, ip, 0 | __asm ("rsbpl r3, ip, 0");
| }
0x0000660a ldr.w ip, [sp, 0x24] | ip = var_24h;
0x0000660e add.w lr, ip, 1 | lr = ip + 1;
0x00006612 str.w lr, [sp, 0x24] | __asm ("str.w lr, [var_24h]");
0x00006616 strb.w r3, [ip, 1] | *((ip + 1)) = r3;
0x0000661a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000661c adds r3, 1 | r3++;
0x0000661e str r3, [sp, 0x24] | var_24h = r3;
0x00006620 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00006622 bl 0x5a74 | r0 = fcn_00005a74 (r0, r1, r2, r3, r4, r5, r6);
0x00006626 cmn.w r0, 0x16 |
0x0000662a str r0, [sp, 0x20] | var_20h = r0;
| if (r0 != 0x16) {
0x0000662c beq 0x663e |
0x0000662e ldr r0, [pc, 0x12c] |
0x00006630 movw r1, 0x377 | r1 = 0x377;
0x00006634 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00006636 add r0, pc | r0 = 0xcd98;
0x00006638 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000663c ldr r0, [sp, 0x20] | r0 = var_20h;
| }
| label_2:
0x0000663e ldrd ip, r2, [r4, 0x10] | __asm ("ldrd ip, r2, [r4, 0x10]");
0x00006642 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00006644 cmp r2, 0x14 |
0x00006646 mov r1, r2 | r1 = r2;
0x00006648 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0000664a it ge |
| if (r2 < 0x14) {
0x0000664c movge r1, 0x14 | r1 = 0x14;
| }
0x0000664e ldr.w r3, [r8] | r3 = *(r8);
0x00006652 cmp r5, 0 |
| if (r5 != 0) {
0x00006654 bne 0x66c8 | goto label_6;
| }
0x00006656 strd r0, r2, [sp, 8] | __asm ("strd r0, r2, [var_ch]");
0x0000665a mov r2, r5 | r2 = r5;
0x0000665c strd r1, ip, [sp, 0x10] | __asm ("strd r1, ip, [var_10h]");
0x00006660 movs r0, 4 | r0 = 4;
0x00006662 movs r1, 0x1b | r1 = 0x1b;
0x00006664 str r7, [sp, 4] | var_4h = r7;
0x00006666 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0000666a bl 0x9a28 | fcn_00009a28 (r0, r1);
| }
| label_0:
0x0000666e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00006670 adds r3, 0x16 | r3 += 0x16;
| if (r3 != 0x16) {
0x00006672 beq 0x6682 |
0x00006674 ldr r0, [pc, 0xe8] |
0x00006676 mov r2, r6 | r2 = r6;
0x00006678 movw r1, 0x38e | r1 = 0x38e;
0x0000667c add r0, pc | r0 = 0xcde0;
0x0000667e bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
| label_3:
0x00006682 ldr r0, [pc, 0xe0] |
0x00006684 movs r3, 3 | r3 = 3;
0x00006686 add r2, sp, 0x20 | r2 += var_20h;
0x00006688 mov.w r1, 0x390 | r1 = 0x390;
0x0000668c add r0, pc |
0x0000668e add.w r0, r0, 0x17c | r0 = 0xcf72;
0x00006692 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006696 ldr r2, [pc, 0xd0] |
0x00006698 ldr r3, [pc, 0xac] | r3 = *(0x6748);
0x0000669a ldr r0, [sp, 0x20] | r0 = var_20h;
0x0000669c add r2, pc | r2 = 0xce0a;
0x0000669e ldr r3, [r2, r3] | r3 = *(0xce0a);
0x000066a0 ldr r2, [r3] | r2 = *(0xce0a);
0x000066a2 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000066a4 eors r2, r3 | r2 ^= r3;
0x000066a6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000066aa bne 0x673e | goto label_7;
| }
0x000066ac add sp, 0x74 |
0x000066ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x000066b2 cmp r3, 4 |
0x000066b4 it gt |
| if (r3 <= 4) {
0x000066b6 movgt fp, 0 |
| }
| if (r3 <= 4) {
0x000066ba ble 0x66f2 | goto label_8;
| }
0x000066bc add.w r0, r4, 0x1c | r0 = r4 + 0x1c;
0x000066c0 bl 0xda6c | r0 = fcn_0000da6c (r0);
0x000066c4 add fp, r0 |
0x000066c6 b 0x654a |
| }
| label_6:
0x000066c8 strd r0, r2, [sp, 0x10] | __asm ("strd r0, r2, [var_10h]");
0x000066cc movs r2, 0 | r2 = 0;
0x000066ce strd r1, ip, [sp, 0x18] | __asm ("strd r1, ip, [var_18h]");
0x000066d2 movs r0, 4 | r0 = 4;
0x000066d4 str r7, [sp, 0xc] | var_ch = r7;
0x000066d6 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x000066d8 str r5, [sp, 8] | var_8h = r5;
0x000066da strd sb, r1, [sp] | __asm ("strd sb, r1, [sp]");
0x000066de movs r1, 0xa | r1 = 0xa;
0x000066e0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000066e4 b 0x666e | goto label_0;
| label_5:
0x000066e6 add.w r1, r4, 0x1c | r1 = r4 + 0x1c;
0x000066ea add r0, sp, 0x24 | r0 += var_24h;
0x000066ec bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x000066f0 b 0x65dc | goto label_1;
| label_8:
0x000066f2 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000066f4 str r0, [sp, 0x28] | var_28h = r0;
0x000066f6 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000066f8 str r3, [sp, 0x30] | var_30h = r3;
0x000066fa movs r3, 2 | r3 = 2;
0x000066fc str r3, [sp, 0x38] | var_38h = r3;
0x000066fe str r0, [sp, 0x2c] | var_2ch = r0;
0x00006700 blx 0x3258 | unlink (r0);
0x00006704 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00006706 asrs r2, r0, 8 | r2 = r0 >> 8;
0x00006708 str r0, [sp, 0x3c] | var_3ch = r0;
0x0000670a mov r1, sl | r1 = sl;
0x0000670c str r3, [sp, 0x40] | var_40h = r3;
0x0000670e ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00006710 str r3, [sp, 0x68] | var_68h = r3;
0x00006712 movs r3, 0 | r3 = 0;
0x00006714 strd r3, r3, [sp, 0x4c] | __asm ("strd r3, r3, [var_4ch]");
0x00006716 adds r3, 0x13 | r3 += 0x13;
0x00006718 movs r3, 1 | r3 = 1;
0x0000671a str r3, [sp, 0x48] | var_48h = r3;
0x0000671c movs r3, 3 | r3 = 3;
0x0000671e str r3, [sp, 0x58] | var_58h = r3;
0x00006720 add r3, sp, 0x28 | r3 += var_28h;
0x00006722 str r3, [sp, 0x5c] | var_5ch = r3;
0x00006724 add r3, sp, 0x38 | r3 += var_38h;
0x00006726 str r3, [sp, 0x60] | var_60h = r3;
0x00006728 add r3, sp, 0x48 | r3 += var_48h;
0x0000672a str r3, [sp, 0x64] | var_64h = r3;
0x0000672c strb r2, [r6] | *(r6) = r2;
0x0000672e add r2, sp, 0x58 | r2 += var_58h;
0x00006730 strb r0, [r6, 1] | *((r6 + 1)) = r0;
0x00006732 mov r0, r8 | r0 = r8;
0x00006734 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00006736 bl 0x5a74 | fcn_00005a74 (r0, r1, r2, r3, r4, r5, r6);
0x0000673a str r0, [sp, 0x20] | var_20h = r0;
0x0000673c b 0x663e | goto label_2;
| label_7:
0x0000673e blx 0x348c | fprintf_chk ()
0x00006742 nop |
0x00006744 strh r2, [r7, 0x3c] | *((r7 + 0x3c)) = r2;
0x00006746 movs r2, r0 | r2 = r0;
0x00006748 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000674a movs r0, r0 |
0x0000674c adds r6, 0x9a | r6 += 0x9a;
0x0000674e movs r1, r0 | r1 = r0;
0x00006750 adds r5, 0xae | r5 += 0xae;
0x00006752 movs r1, r0 | r1 = r0;
0x00006754 adds r6, 0xe | r6 += 0xe;
0x00006756 movs r1, r0 | r1 = r0;
0x00006758 adds r5, 0x20 | r5 += 0x20;
0x0000675a movs r1, r0 | r1 = r0;
0x0000675c adds r4, 0x82 | r4 += 0x82;
0x0000675e movs r1, r0 | r1 = r0;
0x00006760 adds r4, 0x3c | r4 += 0x3c;
0x00006762 movs r1, r0 | r1 = r0;
0x00006764 adds r4, 0xf4 | r4 += 0xf4;
0x00006766 movs r1, r0 | r1 = r0;
0x00006768 strh r4, [r6, 0x2e] | *((r6 + 0x2e)) = r4;
0x0000676a movs r2, r0 | r2 = r0;
0x0000676c ldr r3, [pc, 0x4c] |
0x0000676e movs r2, 3 | r2 = 3;
0x00006770 push {r4, lr} |
0x00006772 movw r1, 0x39b | r1 = 0x39b;
0x00006774 adds r1, 0x9b | r1 += 0x9b;
0x00006776 mov r4, r0 | r4 = r0;
0x00006778 add r3, pc | r3 = 0xcf38;
0x0000677a add.w r0, r3, 0x1a4 | r0 = r3 + 0x1a4;
0x0000677e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006782 ldrb r3, [r4] | r3 = *(r4);
0x00006784 and r3, r3, 0xf0 | r3 &= 0xf0;
0x00006788 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x0000678a beq 0x67b2 | goto label_9;
| }
0x0000678c ldr r0, [pc, 0x30] |
0x0000678e mov r2, r4 | r2 = r4;
0x00006790 movw r1, 0x3a3 | r1 = 0x3a3;
0x00006794 add r0, pc | r0 = 0xcf58;
0x00006796 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| do {
0x0000679a ldr r0, [pc, 0x28] |
0x0000679c movs r3, 3 | r3 = 3;
0x0000679e pop.w {r4, lr} |
0x000067a2 movs r2, 0 | r2 = 0;
0x000067a4 mov.w r1, 0x3a4 | r1 = 0x3a4;
0x000067a8 add r0, pc |
0x000067aa add.w r0, r0, 0x1a4 | r0 = 0xd116;
0x000067ae b.w 0xfbf4 | void (*0xfbf4)() ();
| label_9:
0x000067b2 mov r0, r4 | r0 = r4;
0x000067b4 bl 0x60cc | fcn_000060cc (r0);
0x000067b8 b 0x679a |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x69f8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000069f8 () | void fcn_000069f8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_0h_2;
| int16_t var_4h_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_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000069f8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000069fc mov r7, r2 | r7 = r2;
0x000069fe ldr r2, [pc, 0x28c] |
0x00006a00 mov r8, r3 | r8 = r3;
0x00006a02 mov r4, r0 | r4 = r0;
0x00006a04 sub sp, 0x40 |
0x00006a06 ldr r3, [pc, 0x288] | r3 = *(0x6c92);
0x00006a08 mov r6, r1 | r6 = r1;
0x00006a0a add r2, pc | r2 = 0xd69c;
0x00006a0c ldr r0, [pc, 0x284] |
0x00006a0e mov.w r1, -1 | r1 = -1;
0x00006a12 ldr r3, [r2, r3] |
0x00006a14 movs r2, 3 | r2 = 3;
0x00006a16 add r0, pc | r0 = 0xd6ae;
0x00006a18 ldr r3, [r3] | r3 = *(0xd69c);
0x00006a1a str r3, [sp, 0x3c] | var_3ch = r3;
0x00006a1c mov.w r3, 0 | r3 = 0;
0x00006a20 str r1, [sp, 0x18] | var_18h = r1;
0x00006a22 movs r1, 0x37 | r1 = 0x37;
0x00006a24 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006a28 cmp r6, 3 |
0x00006a2a mov.w r3, 0x10 | r3 = 0x10;
0x00006a2e ldr r0, [r4] | r0 = *(r4);
0x00006a30 ite eq |
| if (r6 != 3) {
0x00006a32 moveq r5, 0xc | r5 = 0xc;
| }
| if (r6 == 3) {
0x00006a34 movne r5, 0xa | r5 = 0xa;
| }
0x00006a36 strb.w r3, [sp, 0x1c] | var_1ch = r3;
0x00006a3a blx 0x3258 | unlink (r0);
0x00006a3e ldr.w sb, [r4, 0x6c] | sb = *((r4 + 0x6c));
0x00006a42 add r5, r0 | r5 += r0;
0x00006a44 adds r5, 2 | r5 += 2;
0x00006a46 cmp.w sb, 0 |
| if (sb != 0) {
0x00006a4a beq 0x6a5e |
0x00006a4c ldr.w r0, [sb] | r0 = *(sb);
0x00006a50 blx 0x3258 | unlink (r0);
0x00006a54 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00006a58 add r3, r0 | r3 += r0;
0x00006a5a adds r3, 4 | r3 += 4;
0x00006a5c add r5, r3 | r5 += r3;
| }
0x00006a5e ldr r0, [r4, 4] | r0 = *((r4 + 4));
| if (r0 != 0) {
0x00006a60 cbz r0, 0x6a6a |
0x00006a62 blx 0x3258 | unlink (r0);
0x00006a66 adds r0, 2 | r0 += 2;
0x00006a68 add r5, r0 | r5 += r0;
| }
0x00006a6a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x00006a6c cbz r3, 0x6a74 |
0x00006a6e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00006a70 adds r3, 2 | r3 += 2;
0x00006a72 add r5, r3 | r5 += r3;
| }
0x00006a74 cmp r6, 4 |
| if (r6 > 4) {
0x00006a76 bgt 0x6ad4 | goto label_6;
| }
0x00006a78 ldr r0, [pc, 0x21c] |
0x00006a7a mov r2, r5 | r2 = r5;
0x00006a7c movs r1, 0x49 | r1 = 0x49;
0x00006a7e add r0, pc | r0 = 0xd71a;
0x00006a80 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00006a84 mov sb, r0 | sb = r0;
0x00006a86 str r0, [sp, 0x14] | var_14h = r0;
| if (r0 == 0) {
0x00006a88 cbz r0, 0x6aa8 | goto label_7;
| }
0x00006a8a cmp r6, 3 |
| if (r6 == 3) {
0x00006a8c beq 0x6b26 | goto label_8;
| }
0x00006a8e subs r3, r6, 4 | r3 = r6 - 4;
0x00006a90 cmp r3, 1 |
| if (r3 < 1) {
0x00006a92 bls.w 0x6c46 | goto label_9;
| }
| label_0:
0x00006a96 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00006a98 adds r3, 0x16 | r3 += 0x16;
| if (r3 == 0x16) {
0x00006a9a beq 0x6aa8 | goto label_7;
| }
0x00006a9c ldr r0, [pc, 0x1fc] |
0x00006a9e mov r2, sb | r2 = sb;
0x00006aa0 movs r1, 0x7f | r1 = 0x7f;
0x00006aa2 add r0, pc | r0 = 0xd742;
0x00006aa4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| do {
| label_7:
0x00006aa8 ldr r0, [pc, 0x1f4] |
0x00006aaa movs r3, 3 | r3 = 3;
0x00006aac add r2, sp, 0x18 | r2 += var_18h;
0x00006aae movs r1, 0x81 | r1 = 0x81;
0x00006ab0 add r0, pc | r0 = 0xd754;
0x00006ab2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006ab6 ldr r2, [pc, 0x1ec] |
0x00006ab8 ldr r3, [pc, 0x1d4] | r3 = *(0x6c90);
0x00006aba ldr r0, [sp, 0x18] | r0 = var_18h;
0x00006abc add r2, pc | r2 = 0xd766;
0x00006abe ldr r3, [r2, r3] | r3 = *(0xd766);
0x00006ac0 ldr r2, [r3] | r2 = *(0xd766);
0x00006ac2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00006ac4 eors r2, r3 | r2 ^= r3;
0x00006ac6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00006aca bne.w 0x6c86 | goto label_10;
| }
0x00006ace add sp, 0x40 |
0x00006ad0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x00006ad4 mov r0, r7 | r0 = r7;
0x00006ad6 bl 0xda6c | fcn_0000da6c (r0);
0x00006ada ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00006adc add r5, r0 | r5 += r0;
| if (r3 != 0) {
0x00006ade cbz r3, 0x6ae8 |
0x00006ae0 mov r0, r8 | r0 = r8;
0x00006ae2 bl 0xda6c | r0 = fcn_0000da6c (r0);
0x00006ae6 add r5, r0 | r5 += r0;
| }
0x00006ae8 ldr r0, [pc, 0x1bc] |
0x00006aea mov r2, r5 | r2 = r5;
0x00006aec movs r1, 0x49 | r1 = 0x49;
0x00006aee add r0, pc | r0 = 0xd79a;
0x00006af0 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00006af4 mov sb, r0 | sb = r0;
0x00006af6 str r0, [sp, 0x14] | var_14h = r0;
0x00006af8 cmp r0, 0 |
0x00006afa beq 0x6aa8 |
| } while (r0 == 0);
0x00006afc cmp r6, 5 |
| if (r6 != 5) {
0x00006afe bne 0x6a96 | goto label_0;
| }
0x00006b00 ldr r1, [pc, 0x1a8] |
0x00006b02 add.w sl, sp, 0x14 | sl += var_14h;
0x00006b06 mov r0, sl | r0 = sl;
0x00006b08 add r1, pc | r1 = 0xd7b8;
0x00006b0a bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006b0e mov r1, r6 | r1 = r6;
0x00006b10 mov r0, sl | r0 = sl;
0x00006b12 bl 0x5ec8 | fcn_00005ec8 (r0, r1);
0x00006b16 ldrb.w ip, [r4, 0x10] | ip = *((r4 + 0x10));
0x00006b1a movs r3, 0 | r3 = 0;
0x00006b1c strb.w r3, [sp, 0x20] | var_20h = r3;
0x00006b20 ubfx ip, ip, 1, 1 | ip = (ip >> 1) & ((1 << 1) - 1);
0x00006b24 b 0x6b4a | goto label_11;
| label_8:
0x00006b26 ldr r1, [pc, 0x188] |
0x00006b28 add.w sl, sp, 0x14 | sl += var_14h;
0x00006b2c mov r0, sl | r0 = sl;
0x00006b2e add r1, pc | r1 = 0xd7e4;
0x00006b30 bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006b34 mov r1, r6 | r1 = r6;
0x00006b36 mov r0, sl | r0 = sl;
0x00006b38 bl 0x5ec8 | fcn_00005ec8 (r0, r1);
0x00006b3c movs r3, 0 | r3 = 0;
0x00006b3e strb.w r3, [sp, 0x20] | var_20h = r3;
| label_2:
0x00006b42 ldrb.w ip, [r4, 0x10] | ip = *((r4 + 0x10));
0x00006b46 and ip, ip, 1 |
| label_11:
0x00006b4a ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00006b4c lsl.w ip, ip, 1 |
0x00006b50 ldrb.w r3, [sp, 0x20] | r3 = var_20h;
0x00006b54 subs r1, r2, 0 | r1 = r2 - 0;
0x00006b56 it ne |
| if (r1 == r2) {
0x00006b58 movne r1, 1 | r1 = 1;
| }
0x00006b5a bic r3, r3, 6 | r3 = BIT_MASK (r3, 6);
0x00006b5e orr.w ip, ip, r1, lsl 2 |
0x00006b62 orr.w ip, ip, r3 |
0x00006b64 lsrs r3, r0, 0x10 | r3 = r0 >> 0x10;
0x00006b66 tst.w ip, 4 |
0x00006b6a strb.w ip, [sp, 0x20] | var_20h = ip;
| if ((ip & 4) != 0) {
0x00006b6e beq 0x6b8e |
0x00006b70 ldrd r2, r3, [r2, 0xc] | __asm ("ldrd r2, r3, [r2, 0xc]");
0x00006b74 bic ip, ip, 0x38 | ip = BIT_MASK (ip, 0x38);
0x00006b78 and r3, r3, 3 | r3 &= 3;
0x00006b7c and r2, r2, 1 | r2 &= 1;
0x00006b80 lsls r3, r3, 3 | r3 <<= 3;
0x00006b82 orr.w r3, r3, r2, lsl 5 | r3 |= (r2 << 5);
0x00006b86 orr.w r3, r3, ip | r3 |= ip;
0x00006b8a strb.w r3, [sp, 0x20] | var_20h = r3;
| }
0x00006b8e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00006b90 movs r2, 1 | r2 = 1;
0x00006b92 cmp r3, 0 |
| if (r3 == 0) {
0x00006b94 beq 0x6c3e | goto label_12;
| }
| label_1:
0x00006b96 ldrb.w r3, [sp, 0x20] | r3 = var_20h;
0x00006b9a bfi r3, r2, 7, 1 | value_0 = BIT_MASK (7, 1);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x00006b9e strb.w r3, [sp, 0x20] | var_20h = r3;
0x00006ba2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00006ba4 cmp r3, 0 |
| if (r3 == 0) {
0x00006ba6 beq 0x6c34 | goto label_13;
| }
0x00006ba8 movs r3, 1 | r3 = 1;
| do {
0x00006baa ldrb.w r1, [sp, 0x20] | r1 = var_20h;
0x00006bae mov r0, sl | r0 = sl;
0x00006bb0 bfi r1, r3, 6, 1 | value_2 = BIT_MASK (6, 1);
| value_3 = r3 & value_2;
| value_2 = ~value_2;
| r1 &= value_2;
| r1 |= value_3;
0x00006bb4 strb.w r1, [sp, 0x20] | var_20h = r1;
0x00006bb8 uxtb r1, r1 | r1 = (int8_t) r1;
0x00006bba bl 0x5ec8 | fcn_00005ec8 (r0, r1);
0x00006bbe ldr r1, [r4, 0x60] | r1 = *((r4 + 0x60));
0x00006bc0 mov r0, sl | r0 = sl;
0x00006bc2 bl 0x5ed4 | fcn_00005ed4 (r0, r1, r2);
0x00006bc6 cmp r6, 5 |
| if (r6 == 5) {
0x00006bc8 beq 0x6c64 | goto label_14;
| }
0x00006bca ldr r1, [r4] | r1 = *(r4);
0x00006bcc mov r0, sl | r0 = sl;
0x00006bce bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006bd2 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
| if (r3 != 0) {
0x00006bd4 cbz r3, 0x6bea |
| label_4:
0x00006bd6 ldr r1, [r3] | r1 = *(r3);
0x00006bd8 mov r0, sl | r0 = sl;
0x00006bda bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006bde ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00006be0 mov r0, sl | r0 = sl;
0x00006be2 ldrd r2, r1, [r3, 4] | __asm ("ldrd r2, r1, [r3, 4]");
0x00006be6 bl 0x5f38 | fcn_00005f38 (r0, r1);
| }
| label_3:
0x00006bea ldr r1, [r4, 4] | r1 = *((r4 + 4));
| if (r1 != 0) {
0x00006bec cbz r1, 0x6bf4 |
0x00006bee mov r0, sl | r0 = sl;
0x00006bf0 bl 0x5f04 | fcn_00005f04 (r0, r1);
| }
0x00006bf4 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
| if (r1 != 0) {
0x00006bf6 cbz r1, 0x6c00 |
0x00006bf8 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00006bfa mov r0, sl | r0 = sl;
0x00006bfc bl 0x5f38 | fcn_00005f38 (r0, r1);
| }
0x00006c00 movs r2, 1 | r2 = 1;
0x00006c02 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00006c04 mov r3, r5 | r3 = r5;
0x00006c06 strd r2, r6, [sp] | __asm ("strd r2, r6, [sp]");
0x00006c0a add.w r0, r4, 0x1c | r0 = r4 + 0x1c;
0x00006c0e mov r2, sb | r2 = sb;
0x00006c10 bl 0x583c | fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x00006c14 ldrb r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00006c16 str r0, [sp, 0xc] | var_ch = r0;
0x00006c18 str r6, [sp, 4] | var_4h_2 = r6;
0x00006c1a ldr r5, [r4] | r5 = *(r4);
0x00006c1c and r2, r2, 1 | r2 &= 1;
0x00006c20 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00006c22 str r2, [sp, 8] | var_8h = r2;
0x00006c24 movs r2, 0 | r2 = 0;
0x00006c26 str r0, [sp, 0x18] | var_18h = r0;
0x00006c28 mov r1, r2 | r1 = r2;
0x00006c2a movs r0, 4 | r0 = 4;
0x00006c2c str r5, [sp] | *(sp) = r5;
0x00006c2e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00006c32 b 0x6a96 | goto label_0;
| label_13:
0x00006c34 ldrb.w r3, [sp, 0x20] | r3 = var_20h;
0x00006c38 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x00006c3c b 0x6baa |
| } while (1);
| label_12:
0x00006c3e ldrb.w r2, [sp, 0x20] | r2 = var_20h;
0x00006c42 lsrs r2, r2, 7 | r2 >>= 7;
0x00006c44 b 0x6b96 | goto label_1;
| label_9:
0x00006c46 ldr r1, [pc, 0x6c] |
0x00006c48 add.w sl, sp, 0x14 | sl += var_14h;
0x00006c4c mov r0, sl | r0 = sl;
0x00006c4e add r1, pc | r1 = 0xd908;
0x00006c50 bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006c54 movs r1, 4 | r1 = 4;
0x00006c56 mov r0, sl | r0 = sl;
0x00006c58 bl 0x5ec8 | fcn_00005ec8 (r0, r1);
0x00006c5c movs r3, 0 | r3 = 0;
0x00006c5e strb.w r3, [sp, 0x20] | var_20h = r3;
0x00006c62 b 0x6b42 | goto label_2;
| label_14:
0x00006c64 mov r1, r7 | r1 = r7;
0x00006c66 mov r0, sl | r0 = sl;
0x00006c68 bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x00006c6c ldr r1, [r4] | r1 = *(r4);
0x00006c6e mov r0, sl | r0 = sl;
0x00006c70 bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006c74 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00006c76 cmp r3, 0 |
| if (r3 == 0) {
0x00006c78 beq 0x6bea | goto label_3;
| }
0x00006c7a mov r1, r8 | r1 = r8;
0x00006c7c mov r0, sl | r0 = sl;
0x00006c7e bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x00006c82 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00006c84 b 0x6bd6 | goto label_4;
| label_10:
0x00006c86 blx 0x348c | fprintf_chk ()
0x00006c8a nop |
0x00006c8c strh r6, [r0, 0x14] | *((r0 + 0x14)) = r6;
0x00006c8e movs r2, r0 | r2 = r0;
0x00006c90 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00006c92 movs r0, r0 |
0x00006c94 adds r3, 0x72 | r3 += 0x72;
0x00006c96 movs r1, r0 | r1 = r0;
0x00006c98 adds r2, 0xbe | r2 += 0xbe;
0x00006c9a movs r1, r0 | r1 = r0;
0x00006c9c adds r2, 0x9a | r2 += 0x9a;
0x00006c9e movs r1, r0 | r1 = r0;
0x00006ca0 adds r2, 0xd8 | r2 += 0xd8;
0x00006ca2 movs r1, r0 | r1 = r0;
0x00006ca4 strh r4, [r2, 0xe] | *((r2 + 0xe)) = r4;
0x00006ca6 movs r2, r0 | r2 = r0;
0x00006ca8 adds r2, 0x4e | r2 += 0x4e;
0x00006caa movs r1, r0 | r1 = r0;
0x00006cac adds r2, 0x78 | r2 += 0x78;
0x00006cae movs r1, r0 | r1 = r0;
0x00006cb0 adds r2, 0x4a | r2 += 0x4a;
0x00006cb2 movs r1, r0 | r1 = r0;
0x00006cb4 adds r1, 0x32 | r1 += 0x32;
0x00006cb6 movs r1, r0 | r1 = r0;
0x00006cb8 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00006cbc mov r7, r2 | r7 = r2;
0x00006cbe ldr r2, [pc, 0xe0] |
0x00006cc0 mov r5, r3 | r5 = r3;
0x00006cc2 sub sp, 0xc |
0x00006cc4 mov r8, r0 | r8 = r0;
0x00006cc6 ldr r3, [pc, 0xdc] | r3 = *(0x6da6);
0x00006cc8 mov r6, r1 | r6 = r1;
0x00006cca ldr r4, [pc, 0xdc] |
0x00006ccc add r2, pc | r2 = 0xda72;
0x00006cce ldr.w sb, [pc, 0xdc] |
0x00006cd2 movs r1, 0x94 | r1 = 0x94;
0x00006cd4 ldr r3, [r2, r3] |
0x00006cd6 movs r2, 3 | r2 = 3;
0x00006cd8 add r4, pc | r4 = 0xda86;
0x00006cda add.w r0, r4, 0x18 | r0 = r4 + 0x18;
0x00006cde add sb, pc | sb = 0xda90;
0x00006ce0 ldr r3, [r3] | r3 = *(0xda72);
0x00006ce2 str r3, [sp, 4] | var_4h = r3;
0x00006ce4 mov.w r3, 0 | r3 = 0;
0x00006ce8 str r7, [sp] | *(sp) = r7;
0x00006cea bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006cee movs r2, 0x20 | r2 = 0x20;
0x00006cf0 movs r1, 0x95 | r1 = 0x95;
0x00006cf2 mov r0, sb | r0 = sb;
0x00006cf4 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00006cf8 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00006cfa cbz r0, 0x6d2a | goto label_5;
| }
0x00006cfc cmp r5, 1 |
0x00006cfe strb r6, [r0] | *(r0) = r6;
0x00006d00 str.w r8, [r0, 0xc] | __asm ("str.w r8, [r0, 0xc]");
| if (r5 < 1) {
0x00006d04 bls 0x6d8c | goto label_15;
| }
0x00006d06 mov r6, sp | r6 = sp;
0x00006d08 mov r0, r6 | r0 = r6;
0x00006d0a bl 0x5ebc | fcn_00005ebc (r0);
0x00006d0e strb r0, [r4, 4] | *((r4 + 4)) = r0;
0x00006d10 mov r0, r6 | r0 = r6;
0x00006d12 bl 0x5ebc | fcn_00005ebc (r0);
0x00006d16 cmp.w r8, 4 |
0x00006d1a strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x00006d1c ite le |
| if (r8 > 4) {
0x00006d1e movle r0, 0 | r0 = 0;
| }
| if (r8 <= 4) {
0x00006d20 movgt r0, 1 | r0 = 1;
| }
0x00006d22 cmp r5, 2 |
0x00006d24 it ls |
| if (r5 > 2) {
0x00006d26 movls r0, 0 | r0 = 0;
| }
0x00006d28 cbnz r0, 0x6d56 |
| while (r0 == 1) {
| label_5:
0x00006d2a ldr r0, [pc, 0x84] |
0x00006d2c movs r3, 3 | r3 = 3;
0x00006d2e movs r2, 0 | r2 = 0;
0x00006d30 movs r1, 0xb0 | r1 = 0xb0;
0x00006d32 add r0, pc | r0 = 0xdae8;
0x00006d34 adds r0, 0x18 | r0 += 0x18;
0x00006d36 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006d3a ldr r2, [pc, 0x78] |
0x00006d3c ldr r3, [pc, 0x64] | r3 = *(0x6da4);
0x00006d3e add r2, pc | r2 = 0xdaf8;
0x00006d40 ldr r3, [r2, r3] | r3 = *(0xdaf8);
0x00006d42 ldr r2, [r3] | r2 = *(0xdaf8);
0x00006d44 ldr r3, [sp, 4] | r3 = var_4h;
0x00006d46 eors r2, r3 | r2 ^= r3;
0x00006d48 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00006d4c bne 0x6d9a | goto label_16;
| }
0x00006d4e mov r0, r4 | r0 = r4;
0x00006d50 add sp, 0xc |
0x00006d52 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x00006d56 movs r3, 0 | r3 = 0;
0x00006d58 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x00006d5c str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00006d5e adds r2, r7, r5 | r2 = r7 + r5;
0x00006d60 mov r1, r6 | r1 = r6;
0x00006d62 strd r3, r3, [r0, 4] | __asm ("strd r3, r3, [r0, 4]");
0x00006d66 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00006d68 bl 0xde98 | r0 = fcn_0000de98 (r0, r1, r2);
0x00006d6c cmp r0, 1 |
0x00006d6e beq 0x6d2a |
| }
0x00006d70 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
| if (r2 != 0) {
0x00006d72 cbz r2, 0x6d7c |
0x00006d74 movs r1, 0xa8 | r1 = 0xa8;
0x00006d76 mov r0, sb | r0 = sb;
0x00006d78 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x00006d7c ldr r0, [pc, 0x38] |
0x00006d7e mov r2, r4 | r2 = r4;
0x00006d80 movs r1, 0xaa | r1 = 0xaa;
0x00006d82 movs r4, 0 | r4 = 0;
0x00006d84 add r0, pc | r0 = 0xdb40;
0x00006d86 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00006d8a b 0x6d2a | goto label_5;
| label_15:
0x00006d8c mov r2, r0 | r2 = r0;
0x00006d8e movs r1, 0x9b | r1 = 0x9b;
0x00006d90 mov r0, sb | r0 = sb;
0x00006d92 movs r4, 0 | r4 = 0;
0x00006d94 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00006d98 b 0x6d2a | goto label_5;
| label_16:
0x00006d9a blx 0x348c | fprintf_chk ()
0x00006d9e nop |
0x00006da0 ldrb r4, [r0, 0x1f] | r4 = *((r0 + 0x1f));
0x00006da2 movs r2, r0 | r2 = r0;
0x00006da4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00006da6 movs r0, r0 |
0x00006da8 adds r0, 0xb0 | r0 += 0xb0;
0x00006daa movs r1, r0 | r1 = r0;
0x00006dac adds r0, 0x5e | r0 += 0x5e;
0x00006dae movs r1, r0 | r1 = r0;
0x00006db0 adds r0, 0x56 | r0 += 0x56;
0x00006db2 movs r1, r0 | r1 = r0;
0x00006db4 ldrb r2, [r2, 0x1d] | r2 = *((r2 + 0x1d));
0x00006db6 movs r2, r0 | r2 = r0;
0x00006db8 cmp r7, 0xb8 |
0x00006dba movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x6e0c */
| #include <stdint.h>
|
; (fcn) fcn.00006e0c () | void fcn_00006e0c (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x00006e0c mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00006e10 mov r5, r1 | r5 = r1;
0x00006e12 ldr r1, [pc, 0x7c] |
0x00006e14 sub sp, 0x10 |
0x00006e16 movs r6, 0 | r6 = 0;
0x00006e18 mov r7, r0 | r7 = r0;
0x00006e1a ldr r4, [pc, 0x78] |
0x00006e1c movs r2, 3 | r2 = 3;
0x00006e1e ldr r3, [pc, 0x78] | r3 = *(0x6e9a);
0x00006e20 add r1, pc | r1 = 0xdcb6;
0x00006e22 mov.w r8, 4 | r8 = 4;
0x00006e26 add r4, pc | r4 = 0xdcc0;
0x00006e28 ldr r3, [r1, r3] |
0x00006e2a adds r4, 0x44 | r4 += 0x44;
0x00006e2c movs r1, 0xce | r1 = 0xce;
0x00006e2e mov r0, r4 | r0 = r4;
0x00006e30 ldr r3, [r3] | r3 = *(0xdcb6);
0x00006e32 str r3, [sp, 0xc] | var_ch = r3;
0x00006e34 mov.w r3, 0 | r3 = 0;
0x00006e38 str r6, [sp, 8] | var_8h = r6;
0x00006e3a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006e3e mov r3, r6 | r3 = r6;
0x00006e40 mov r2, r6 | r2 = r6;
0x00006e42 movs r1, 0xc0 | r1 = 0xc0;
0x00006e44 mov r0, r7 | r0 = r7;
0x00006e46 strd r6, r8, [sp] | __asm ("strd r6, r8, [sp]");
0x00006e48 ldr r0, [r0] | r0 = *(r0);
0x00006e4a bl 0x583c | fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x00006e4e str r5, [sp] | *(sp) = r5;
0x00006e50 mov r1, r0 | r1 = r0;
0x00006e52 ldr r3, [r7] | r3 = *(r7);
0x00006e54 mov r2, r6 | r2 = r6;
0x00006e56 mov r0, r8 | r0 = r8;
0x00006e58 strd r1, r1, [sp, 4] | __asm ("strd r1, r1, [var_8h]");
0x00006e5c movs r1, 0x14 | r1 = 0x14;
0x00006e5e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00006e62 movs r3, 3 | r3 = 3;
0x00006e64 add r2, sp, 8 | r2 += var_8h;
0x00006e66 mov r0, r4 | r0 = r4;
0x00006e68 movs r1, 0xd3 | r1 = 0xd3;
0x00006e6a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006e6e ldr r2, [pc, 0x2c] |
0x00006e70 ldr r3, [pc, 0x24] | r3 = *(0x6e98);
0x00006e72 ldr r0, [sp, 8] | r0 = var_8h;
0x00006e74 add r2, pc | r2 = 0xdd16;
0x00006e76 ldr r3, [r2, r3] | r3 = *(0xdd16);
0x00006e78 ldr r2, [r3] | r2 = *(0xdd16);
0x00006e7a ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006e7c eors r2, r3 | r2 ^= r3;
0x00006e7e mov.w r3, 0 | r3 = 0;
0x00006e80 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x00006e82 bne 0x6e8a |
0x00006e84 add sp, 0x10 |
0x00006e86 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00006e8a blx 0x348c | fprintf_chk ()
0x00006e8e nop |
0x00006e90 ldrb r0, [r6, 0x19] | r0 = *((r6 + 0x19));
0x00006e92 movs r2, r0 | r2 = r0;
0x00006e94 cmp r7, 0x62 |
0x00006e96 movs r1, r0 | r1 = r0;
0x00006e98 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00006e9a movs r0, r0 |
0x00006e9c ldrb r4, [r3, 0x18] | r4 = *((r3 + 0x18));
0x00006e9e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x6ea0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00006ea0 () | void fcn_00006ea0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_5;
| int16_t var_4h_4;
| int16_t var_8h_3;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_0h;
| int16_t var_64h;
| int16_t var_8h;
| int16_t var_0h_2;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00006ea0 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00006ea4 sub sp, 0x3c |
0x00006ea6 str r2, [sp, 0x1c] | var_1ch = r2;
0x00006ea8 mov r7, r3 | r7 = r3;
0x00006eaa mov r6, r0 | r6 = r0;
0x00006eac mov fp, r1 |
0x00006eae ldr r2, [pc, 0x18c] |
0x00006eb0 movs r1, 0xeb | r1 = 0xeb;
0x00006eb2 ldr r3, [pc, 0x18c] | r3 = *(0x7042);
0x00006eb4 add.w r8, sp, 0x2c | r8 += var_2ch;
0x00006eb8 ldr r0, [pc, 0x188] |
0x00006eba add r2, pc | r2 = 0xdefc;
0x00006ebc ldr r4, [sp, 0x64] | r4 = var_64h;
0x00006ebe ldr r3, [r2, r3] |
0x00006ec0 movs r2, 3 | r2 = 3;
0x00006ec2 add r0, pc | r0 = 0xdf0a;
0x00006ec4 ldr.w sl, [sp, 0x68] | sl = var_8h;
0x00006ec8 adds r0, 0x5c | r0 += 0x5c;
0x00006eca and r4, r4, 1 | r4 &= 1;
0x00006ece ldr r3, [r3] | r3 = *(0xdefc);
0x00006ed0 str r3, [sp, 0x34] | var_34h = r3;
0x00006ed2 mov.w r3, 0 | r3 = 0;
0x00006ed6 movs r3, 0 | r3 = 0;
0x00006ed8 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [sp, 0x2c]");
0x00006edc mov.w r3, -1 | r3 = -1;
0x00006ee0 str r3, [sp, 0x28] | var_28h = r3;
0x00006ee2 lsls r4, r4, 3 | r4 <<= 3;
0x00006ee4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00006ee8 ldr r5, [r6, 0xc] | r5 = *((r6 + 0xc));
0x00006eea orn r4, r4, 0x7d | r4 |= 0x7d;
| r4 = ~r4;
0x00006eee movs r3, 0 | r3 = 0;
0x00006ef0 bfi r3, r4, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r4 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x00006ef4 str r3, [sp, 0x18] | var_18h = r3;
0x00006ef6 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x00006efa adds r5, 2 | r5 += 2;
0x00006efc b 0x6f08 |
| while (r0 != 0) {
0x00006efe ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00006f00 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00006f02 blx 0x3258 | r0 = unlink (r0);
0x00006f06 add r5, r0 | r5 += r0;
0x00006f08 mov r1, r8 | r1 = r8;
0x00006f0a mov r0, r6 | r0 = r6;
0x00006f0c bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00006f10 cmp r0, 0 |
0x00006f12 bne 0x6efe |
| }
0x00006f14 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x00006f18 cmp r3, 4 |
| if (r3 > 4) {
0x00006f1a bgt.w 0x702e | goto label_4;
| }
| label_1:
0x00006f1e ldr r0, [pc, 0x128] |
0x00006f20 mov r2, r5 | r2 = r5;
0x00006f22 movs r1, 0xf7 | r1 = 0xf7;
0x00006f24 add r0, pc | r0 = 0xdf72;
0x00006f26 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00006f2a str r0, [sp, 0x14] | var_14h = r0;
0x00006f2c str r0, [sp, 0x24] | var_24h = r0;
0x00006f2e cmp r0, 0 |
| if (r0 == 0) {
0x00006f30 beq 0x6fe6 | goto label_5;
| }
0x00006f32 add.w sb, sp, 0x24 | sb += var_24h;
0x00006f36 ldr r1, [sp, 0x60] | r1 = var_0h;
0x00006f38 mov r0, sb | r0 = sb;
0x00006f3a bl 0x5ed4 | fcn_00005ed4 (r0, r1, r2);
0x00006f3c invalid |
0x00006f40 adds r0, 0x9c | r0 += 0x9c;
0x00006f42 cmp r3, 4 |
| if (r3 > 4) {
0x00006f44 bgt 0x7024 | goto label_6;
| }
| label_0:
0x00006f46 movs r3, 0 | r3 = 0;
0x00006f48 add r4, sp, 0x30 | r4 += var_30h;
0x00006f4a str r3, [sp, 0x2c] | var_2ch = r3;
0x00006f4c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00006f4e str r5, [sp, 0x1c] | var_1ch = r5;
0x00006f50 mov r7, r3 | r7 = r3;
0x00006f52 mov r5, r3 | r5 = r3;
0x00006f54 b 0x6f9a |
| while (r0 != 0) {
0x00006f56 mov r1, r4 | r1 = r4;
0x00006f58 mov r0, fp | r0 = fp;
0x00006f5a bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00006f5e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00006f60 mov r0, sb | r0 = sb;
0x00006f62 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00006f64 bl 0x5f04 | fcn_00005f04 (r0, r1);
0x00006f68 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00006f6a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00006f6c ldr r1, [r3] | r1 = *(r3);
0x00006f6e ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x00006f72 cmp r5, 0 |
0x00006f74 it ne |
| if (r5 != 0) {
0x00006f76 cmpne r3, 4 | __asm ("cmpne r3, 4");
| }
0x00006f78 it le |
| if (r5 <= 0) {
0x00006f7a uxtble r1, r1 | __asm ("uxtble r1, r1");
| }
| if (r5 > 0) {
0x00006f7c ble 0x6f92 |
0x00006f7e ldrb r3, [r7, 9] | r3 = *((r7 + 9));
0x00006f80 ldrb r2, [r7, 8] | r2 = *((r7 + 8));
0x00006f82 lsls r3, r3, 3 | r3 <<= 3;
0x00006f84 orr.w r3, r3, r2, lsl 2 | r3 |= (r2 << 2);
0x00006f88 ldrb r2, [r7, 0xa] | r2 = *((r7 + 0xa));
0x00006f8a orrs r3, r1 | r3 |= r1;
0x00006f8c orr.w r3, r3, r2, lsl 4 | r3 |= (r2 << 4);
0x00006f90 uxtb r1, r3 | r1 = (int8_t) r3;
| }
0x00006f92 mov r0, sb | r0 = sb;
0x00006f94 adds r7, 0xc | r7 += 0xc;
0x00006f96 bl 0x5ec8 | fcn_00005ec8 (r0, r1);
0x00006f9a mov r1, r8 | r1 = r8;
0x00006f9c mov r0, r6 | r0 = r6;
0x00006f9e bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00006fa2 cmp r0, 0 |
0x00006fa4 bne 0x6f56 |
| }
0x00006fa6 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00006fa8 mov r4, r0 | r4 = r0;
0x00006faa ldr.w r2, [sl, 0x9c] | r2 = *((sl + 0x9c));
0x00006fae add.w r0, sl, 0x1c | r0 = sl + 0x1c;
0x00006fb2 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00006fb4 mov r3, r5 | r3 = r5;
0x00006fb6 ldr r5, [sp, 0x14] | r5 = var_14h;
0x00006fb8 str r2, [sp, 4] | var_4h_4 = r2;
0x00006fba movs r2, 1 | r2 = 1;
0x00006fbc str r2, [sp] | *(sp) = r2;
0x00006fbe mov r2, r5 | r2 = r5;
0x00006fc0 bl 0x583c | fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x00006fc4 ldr r3, [sp, 0x60] | r3 = var_0h;
0x00006fc6 mov r2, r4 | r2 = r4;
0x00006fc8 str r0, [sp, 8] | var_8h_3 = r0;
0x00006fca str r0, [sp, 0x28] | var_28h = r0;
0x00006fcc movs r0, 4 | r0 = 4;
0x00006fce str r3, [sp, 4] | var_4h_4 = r3;
0x00006fd0 ldr.w r1, [sl] | r1 = *(sl);
0x00006fd4 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00006fd8 str r1, [sp] | *(sp) = r1;
0x00006fda movs r1, 0x16 | r1 = 0x16;
0x00006fdc bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00006fe0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00006fe2 adds r3, 0x16 | r3 += 0x16;
0x00006fe4 bne 0x7014 |
| while (1) {
| label_5:
0x00006fe6 ldr r0, [pc, 0x64] |
0x00006fe8 movs r3, 3 | r3 = 3;
0x00006fea add r2, sp, 0x28 | r2 += var_28h;
0x00006fec movw r1, 0x115 | r1 = 0x115;
0x00006ff0 add r0, pc | r0 = 0xe042;
0x00006ff2 adds r0, 0x5c | r0 += 0x5c;
0x00006ff4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00006ff8 ldr r2, [pc, 0x54] |
0x00006ffa ldr r3, [pc, 0x44] | r3 = *(0x7042);
0x00006ffc ldr r0, [sp, 0x28] | r0 = var_28h;
0x00006ffe add r2, pc | r2 = 0xe052;
0x00007000 ldr r3, [r2, r3] | r3 = *(0xe052);
0x00007002 ldr r2, [r3] | r2 = *(0xe052);
0x00007004 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00007006 eors r2, r3 | r2 ^= r3;
0x00007008 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000700c bne 0x7038 | goto label_7;
| }
0x0000700e add sp, 0x3c |
0x00007010 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00007014 ldr r0, [pc, 0x3c] |
0x00007016 mov r2, r5 | r2 = r5;
0x00007018 movw r1, 0x113 | r1 = 0x113;
0x0000701c add r0, pc | r0 = 0xe074;
0x0000701e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00007022 b 0x6fe6 |
| }
| label_6:
0x00007024 mov r1, r7 | r1 = r7;
0x00007026 mov r0, sb | r0 = sb;
0x00007028 bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x0000702c b 0x6f46 | goto label_0;
| label_4:
0x0000702e mov r0, r7 | r0 = r7;
0x00007030 bl 0xda6c | r0 = fcn_0000da6c (r0);
0x00007034 add r5, r0 | r5 += r0;
0x00007036 b 0x6f1e | goto label_1;
| label_7:
0x00007038 blx 0x348c | fprintf_chk ()
0x0000703c ldrb r6, [r2, 0x17] | r6 = *((r2 + 0x17));
0x0000703e movs r2, r0 | r2 = r0;
0x00007040 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00007042 movs r0, r0 |
0x00007044 cmp r6, 0xc6 |
0x00007046 movs r1, r0 | r1 = r0;
0x00007048 cmp r6, 0x18 |
0x0000704a movs r1, r0 | r1 = r0;
0x0000704c cmp r5, 0x98 |
0x0000704e movs r1, r0 | r1 = r0;
0x00007050 ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x00007052 movs r2, r0 | r2 = r0;
0x00007054 cmp r5, 0x20 |
0x00007056 movs r1, r0 | r1 = r0;
0x00007058 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000705c mov r6, r2 | r6 = r2;
0x0000705e ldr r2, [pc, 0x174] |
0x00007060 mov r7, r3 | r7 = r3;
0x00007062 mov r4, r0 | r4 = r0;
0x00007064 sub sp, 8 |
0x00007066 ldr r3, [pc, 0x170] | r3 = *(0x71da);
0x00007068 mov r8, r1 | r8 = r1;
0x0000706a ldr r0, [pc, 0x170] |
0x0000706c add r2, pc | r2 = 0xe246;
0x0000706e ldr.w sl, [pc, 0x170] |
0x00007070 adr r1, 0x1c0 | r1 = 0x1c0;
0x00007072 mov.w r1, 0x128 | r1 = 0x128;
0x00007074 strb r4, [r2, 6] | *((r2 + 6)) = r4;
0x00007076 ldr r3, [r2, r3] |
0x00007078 movs r2, 3 | r2 = 3;
0x0000707a add r0, pc | r0 = 0xe25c;
0x0000707c add.w sb, r6, r7 | sb = r6 + r7;
0x00007080 adds r0, 0x78 | r0 += 0x78;
0x00007082 add sl, pc | sl = 0xe268;
0x00007084 ldr r3, [r3] | r3 = *(0xe246);
0x00007086 str r3, [sp, 4] | var_4h = r3;
0x00007088 mov.w r3, 0 | r3 = 0;
0x0000708c str r6, [sp] | *(sp) = r6;
0x0000708e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00007092 movs r2, 0x20 | r2 = 0x20;
0x00007094 movw r1, 0x129 | r1 = 0x129;
0x00007098 mov r0, sl | r0 = sl;
0x0000709a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000709e mov r5, r0 | r5 = r0;
0x000070a0 cmp r0, 0 |
| if (r0 == 0) {
0x000070a2 beq 0x7126 | goto label_3;
| }
0x000070a4 ldr r3, [sp] | r3 = *(sp);
0x000070a6 strb.w r8, [r0] | *(r0) = r8;
0x000070aa str r4, [r0, 8] | *((r0 + 8)) = r4;
0x000070ac sub.w r3, sb, r3 | r3 = sb - r3;
0x000070b0 cmp r3, 1 |
| if (r3 <= 1) {
0x000070b2 ble.w 0x71be | goto label_8;
| }
0x000070b6 mov r8, sp | r8 = sp;
0x000070b8 mov r0, r8 | r0 = r8;
0x000070ba bl 0x5e60 | fcn_00005e60 (r0);
0x000070be cmp r4, 4 |
0x000070c0 str r0, [r5, 4] | *((r5 + 4)) = r0;
| if (r4 > 4) {
0x000070c2 bgt 0x7154 | goto label_9;
| }
| label_2:
0x000070c4 bl 0xd5ac | fcn_0000d5ac ();
0x000070c8 ldr r3, [sp] | r3 = *(sp);
0x000070ca str r0, [r5, 0x1c] | *((r5 + 0x1c)) = r0;
0x000070cc subs r3, r3, r6 | r3 -= r6;
0x000070ce cmp r7, r3 |
| if (r7 < r3) {
0x000070d0 bls 0x7190 | goto label_10;
| }
0x000070d2 ldr.w sb, [pc, 0x110] |
0x000070d6 add sb, pc | sb = 0xe2c0;
0x000070d8 b 0x70f6 |
| while (r0 != 0) {
0x000070da mov r0, r8 | r0 = r8;
0x000070dc bl 0x5ebc | r0 = fcn_00005ebc (r0);
0x000070e0 mov r3, r0 | r3 = r0;
0x000070e2 mov r1, r4 | r1 = r4;
0x000070e4 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x000070e6 movs r2, 4 | r2 = 4;
0x000070e8 str r3, [r4] | *(r4) = r3;
0x000070ea bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x000070ee ldr r1, [sp] | r1 = *(sp);
0x000070f0 subs r1, r1, r6 | r1 -= r6;
0x000070f2 cmp r1, r7 |
| if (r1 >= r7) {
0x000070f4 bhs 0x718e | goto label_11;
| }
0x000070f6 movs r2, 4 | r2 = 4;
0x000070f8 mov.w r1, 0x146 | r1 = 0x146;
0x000070fc mov r0, sb | r0 = sb;
0x000070fe bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00007102 mov r4, r0 | r4 = r0;
0x00007104 cmp r0, 0 |
0x00007106 bne 0x70da |
| }
0x00007108 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
| if (r2 != 0) {
0x0000710a cbz r2, 0x7116 |
0x0000710c mov.w r1, 0x14a | r1 = 0x14a;
0x00007110 mov r0, sb | r0 = sb;
0x00007112 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x00007116 ldr r0, [pc, 0xd0] |
0x00007118 mov r2, r5 | r2 = r5;
0x0000711a mov.w r1, 0x14c | r1 = 0x14c;
0x0000711e movs r5, 0 | r5 = 0;
0x00007120 add r0, pc | r0 = 0xe30e;
0x00007122 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_3:
0x00007126 ldr r0, [pc, 0xc4] |
0x00007128 movs r3, 3 | r3 = 3;
0x0000712a movs r2, 0 | r2 = 0;
0x0000712c mov.w r1, 0x15c | r1 = 0x15c;
0x00007130 add r0, pc | r0 = 0xe322;
0x00007132 adds r0, 0x78 | r0 += 0x78;
0x00007134 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00007138 ldr r2, [pc, 0xb4] |
0x0000713a ldr r3, [pc, 0x9c] | r3 = *(0x71da);
0x0000713c add r2, pc | r2 = 0xe330;
0x0000713e ldr r3, [r2, r3] | r3 = *(0xe330);
0x00007140 ldr r2, [r3] | r2 = *(0xe330);
0x00007142 ldr r3, [sp, 4] | r3 = var_4h;
0x00007144 eors r2, r3 | r2 ^= r3;
0x00007146 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000714a bne 0x71ce | goto label_12;
| }
0x0000714c mov r0, r5 | r0 = r5;
0x0000714e add sp, 8 |
0x00007150 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x00007154 movs r3, 0 | r3 = 0;
0x00007156 add.w r0, r5, 0xc | r0 = r5 + 0xc;
0x0000715a str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0000715c mov r2, sb | r2 = sb;
0x0000715e mov r1, r8 | r1 = r8;
0x00007160 strd r3, r3, [r0, 4] | __asm ("strd r3, r3, [r0, 4]");
0x00007164 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00007166 bl 0xde98 | r0 = fcn_0000de98 (r0, r1, r2);
0x0000716a cmp r0, 1 |
| if (r0 == 1) {
0x0000716c beq 0x70c4 | goto label_2;
| }
0x0000716e ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
| if (r2 != 0) {
0x00007170 cbz r2, 0x717c |
0x00007172 movw r1, 0x13b | r1 = 0x13b;
0x00007176 mov r0, sl | r0 = sl;
0x00007178 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x0000717c ldr r0, [pc, 0x74] |
0x0000717e mov r2, r5 | r2 = r5;
0x00007180 movw r1, 0x13d | r1 = 0x13d;
0x00007184 movs r5, 0 | r5 = 0;
0x00007186 add r0, pc | r0 = 0xe37e;
0x00007188 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000718c b 0x7126 | goto label_3;
| label_11:
0x0000718e ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
| label_10:
0x00007190 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00007192 cmp r3, 0 |
| if (r3 != 0) {
0x00007194 bne 0x7126 | goto label_3;
| }
0x00007196 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
| if (r2 != 0) {
0x00007198 cbz r2, 0x71a8 |
0x0000719a ldr r0, [pc, 0x5c] |
0x0000719c mov.w r1, 0x156 | r1 = 0x156;
0x000071a0 add r0, pc | r0 = 0xe39e;
0x000071a2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000071a6 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
| }
0x000071a8 bl 0xd99c | fcn_0000d99c (r0);
0x000071ac ldr r0, [pc, 0x4c] |
0x000071ae mov r2, r5 | r2 = r5;
0x000071b0 mov.w r1, 0x158 | r1 = 0x158;
0x000071b4 movs r5, 0 | r5 = 0;
0x000071b6 add r0, pc | r0 = 0xe3b6;
0x000071b8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000071ba vqshl.u64 d30, d19, 0x2c | __asm ("vqshl.u64 d30, d19, 0x2c");
| label_8:
0x000071be mov r2, r0 | r2 = r0;
0x000071c0 movw r1, 0x12f | r1 = 0x12f;
0x000071c4 mov r0, sl | r0 = sl;
0x000071c6 movs r5, 0 | r5 = 0;
0x000071c8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000071cc b 0x7126 | goto label_3;
| label_12:
0x000071ce blx 0x348c | fprintf_chk ()
0x000071d2 nop |
0x000071d4 ldrb r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000071d6 movs r2, r0 | r2 = r0;
0x000071d8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000071da movs r0, r0 |
0x000071dc cmp r5, 0xe |
0x000071de movs r1, r0 | r1 = r0;
0x000071e0 cmp r4, 0xba |
0x000071e2 movs r1, r0 | r1 = r0;
0x000071e4 cmp r4, 0x66 |
0x000071e6 movs r1, r0 | r1 = r0;
0x000071e8 cmp r4, 0x1c |
0x000071ea movs r1, r0 | r1 = r0;
0x000071ec cmp r4, 0x58 |
0x000071ee movs r1, r0 | r1 = r0;
0x000071f0 ldrb r4, [r2, 0xd] | r4 = *((r2 + 0xd));
0x000071f2 movs r2, r0 | r2 = r0;
0x000071f4 cmp r3, 0xb6 |
0x000071f6 movs r1, r0 | r1 = r0;
0x000071f8 cmp r3, 0x9c |
0x000071fa movs r1, r0 | r1 = r0;
0x000071fc cmp r3, 0x86 |
0x000071fe movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x7200 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00007200 () | void fcn_00007200 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_4;
| int16_t var_4h_3;
| int16_t var_8h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_0h_2;
| int16_t var_0h_3;
| int16_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00007200 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00007204 sub sp, 0x2c |
0x00007206 str r2, [sp, 0x14] | var_14h_2 = r2;
0x00007208 mov r5, r3 | r5 = r3;
0x0000720a mov r6, r0 | r6 = r0;
0x0000720c mov r4, r1 | r4 = r1;
0x0000720e ldr r2, [pc, 0x140] |
0x00007210 mov.w r1, 0x172 | r1 = 0x172;
0x00007214 ldr r3, [pc, 0x13c] | r3 = *(0x7354);
0x00007216 mov.w fp, 0 |
0x0000721a ldr r0, [pc, 0x13c] |
0x0000721c add r7, sp, 0x20 | r7 += var_20h;
0x0000721e add r2, pc | r2 = 0xe574;
0x00007220 ldr.w sl, [sp, 0x50] | sl = var_0h_2;
0x00007224 ldr r3, [r2, r3] |
0x00007226 mov.w r2, -1 | r2 = -1;
0x0000722a add r0, pc | r0 = 0xe588;
0x0000722c adds r0, 0x8c | r0 += 0x8c;
0x0000722e ldr r3, [r3] | r3 = *(0xe574);
0x00007230 str r3, [sp, 0x24] | var_24h_2 = r3;
0x00007232 mov.w r3, 0 | r3 = 0;
0x00007236 movs r3, 0 | r3 = 0;
0x00007238 strd r2, r3, [sp, 0x1c] | __asm ("strd r2, r3, [sp, 0x1c]");
0x0000723c movs r2, 3 | r2 = 3;
0x0000723e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00007242 and r3, r5, 1 | r3 = r5 & 1;
0x00007246 ldr r5, [r6, 0xc] | r5 = *((r6 + 0xc));
0x00007248 lsls r3, r3, 3 | r3 <<= 3;
0x0000724a adds r5, 1 | r5++;
0x0000724c orn r3, r3, 0x5d | r3 |= 0x5d;
| r3 = ~r3;
0x00007250 lsls r5, r5, 1 | r5 <<= 1;
0x00007252 bfi fp, r3, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r3 & value_0;
| value_0 = ~value_0;
| fp &= value_0;
| fp |= value_1;
0x00007256 b 0x7262 |
| while (r0 != 0) {
0x00007258 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000725a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0000725c blx 0x3258 | r0 = unlink (r0);
0x00007260 add r5, r0 | r5 += r0;
0x00007262 mov r1, r7 | r1 = r7;
0x00007264 mov r0, r6 | r0 = r6;
0x00007266 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x0000726a cmp r0, 0 |
0x0000726c bne 0x7258 |
| }
0x0000726e ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x00007272 cmp r3, 4 |
| if (r3 > 4) {
0x00007274 bgt 0x7340 | goto label_3;
| }
| label_1:
0x00007276 ldr r0, [pc, 0xe4] |
0x00007278 mov r2, r5 | r2 = r5;
0x0000727a movw r1, 0x17d | r1 = 0x17d;
0x0000727e add r0, pc | r0 = 0xe5e0;
0x00007280 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00007284 mov sb, r0 | sb = r0;
0x00007286 str r0, [sp, 0x18] | var_18h_2 = r0;
0x00007288 cmp r0, 0 |
| if (r0 == 0) {
0x0000728a beq 0x72f8 | goto label_4;
| }
0x0000728c add.w r8, sp, 0x18 | r8 += var_18h_2;
0x00007290 ldr r1, [sp, 0x14] | r1 = var_14h_2;
0x00007292 mov r0, r8 | r0 = r8;
0x00007294 bl 0x5ed4 | fcn_00005ed4 (r0, r1, r2);
0x00007298 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x0000729c cmp r3, 4 |
| if (r3 > 4) {
0x0000729e bgt 0x7336 | goto label_5;
| }
| label_0:
0x000072a0 movs r3, 0 | r3 = 0;
0x000072a2 str r3, [sp, 0x20] | var_20h = r3;
0x000072a4 b 0x72b0 |
| while (r0 != 0) {
0x000072a6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000072a8 mov r0, r8 | r0 = r8;
0x000072aa ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x000072ac bl 0x5f04 | fcn_00005f04 (r0, r1);
0x000072b0 mov r1, r7 | r1 = r7;
0x000072b2 mov r0, r6 | r0 = r6;
0x000072b4 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x000072b8 mov r4, r0 | r4 = r0;
0x000072ba cmp r0, 0 |
0x000072bc bne 0x72a6 |
| }
0x000072be ldr.w r2, [sl, 0x9c] | r2 = *((sl + 0x9c));
0x000072c2 mov r3, r5 | r3 = r5;
0x000072c4 mov r1, fp | r1 = fp;
0x000072c6 add.w r0, sl, 0x1c | r0 = sl + 0x1c;
0x000072ca str r2, [sp, 4] | var_4h_3 = r2;
0x000072cc movs r2, 1 | r2 = 1;
0x000072ce str r2, [sp] | *(sp) = r2;
0x000072d0 mov r2, sb | r2 = sb;
0x000072d2 bl 0x583c | fcn_0000583c (r0, r1, r2, r3, r4, r5, r6);
0x000072d6 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000072d8 mov r2, r4 | r2 = r4;
0x000072da str r0, [sp, 8] | var_8h_2 = r0;
0x000072dc str r0, [sp, 0x1c] | var_1ch_2 = r0;
0x000072de movs r0, 4 | r0 = 4;
0x000072e0 str r3, [sp, 4] | var_4h_3 = r3;
0x000072e2 ldr.w r1, [sl] | r1 = *(sl);
0x000072e6 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000072ea str r1, [sp] | *(sp) = r1;
0x000072ec movs r1, 0x19 | r1 = 0x19;
0x000072ee bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000072f2 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x000072f4 adds r3, 0x16 | r3 += 0x16;
0x000072f6 bne 0x7326 |
| while (1) {
| label_4:
0x000072f8 ldr r0, [pc, 0x64] |
0x000072fa movs r3, 3 | r3 = 3;
0x000072fc add r2, sp, 0x1c | r2 += var_1ch_2;
0x000072fe mov.w r1, 0x18e | r1 = 0x18e;
0x00007302 add r0, pc | r0 = 0xe666;
0x00007304 adds r0, 0x8c | r0 += 0x8c;
0x00007306 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000730a ldr r2, [pc, 0x58] |
0x0000730c ldr r3, [pc, 0x44] | r3 = *(0x7354);
0x0000730e ldr r0, [sp, 0x1c] | r0 = var_1ch_2;
0x00007310 add r2, pc | r2 = 0xe67a;
0x00007312 ldr r3, [r2, r3] | r3 = *(0xe67a);
0x00007314 ldr r2, [r3] | r2 = *(0xe67a);
0x00007316 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x00007318 eors r2, r3 | r2 ^= r3;
0x0000731a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000731e bne 0x734a | goto label_6;
| }
0x00007320 add sp, 0x2c |
0x00007322 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00007326 ldr r0, [pc, 0x40] |
0x00007328 mov r2, sb | r2 = sb;
0x0000732a mov.w r1, 0x18c | r1 = 0x18c;
0x0000732e add r0, pc | r0 = 0xe69c;
0x00007330 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00007334 b 0x72f8 |
| }
| label_5:
0x00007336 mov r1, r4 | r1 = r4;
0x00007338 mov r0, r8 | r0 = r8;
0x0000733a bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x0000733e b 0x72a0 | goto label_0;
| label_3:
0x00007340 mov r0, r4 | r0 = r4;
0x00007342 bl 0xda6c | r0 = fcn_0000da6c (r0);
0x00007346 add r5, r0 | r5 += r0;
0x00007348 b 0x7276 | goto label_1;
| label_6:
0x0000734a blx 0x348c | fprintf_chk ()
0x0000734e nop |
0x00007350 ldrb r2, [r6, 9] | r2 = *((r6 + 9));
0x00007352 movs r2, r0 | r2 = r0;
0x00007354 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00007356 movs r0, r0 |
0x00007358 cmp r3, 0x5e |
0x0000735a movs r1, r0 | r1 = r0;
0x0000735c cmp r2, 0xbe |
0x0000735e movs r1, r0 | r1 = r0;
0x00007360 cmp r2, 0x86 |
0x00007362 movs r1, r0 | r1 = r0;
0x00007364 ldrb r0, [r0, 6] | r0 = *((r0 + 6));
0x00007366 movs r2, r0 | r2 = r0;
0x00007368 cmp r2, 0xe |
0x0000736a movs r1, r0 | r1 = r0;
0x0000736c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000736e blx lr | lr (r0, r1, r2, r3);
0x00007370 mov r6, r2 | r6 = r2;
0x00007372 ldr r2, [pc, 0x168] |
0x00007374 mov r7, r3 | r7 = r3;
0x00007376 mov r5, r0 | r5 = r0;
0x00007378 sub sp, 8 |
0x0000737a ldr r3, [pc, 0x164] | r3 = *(0x74e2);
0x0000737c mov sb, r1 | sb = r1;
0x0000737e ldr r0, [pc, 0x164] |
0x00007380 add r2, pc | r2 = 0xe862;
0x00007382 ldr.w r8, [pc, 0x164] |
0x00007386 movw r1, 0x1a1 | r1 = 0x1a1;
0x0000738a ldr r3, [r2, r3] |
0x0000738c movs r2, 3 | r2 = 3;
0x0000738e add r0, pc | r0 = 0xe878;
0x00007390 add.w sl, r6, r7 | sl = r6 + r7;
0x00007394 adds r0, 0xa8 | r0 += 0xa8;
0x00007396 add r8, pc | r8 = 0xe884;
0x00007398 ldr r3, [r3] | r3 = *(0xe862);
0x0000739a str r3, [sp, 4] | var_4h_2 = r3;
0x0000739c mov.w r3, 0 | r3 = 0;
0x000073a0 str r6, [sp] | *(sp) = r6;
0x000073a2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000073a6 movs r2, 0x20 | r2 = 0x20;
0x000073a8 mov.w r1, 0x1a2 | r1 = 0x1a2;
0x000073ac mov r0, r8 | r0 = r8;
0x000073ae bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000073b2 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x000073b4 cbz r0, 0x73da |
0x000073b6 ldr r3, [sp] | r3 = *(sp);
0x000073b8 strb.w sb, [r0] | *(r0) = sb;
0x000073bc str r5, [r0, 8] | *((r0 + 8)) = r5;
0x000073be sub.w r3, sl, r3 | r3 = sl - r3;
0x000073c2 cmp r3, 1 |
| if (r3 <= 1) {
0x000073c4 ble 0x749a | goto label_7;
| }
0x000073c6 mov sb, sp | sb = sp;
0x000073c8 mov r0, sb | r0 = sb;
0x000073ca bl 0x5e60 | fcn_00005e60 (r0);
0x000073ce cmp r5, 4 |
0x000073d0 mov.w r3, 0 | r3 = 0;
0x000073d2 lsls r0, r0, 0xc | r0 <<= 0xc;
0x000073d4 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x000073d6 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| if (r0 > r0) {
0x000073d8 bgt 0x7408 | goto label_8;
| }
| }
| label_2:
0x000073da ldr r0, [pc, 0x110] |
0x000073dc movs r3, 3 | r3 = 3;
0x000073de movs r2, 0 | r2 = 0;
0x000073e0 movw r1, 0x1d7 | r1 = 0x1d7;
0x000073e4 add r0, pc | r0 = 0xe8d6;
0x000073e6 adds r0, 0xa8 | r0 += 0xa8;
0x000073e8 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000073ec ldr r2, [pc, 0x100] |
0x000073ee ldr r3, [pc, 0xf0] | r3 = *(0x74e2);
0x000073f0 add r2, pc | r2 = 0xe8e4;
0x000073f2 ldr r3, [r2, r3] | r3 = *(0xe8e4);
0x000073f4 ldr r2, [r3] | r2 = *(0xe8e4);
0x000073f6 ldr r3, [sp, 4] | r3 = var_4h_2;
0x000073f8 eors r2, r3 | r2 ^= r3;
0x000073fa mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000073fe bne 0x74d8 | goto label_9;
| }
0x00007400 mov r0, r4 | r0 = r4;
0x00007402 add sp, 8 |
0x00007404 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_8:
0x00007408 mov r2, sl | r2 = sl;
0x0000740a add.w r0, r4, 0xc | r0 = r4 + 0xc;
0x0000740e mov r1, sb | r1 = sb;
0x00007410 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00007412 strd r3, r3, [r4, 0x10] | __asm ("strd r3, r3, [r4, 0x10]");
0x00007416 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00007418 bl 0xde98 | r0 = fcn_0000de98 (r0, r1, r2);
0x0000741c cmp r0, 1 |
| if (r0 != 1) {
0x0000741e bne 0x747a | goto label_10;
| }
0x00007420 bl 0xd5ac | fcn_0000d5ac ();
0x00007424 ldr r3, [sp] | r3 = *(sp);
0x00007426 str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x00007428 subs r3, r3, r6 | r3 -= r6;
0x0000742a cmp r7, r3 |
| if (r7 > r3) {
0x0000742c bhi 0x744a | goto label_11;
| }
0x0000742e b 0x74ac | goto label_12;
| do {
0x00007430 mov r0, sb | r0 = sb;
0x00007432 bl 0x5ebc | fcn_00005ebc (r0);
0x00007436 movs r2, 4 | r2 = 4;
0x00007438 str r0, [r5] | *(r5) = r0;
0x0000743a mov r1, r5 | r1 = r5;
0x0000743c ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0000743e bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00007442 ldr r3, [sp] | r3 = *(sp);
0x00007444 subs r3, r3, r6 | r3 -= r6;
0x00007446 cmp r3, r7 |
| if (r3 >= r7) {
0x00007448 bhs 0x74aa | goto label_13;
| }
| label_11:
0x0000744a movs r2, 4 | r2 = 4;
0x0000744c movw r1, 0x1bf | r1 = 0x1bf;
0x00007450 mov r0, r8 | r0 = r8;
0x00007452 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00007456 mov r5, r0 | r5 = r0;
0x00007458 cmp r0, 0 |
0x0000745a bne 0x7430 |
| } while (r0 != 0);
0x0000745c ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
| if (r2 != 0) {
0x0000745e cbz r2, 0x746a |
0x00007460 movw r1, 0x1c3 | r1 = 0x1c3;
0x00007464 mov r0, r8 | r0 = r8;
0x00007466 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x0000746a ldr r0, [pc, 0x88] |
0x0000746c mov r2, r4 | r2 = r4;
0x0000746e movw r1, 0x1c5 | r1 = 0x1c5;
0x00007470 asrs r5, r0, 7 | r5 = r0 >> 7;
0x00007472 add r0, pc | r0 = 0xe96c;
0x00007474 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00007476 cdp2 p0, 8, c14, c14, c13, 0 | __asm ("cdp2 p0, 8, c14, c14, c13, 0");
0x00007478 b 0x7496 | goto label_14;
| label_10:
0x0000747a ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
| if (r2 != 0) {
0x0000747c cbz r2, 0x7488 |
0x0000747e movw r1, 0x1b5 | r1 = 0x1b5;
0x00007482 mov r0, r8 | r0 = r8;
0x00007484 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x00007488 ldr r0, [pc, 0x6c] |
0x0000748a mov r2, r4 | r2 = r4;
0x0000748c movw r1, 0x1b7 | r1 = 0x1b7;
0x00007490 add r0, pc | r0 = 0xe98c;
0x00007492 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_14:
0x00007496 movs r4, 0 | r4 = 0;
0x00007498 b 0x73da | goto label_2;
| label_7:
0x0000749a mov r2, r0 | r2 = r0;
0x0000749c mov.w r1, 0x1a8 | r1 = 0x1a8;
0x000074a0 mov r0, r8 | r0 = r8;
0x000074a2 movs r4, 0 | r4 = 0;
0x000074a4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000074a8 b 0x73da | goto label_2;
| label_13:
0x000074aa ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
| label_12:
0x000074ac ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x000074ae cmp r3, 0 |
| if (r3 != 0) {
0x000074b0 bne 0x73da | goto label_2;
| }
0x000074b2 bl 0xd99c | fcn_0000d99c (r0);
0x000074b6 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
| if (r2 != 0) {
0x000074b8 cbz r2, 0x74c6 |
0x000074ba ldr r0, [pc, 0x40] |
0x000074bc mov.w r1, 0x1d0 | r1 = 0x1d0;
0x000074c0 add r0, pc | r0 = 0xe9c2;
0x000074c2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x000074c6 ldr r0, [pc, 0x38] |
0x000074c8 mov r2, r4 | r2 = r4;
0x000074ca mov.w r1, 0x1d2 | r1 = 0x1d2;
0x000074ce movs r4, 0 | r4 = 0;
0x000074d0 add r0, pc | r0 = 0xe9d6;
0x000074d2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000074d6 b 0x73da | goto label_2;
| label_9:
0x000074d8 blx 0x348c | fprintf_chk ()
0x000074dc ldrb r0, [r2, 4] | r0 = *((r2 + 4));
0x000074de movs r2, r0 | r2 = r0;
0x000074e0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000074e2 movs r0, r0 |
0x000074e4 cmp r1, 0xfa |
0x000074e6 movs r1, r0 | r1 = r0;
0x000074e8 cmp r1, 0xa6 |
0x000074ea movs r1, r0 | r1 = r0;
0x000074ec cmp r1, 0xa4 |
0x000074ee movs r1, r0 | r1 = r0;
0x000074f0 ldrb r0, [r4, 2] | r0 = *((r4 + 2));
0x000074f2 movs r2, r0 | r2 = r0;
0x000074f4 cmp r0, 0xca |
0x000074f6 movs r1, r0 | r1 = r0;
0x000074f8 cmp r0, 0xac |
0x000074fa movs r1, r0 | r1 = r0;
0x000074fc cmp r0, 0x7c |
0x000074fe movs r1, r0 | r1 = r0;
0x00007500 cmp r0, 0x6c |
0x00007502 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x7a94 */
| #include <stdint.h>
|
; (fcn) fcn.00007a94 () | void fcn_00007a94 (int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| label_4:
0x00007a94 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00007a98 mov r6, r2 | r6 = r2;
0x00007a9a ldr r2, [pc, 0xe8] |
0x00007a9c mov ip, r1 |
0x00007a9e sub sp, 0x20 |
0x00007aa0 mov r5, r0 | r5 = r0;
0x00007aa2 ldr r3, [pc, 0xe4] | r3 = *(0x7b8a);
0x00007aa4 add r2, pc | r2 = 0xf62e;
0x00007aa6 ldrd r7, r8, [r1, 0xc] | __asm ("ldrd r7, r8, [r1, 0xc]");
0x00007aaa ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00007aac ldr r3, [r2, r3] |
0x00007aae ldr r3, [r3] | r3 = *(0xf62e);
0x00007ab0 str r3, [sp, 0x1c] | var_1ch = r3;
0x00007ab2 mov.w r3, 0 | r3 = 0;
0x00007ab6 cmp r1, 0 |
| if (r1 == 0) {
0x00007ab8 beq 0x7b74 | goto label_5;
| }
0x00007aba ldr.w r3, [ip, 8] | r3 = *((ip + 8));
0x00007abe cmp r3, 0 |
| if (r3 == 0) {
0x00007ac0 beq 0x7b4a | goto label_6;
| }
| do {
0x00007ac2 mov r4, r3 | r4 = r3;
0x00007ac4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00007ac6 cmp r3, 0 |
0x00007ac8 bne 0x7ac2 |
| } while (r3 != 0);
0x00007aca ldr r1, [r4, 8] | r1 = *((r4 + 8));
| if (r1 != 0) {
0x00007acc cbz r1, 0x7ad2 |
| label_0:
0x00007ace ldr r3, [r4] | r3 = *(r4);
0x00007ad0 str r3, [r1] | *(r1) = r3;
| }
| label_3:
0x00007ad2 ldr r2, [r4] | r2 = *(r4);
0x00007ad4 cmp r2, 0 |
| if (r2 == 0) {
0x00007ad6 beq 0x7b6e | goto label_7;
| }
0x00007ad8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00007ada cmp r3, r4 |
0x00007adc ite eq |
| if (r3 != r4) {
0x00007ade streq r1, [r2, 4] | *((r2 + 4)) = r1;
| }
| if (r3 == r4) {
0x00007ae0 strne r1, [r2, 8] | *((r2 + 8)) = r1;
| }
| label_2:
0x00007ae2 cmp ip, r4 |
0x00007ae4 itttt ne |
| if (ip == r4) {
0x00007ae6 ldrne r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| }
| if (ip == r4) {
0x00007ae8 strne r3, [ip, 0xc] | *((ip + 0xc)) = r3;
| }
| if (ip == r4) {
0x00007aec ldrne r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| }
| if (ip != r4) {
0x00007aee str.w r3, [ip, 0x10] | __asm ("str.w r3, [ip, 0x10]");
| }
0x00007af2 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00007af4 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 >= r3) {
0x00007af6 bmi 0x7b02 |
| if (r1 == 0) {
0x00007af8 cbz r1, 0x7b4e | goto label_8;
| }
0x00007afa mov r2, r6 | r2 = r6;
0x00007afc mov r0, r5 | r0 = r5;
0x00007afe bl 0x7a38 | fcn_00007a38 (r0, r1, r2);
| }
| label_1:
0x00007b02 ldrb r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00007b04 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00007b06 bpl 0x7b42 | goto label_9;
| }
0x00007b08 ldr r0, [pc, 0x80] |
0x00007b0a mov r2, r4 | r2 = r4;
0x00007b0c movw r1, 0x1d7 | r1 = 0x1d7;
0x00007b10 add r0, pc | r0 = 0xf6a0;
0x00007b12 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| do {
| if (r6 == 0) {
0x00007b16 cbnz r6, 0x7b26 |
0x00007b18 ldrd r3, r2, [r5, 0x14] | __asm ("ldrd r3, r2, [r5, 0x14]");
0x00007b1c sub.w r2, r2, r8 | r2 -= r8;
0x00007b20 subs r3, 1 | r3--;
0x00007b22 strd r3, r2, [r5, 0x14] | __asm ("strd r3, r2, [r5, 0x14]");
| }
0x00007b26 ldr r2, [pc, 0x68] |
0x00007b28 ldr r3, [pc, 0x5c] | r3 = *(0x7b88);
0x00007b2a add r2, pc | r2 = 0xf6c0;
0x00007b2c ldr r3, [r2, r3] | r3 = *(0xf6c0);
0x00007b2e ldr r2, [r3] | r2 = *(0xf6c0);
0x00007b30 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00007b32 eors r2, r3 | r2 ^= r3;
0x00007b34 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00007b38 bne 0x7b7e | goto label_10;
| }
0x00007b3a mov r0, r7 | r0 = r7;
0x00007b3c add sp, 0x20 |
0x00007b3e pop.w {r4, r5, r6, r7, r8, pc} |
| label_9:
0x00007b42 mov r0, r4 | r0 = r4;
0x00007b44 blx 0x31a8 | fcn_000031a8 ();
0x00007b48 b 0x7b16 |
| } while (1);
| label_6:
0x00007b4a mov r4, ip | r4 = ip;
0x00007b4c b 0x7ace | goto label_0;
| label_8:
0x00007b4e cmp r2, 0 |
| if (r2 == 0) {
0x00007b50 beq 0x7b02 | goto label_1;
| }
0x00007b52 strd r1, r1, [sp, 4] | __asm ("strd r1, r1, [sp, 4]");
0x00007b56 mov r2, r6 | r2 = r6;
0x00007b58 strd r1, r1, [sp, 0xc] | __asm ("strd r1, r1, [sp, 0xc]");
0x00007b5c mov r0, r5 | r0 = r5;
0x00007b5e strd r1, r1, [sp, 0x14] | __asm ("strd r1, r1, [sp, 0x14]");
0x00007b62 add r1, sp, 4 | r1 += var_4h;
0x00007b64 ldr r3, [r4] | r3 = *(r4);
0x00007b66 str r3, [sp, 4] | var_4h = r3;
0x00007b68 bl 0x7a38 | fcn_00007a38 (r0, r1, r2);
0x00007b6c b 0x7b02 | goto label_1;
| label_7:
0x00007b6e str.w r1, [r5, r6, lsl 3] | __asm ("str.w r1, [r5, r6, lsl 3]");
0x00007b72 b 0x7ae2 | goto label_2;
| label_5:
0x00007b74 mov r4, ip | r4 = ip;
0x00007b76 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00007b78 cmp r1, 0 |
| if (r1 != 0) {
0x00007b7a bne 0x7ace | goto label_0;
| }
0x00007b7c b 0x7ad2 | goto label_3;
| label_10:
0x00007b7e blx 0x348c | fprintf_chk ()
0x00007b82 nop |
0x00007b84 strb r4, [r5, 7] | *((r5 + 7)) = r4;
0x00007b86 movs r2, r0 | r2 = r0;
0x00007b88 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00007b8a movs r0, r0 |
0x00007b8c cmp r1, 0xfc |
0x00007b8e movs r1, r0 | r1 = r0;
0x00007b90 strb r6, [r4, 5] | *((r4 + 5)) = r6;
0x00007b92 movs r2, r0 | r2 = r0;
0x00007b94 push.w {r4, r5, r6, r7, r8, lr} |
0x00007b98 add.w r8, r0, r2, lsl 3 | r8 = r0 + (r2 << 3);
0x00007b9c ldr.w r4, [r0, r2, lsl 3] | offset_0 = r2 << 3;
| r4 = *((r0 + offset_0));
| if (r4 == 0) {
0x00007ba0 cbz r4, 0x7bd4 | goto label_11;
| }
0x00007ba2 mov r6, r0 | r6 = r0;
0x00007ba4 mov r7, r2 | r7 = r2;
0x00007ba6 mov r5, r1 | r5 = r1;
0x00007ba8 b 0x7bae |
| while (r0 != 0) {
0x00007baa ldr r4, [r3, 4] | r4 = *((r3 + 4));
| if (r4 == 0) {
0x00007bac cbz r4, 0x7bd4 | goto label_11;
| }
0x00007bae ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00007bb2 movs r2, 1 | r2 = 1;
0x00007bb4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00007bb6 mov r1, r5 | r1 = r5;
0x00007bb8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00007bba cmp r0, 0 |
0x00007bbc ite gt |
| if (r0 <= 0) {
0x00007bbe movgt r3, 1 | r3 = 1;
| }
| if (r0 > 0) {
0x00007bc0 movle r3, 0 | r3 = 0;
| }
0x00007bc2 add.w r3, r4, r3, lsl 2 | r3 = r4 + (r3 << 2);
0x00007bc6 bne 0x7baa |
| }
0x00007bc8 mov r2, r7 | r2 = r7;
0x00007bca mov r1, r4 | r1 = r4;
0x00007bcc mov r0, r6 | r0 = r6;
0x00007bce pop.w {r4, r5, r6, r7, r8, lr} |
0x00007bd2 b 0x7a94 | goto label_4;
| label_11:
0x00007bd4 movs r0, 0 | r0 = 0;
0x00007bd6 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-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x7d10 */
| #include <stdint.h>
|
; (fcn) fcn.00007d10 () | void fcn_00007d10 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x00007d10 push {r4, r5, lr} |
0x00007d12 mov r5, r0 | r5 = r0;
0x00007d14 ldr r0, [pc, 0x60] |
0x00007d16 sub sp, 0xc |
0x00007d18 movs r2, 3 | r2 = 3;
0x00007d1a movs r1, 0x56 | r1 = 0x56;
0x00007d1c ldr r3, [pc, 0x5c] | r3 = *(0x7d7c);
0x00007d1e ldr r4, [pc, 0x60] |
0x00007d20 add r0, pc | r0 = 0xfa9c;
0x00007d22 ldr r3, [r0, r3] |
0x00007d24 add r4, pc | r4 = 0xfaaa;
0x00007d26 mov r0, r4 | r0 = r4;
0x00007d28 ldr r3, [r3] | r3 = *(0xfa9c);
0x00007d2a str r3, [sp, 4] | var_4h = r3;
0x00007d2c mov.w r3, 0 | r3 = 0;
0x00007d30 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00007d34 movs r2, 0 | r2 = 0;
0x00007d36 movs r1, 3 | r1 = 3;
0x00007d38 mov r0, r5 | r0 = r5;
0x00007d3a blx 0x3680 | fcn_00003680 ();
0x00007d3e mov.w r2, 0x800 | r2 = 0x800;
0x00007d42 movs r1, 4 | r1 = 4;
0x00007d44 mov r0, r5 | r0 = r5;
0x00007d46 blx 0x3680 | fcn_00003680 ();
0x00007d4a movs r3, 3 | r3 = 3;
0x00007d4c mov r5, r0 | r5 = r0;
0x00007d4e mov r2, sp | r2 = sp;
0x00007d50 mov r0, r4 | r0 = r4;
0x00007d52 movs r1, 0x5b | r1 = 0x5b;
0x00007d54 str r5, [sp] | *(sp) = r5;
0x00007d56 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00007d5a ldr r2, [pc, 0x28] |
0x00007d5c ldr r3, [pc, 0x1c] | r3 = *(0x7d7c);
0x00007d5e ldr r0, [sp] | r0 = *(sp);
0x00007d60 add r2, pc | r2 = 0xfaea;
0x00007d62 ldr r3, [r2, r3] | r3 = *(0xfaea);
0x00007d64 ldr r2, [r3] | r2 = *(0xfaea);
0x00007d66 ldr r3, [sp, 4] | r3 = var_4h;
0x00007d68 eors r2, r3 | r2 ^= r3;
0x00007d6a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00007d6e bne 0x7d74 |
0x00007d70 add sp, 0xc |
0x00007d72 pop {r4, r5, pc} |
| }
0x00007d74 blx 0x348c | fprintf_chk ()
0x00007d78 ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x00007d7a movs r2, r0 | r2 = r0;
0x00007d7c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00007d7e movs r0, r0 |
0x00007d80 cmp r4, 8 |
0x00007d82 movs r1, r0 | r1 = r0;
0x00007d84 ldr r0, [r6, 0x70] | r0 = *((r6 + 0x70));
0x00007d86 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x7eb8 */
| #include <stdint.h>
|
; (fcn) fcn.00007eb8 () | void fcn_00007eb8 (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| if (? < ?) {
0x00007eb8 andhs r4, r3, 0x12400 | r4 = r3 & 0x12400;
| }
0x00007ebc push {r4, r5, r6, lr} |
0x00007ebe sub sp, 0x10 |
0x00007ec0 ldr.w ip, [pc, 0x120] | ip = *(0x00007fe4);
0x00007ec4 movs r5, 0 | r5 = 0;
0x00007ec6 add r3, pc | r3 += pc;
0x00007ec8 movs r1, 0xae | r1 = 0xae;
0x00007eca str r0, [sp, 4] | var_4h = r0;
0x00007ecc add.w r0, r3, 0x44 | r0 = r3 + 0x44;
0x00007ed0 ldr r3, [pc, 0x114] |
0x00007ed2 add ip, pc |
0x00007ed4 ldr r4, [pc, 0x114] |
0x00007ed6 ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00007eda add r4, pc | r4 = 0xfeca;
0x00007edc ldr r3, [r3] | r3 = *(0x7fe8);
0x00007ede str r3, [sp, 0xc] | var_ch = r3;
0x00007ee0 mov.w r3, 0 | r3 = 0;
0x00007ee4 str r5, [sp, 8] | var_8h = r5;
0x00007ee6 ldr r5, [pc, 0x108] |
0x00007ee8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00007eec ldr r2, [pc, 0x104] | r2 = *(0x7ff4);
0x00007eee add r1, sp, 4 | r1 += var_4h;
0x00007ef0 add r5, pc | r5 = 0xfee6;
0x00007ef2 mov r3, r4 | r3 = r4;
0x00007ef4 ldr.w r0, [r5, 0x104] | r0 = *(0xffea);
0x00007ef8 ldr r2, [r4, r2] | r2 = *(0xfeca);
0x00007efa bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
| if (r0 == 0) {
0x00007efe cbz r0, 0x7f3a | goto label_1;
| }
0x00007f00 ldr r2, [pc, 0xf4] |
0x00007f02 mov.w r1, -1 | r1 = -1;
0x00007f06 ldr r3, [sp, 4] | r3 = var_4h;
0x00007f08 movs r0, 5 | r0 = 5;
0x00007f0a add r2, pc | r2 = 0xff06;
0x00007f0c bl 0x9a28 | fcn_00009a28 (r0, r1);
| do {
| label_0:
0x00007f10 ldr r0, [pc, 0xe8] |
0x00007f12 movs r3, 3 | r3 = 3;
0x00007f14 add r2, sp, 8 | r2 += var_8h;
0x00007f16 movs r1, 0xd1 | r1 = 0xd1;
0x00007f18 add r0, pc | r0 = 0xff18;
0x00007f1a adds r0, 0x44 | r0 += 0x44;
0x00007f1c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00007f20 ldr r2, [pc, 0xdc] |
0x00007f22 ldr r3, [pc, 0xc4] | r3 = *(0x7fea);
0x00007f24 ldr r0, [sp, 8] | r0 = var_8h;
0x00007f26 add r2, pc | r2 = 0xff2a;
0x00007f28 ldr r3, [r2, r3] | r3 = *(0xff2a);
0x00007f2a ldr r2, [r3] | r2 = *(0xff2a);
0x00007f2c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00007f2e eors r2, r3 | r2 ^= r3;
0x00007f30 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00007f34 bne 0x7fdc | goto label_2;
| }
0x00007f36 add sp, 0x10 |
0x00007f38 pop {r4, r5, r6, pc} |
| label_1:
0x00007f3a ldr.w r3, [r5, 0x104] | r3 = *((r5 + 0x104));
0x00007f3e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00007f40 cmp.w r3, 0x400 |
| if (r3 < 0x400) {
0x00007f44 blt 0x7f60 | goto label_3;
| }
0x00007f46 ldr r2, [pc, 0xbc] |
0x00007f48 mov.w r3, 0x400 | r3 = 0x400;
0x00007f4c mov.w r1, -1 | r1 = -1;
0x00007f50 movs r0, 5 | r0 = 5;
0x00007f52 add r2, pc | r2 = 0xff5c;
0x00007f54 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00007f58 mov.w r3, -1 | r3 = -1;
0x00007f5c str r3, [sp, 8] | var_8h = r3;
0x00007f5e b 0x7f10 |
| } while (1);
| label_3:
0x00007f60 ldr r6, [pc, 0xa4] |
0x00007f62 movs r2, 4 | r2 = 4;
0x00007f64 movs r1, 0xb8 | r1 = 0xb8;
0x00007f66 add r6, pc | r6 = 0xff72;
0x00007f68 mov r0, r6 | r0 = r6;
0x00007f6a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00007f6e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00007f70 cbz r0, 0x7fd4 | goto label_4;
| }
0x00007f72 ldr r3, [sp, 4] | r3 = var_4h;
0x00007f74 movs r2, 4 | r2 = 4;
0x00007f76 mov r1, r4 | r1 = r4;
0x00007f78 str r3, [r0] | *(r0) = r3;
0x00007f7a ldr.w r0, [r5, 0x104] | r0 = *((r5 + 0x104));
0x00007f7e bl 0xd5f8 | r0 = fcn_0000d5f8 (r0, r1, r2);
| if (r0 == 0) {
0x00007f82 cbz r0, 0x7fca | goto label_5;
| }
0x00007f84 ldr r0, [sp, 4] | r0 = var_4h;
0x00007f86 blx 0x3760 | r0 = fcn_00003760 ();
0x00007f8a mov r2, r0 | r2 = r0;
0x00007f8c ldr r0, [sp, 4] | r0 = var_4h;
0x00007f8e adds r2, 0x20 | r2 += 0x20;
0x00007f90 movs r3, 1 | r3 = 1;
0x00007f92 ldr.w r1, [r5, r2, lsl 2] | offset_0 = r2 << 2;
| r1 = *((r5 + offset_0));
0x00007f96 and r4, r0, 0x1f | r4 = r0 & 0x1f;
0x00007f9a lsls r3, r4 | r3 <<= r4;
0x00007f9c ldr.w r4, [r5, 0x100] | r4 = *((r5 + 0x100));
0x00007fa0 orrs r3, r1 | r3 |= r1;
0x00007fa2 adds r1, r0, 1 | r1 = r0 + 1;
0x00007fa4 cmp r1, r4 |
0x00007fa6 str.w r3, [r5, r2, lsl 2] | __asm ("str.w r3, [r5, r2, lsl 2]");
0x00007faa it lt |
| if (r1 >= r4) {
0x00007fac movlt r1, r4 | r1 = r4;
| }
0x00007fae str.w r1, [r5, 0x100] | __asm ("str.w r1, [r5, 0x100]");
0x00007fb2 bl 0x7d10 | r0 = fcn_00007d10 (r0);
0x00007fb6 adds r3, r0, 1 | r3 = r0 + 1;
0x00007fb8 str r0, [sp, 8] | var_8h = r0;
| if (r3 != r0) {
0x00007fba bne 0x7f10 | goto label_0;
| }
0x00007fbc ldr r2, [pc, 0x4c] |
0x00007fbe mov r1, r0 | r1 = r0;
0x00007fc0 movs r0, 5 | r0 = 5;
0x00007fc2 add r2, pc | r2 = 0xffd2;
0x00007fc4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00007fc8 b 0x7f10 | goto label_0;
| label_5:
0x00007fca mov r2, r4 | r2 = r4;
0x00007fcc movs r1, 0xc2 | r1 = 0xc2;
0x00007fce mov r0, r6 | r0 = r6;
0x00007fd0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_4:
0x00007fd4 mvn r3, 0x62 | r3 = ~0x62;
0x00007fd8 str r3, [sp, 8] | var_8h = r3;
0x00007fda b 0x7f10 | goto label_0;
| label_2:
0x00007fdc blx 0x348c | fprintf_chk ()
0x00007fe0 cmp r2, 0x66 |
0x00007fe2 movs r1, r0 | r1 = r0;
0x00007fe4 ldr r6, [r7, 0x58] | r6 = *((r7 + 0x58));
0x00007fe6 movs r2, r0 | r2 = r0;
0x00007fe8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00007fea movs r0, r0 |
0x00007fec ldr r6, [r6, 0x58] | r6 = *((r6 + 0x58));
0x00007fee movs r2, r0 | r2 = r0;
0x00007ff0 strb r4, [r5, 0xc] | *((r5 + 0xc)) = r4;
0x00007ff2 movs r2, r0 | r2 = r0;
0x00007ff4 lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x00007ff6 movs r0, r0 |
0x00007ff8 movs r6, 0xe2 | r6 = 0xe2;
0x00007ffa movs r1, r0 | r1 = r0;
0x00007ffc cmp r2, 0x14 |
0x00007ffe movs r1, r0 | r1 = r0;
0x00008000 ldr r2, [r5, 0x54] | r2 = *((r5 + 0x54));
0x00008002 movs r2, r0 | r2 = r0;
0x00008004 movs r6, 0x22 | r6 = 0x22;
0x00008006 movs r1, r0 | r1 = r0;
0x00008008 movs r6, 0x32 | r6 = 0x32;
0x0000800a movs r1, r0 | r1 = r0;
0x0000800c movs r6, 0xe | r6 = 0xe;
0x0000800e movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8010 */
| #include <stdint.h>
|
; (fcn) fcn.00008010 () | void fcn_00008010 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h_2;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00008010 push {r2, r3, r4, r5, r8, sb, fp, lr} |
0x00008014 mvns r0, r6 | r0 = ~r6;
0x00008016 sub sp, 0x1c |
0x00008018 ldr r4, [pc, 0xec] |
0x0000801a mov r6, r1 | r6 = r1;
0x0000801c add r3, pc | r3 += pc;
0x0000801e movs r1, 0xe2 | r1 = 0xe2;
0x00008020 str r0, [sp, 4] | var_4h_2 = r0;
0x00008022 add.w r0, r3, 0x58 | r0 = r3 + 0x58;
0x00008026 ldr r3, [pc, 0xe4] | r3 = *(0x810e);
0x00008028 add r4, pc | r4 = 0x10134;
0x0000802a mov r5, r2 | r5 = r2;
0x0000802c movs r2, 3 | r2 = 3;
0x0000802e ldr.w sb, [pc, 0xe0] | sb = *(0x00008110);
0x00008032 add.w r8, sp, 4 | r8 += var_4h_2;
0x00008036 ldr r3, [r4, r3] |
0x00008038 movs r4, 1 | r4 = 1;
0x0000803a add sb, pc | sb += pc;
0x0000803c ldr r3, [r3] | r3 = *(0x10134);
0x0000803e str r3, [sp, 0x14] | var_14h = r3;
0x00008040 mov.w r3, 0 | r3 = 0;
0x00008044 str r4, [sp, 0xc] | var_ch_2 = r4;
0x00008046 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000804a ldr r2, [pc, 0xc8] |
0x0000804c mov r1, r8 | r1 = r8;
0x0000804e ldr r3, [pc, 0xc8] | r3 = *(0x811a);
0x00008050 ldr.w r0, [sb, 0x10c] | r0 = *((sb + 0x10c));
0x00008054 add r2, pc | r2 = 0x1016e;
0x00008056 ldr r7, [r2, r3] | r7 = *(0x1016e);
0x00008058 mov r2, r7 | r2 = r7;
0x0000805a bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x0000805e cmp r0, 0 |
| if (r0 == 0) {
0x00008060 beq 0x80fc | goto label_3;
| }
0x00008062 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00008064 blx 0x3760 | fcn_00003760 ();
0x00008068 ldr.w r3, [r5, r0, lsl 2] | offset_0 = r0 << 2;
| r3 = *((r5 + offset_0));
0x0000806c ldr r0, [sp, 4] | r0 = var_4h_2;
0x0000806e and r2, r0, 0x1f | r2 = r0 & 0x1f;
0x00008072 lsls r4, r2 | r4 <<= r2;
0x00008074 tst r4, r3 |
| if ((r4 & r3) != 0) {
0x00008076 bne 0x80c0 | goto label_4;
| }
| label_2:
0x00008078 blx 0x3760 | fcn_00003760 ();
0x0000807c ldr.w r2, [r6, r0, lsl 2] | offset_1 = r0 << 2;
| r2 = *((r6 + offset_1));
0x00008080 movs r4, 1 | r4 = 1;
0x00008082 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00008084 and r3, r0, 0x1f | r3 = r0 & 0x1f;
0x00008088 lsl.w r3, r4, r3 | r3 = r4 << r3;
0x0000808c tst r3, r2 |
| if ((r3 & r2) != 0) {
0x0000808e bne 0x80ce | goto label_5;
| }
| label_0:
0x00008090 movs r0, 0 | r0 = 0;
| label_1:
0x00008092 str r0, [sp, 0xc] | var_ch_2 = r0;
| do {
0x00008094 ldr r0, [pc, 0x84] |
0x00008096 movs r3, 3 | r3 = 3;
0x00008098 add r2, sp, 0xc | r2 += var_ch_2;
0x0000809a movs r1, 0xe7 | r1 = 0xe7;
0x0000809c add r0, pc | r0 = 0x101bc;
0x0000809e adds r0, 0x58 | r0 += 0x58;
0x000080a0 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000080a4 ldr r2, [pc, 0x78] |
0x000080a6 ldr r3, [pc, 0x64] | r3 = *(0x810e);
0x000080a8 ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000080aa add r2, pc | r2 = 0x101ce;
0x000080ac ldr r3, [r2, r3] | r3 = *(0x101ce);
0x000080ae ldr r2, [r3] | r2 = *(0x101ce);
0x000080b0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000080b2 eors r2, r3 | r2 ^= r3;
0x000080b4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000080b8 bne 0x8100 | goto label_6;
| }
0x000080ba add sp, 0x1c |
0x000080bc pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x000080c0 ldr.w r0, [sb, 0x10c] | r0 = *((sb + 0x10c));
0x000080c4 mov r2, r7 | r2 = r7;
0x000080c6 mov r1, r8 | r1 = r8;
0x000080c8 bl 0xd948 | fcn_0000d948 (r0, r1, r2);
0x000080cc b 0x8094 |
| } while (1);
| label_5:
0x000080ce blx 0x3760 | fcn_00003760 ();
0x000080d2 ldr r3, [sp, 4] | r3 = var_4h_2;
0x000080d4 ldr.w r2, [r5, r0, lsl 2] | offset_2 = r0 << 2;
| r2 = *((r5 + offset_2));
0x000080d8 and r1, r3, 0x1f | r1 = r3 & 0x1f;
0x000080dc lsls r4, r1 | r4 <<= r1;
0x000080de tst r4, r2 |
| if ((r4 & r2) == 0) {
0x000080e0 beq 0x8090 | goto label_0;
| }
0x000080e2 ldr r0, [pc, 0x40] |
0x000080e4 mov r2, r7 | r2 = r7;
0x000080e6 add r1, sp, 0x10 | r1 += var_10h;
0x000080e8 str r3, [sp, 0x10] | var_10h = r3;
0x000080ea add r0, pc |
0x000080ec ldr.w r0, [r0, 0x110] | r0 = *(0x10324);
0x000080f0 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x000080f4 clz r0, r0 | r0 &= r0;
0x000080f8 lsrs r0, r0, 5 | r0 >>= 5;
0x000080fa b 0x8092 | goto label_1;
| label_3:
0x000080fc ldr r0, [sp, 4] | r0 = var_4h_2;
0x000080fe b 0x8078 | goto label_2;
| label_6:
0x00008100 blx 0x348c | fprintf_chk ()
0x00008104 cmp r1, 0x10 |
0x00008106 movs r1, r0 | r1 = r0;
0x00008108 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x0000810a movs r2, r0 | r2 = r0;
0x0000810c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000810e movs r0, r0 |
0x00008110 strb r2, [r4, 7] | *((r4 + 7)) = r2;
0x00008112 movs r2, r0 | r2 = r0;
0x00008114 ldr r4, [r7, 0x40] | r4 = *((r7 + 0x40));
0x00008116 movs r2, r0 | r2 = r0;
0x00008118 lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x0000811a movs r0, r0 |
0x0000811c cmp r0, 0x90 |
0x0000811e movs r1, r0 | r1 = r0;
0x00008120 ldr r6, [r4, 0x3c] | r6 = *((r4 + 0x3c));
0x00008122 movs r2, r0 | r2 = r0;
0x00008124 strb r2, [r6, 4] | *((r6 + 4)) = r2;
0x00008126 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8128 */
| #include <stdint.h>
|
; (fcn) fcn.00008128 () | void fcn_00008128 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h_3;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00008128 andhs r4, r3, 44, 22 | r4 = r3 & (44 22);
| }
0x0000812c push {r4, r5, r6, r7, lr} |
0x0000812e mov r6, r1 | r6 = r1;
0x00008130 ldr r1, [pc, 0xac] |
0x00008132 mov r5, r0 | r5 = r0;
0x00008134 add r3, pc | r3 += pc;
0x00008136 sub sp, 0xc |
0x00008138 add.w r0, r3, 0x60 | r0 = r3 + 0x60;
0x0000813c ldr r3, [pc, 0xa4] | r3 = *(0x81e4);
0x0000813e add r1, pc | r1 = 0x10322;
0x00008140 mov.w r7, -1 | r7 = -1;
0x00008144 ldr r3, [r1, r3] |
0x00008146 movw r1, 0x157 | r1 = 0x157;
0x0000814a ldr r3, [r3] | r3 = *(0x10322);
0x0000814c str r3, [sp, 4] | var_4h_3 = r3;
0x0000814e mov.w r3, 0 | r3 = 0;
0x00008152 str r7, [sp] | *(sp) = r7;
0x00008154 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00008158 mov r1, r6 | r1 = r6;
0x0000815a mov r0, r5 | r0 = r5;
0x0000815c bl 0xd130 | r0 = fcn_0000d130 (r0, r1);
0x00008160 cmn.w r0, 0x16 |
0x00008164 str r0, [sp] | *(sp) = r0;
| if (r0 != 0x16) {
0x00008166 bne 0x8180 | goto label_0;
| }
0x00008168 mov r4, r0 | r4 = r0;
0x0000816a movs r3, 0 | r3 = 0;
0x0000816c movs r2, 1 | r2 = 1;
0x0000816e mov r1, r6 | r1 = r6;
0x00008170 mov r0, r5 | r0 = r5;
0x00008172 blx 0x3050 | r0 = fcn_00003050 ();
0x00008176 cmp r0, r7 |
0x00008178 str r0, [sp] | *(sp) = r0;
| if (r0 == r7) {
0x0000817a beq 0x81be | goto label_1;
| }
| if (r0 != 0) {
0x0000817c cbnz r0, 0x81ac | goto label_2;
| }
0x0000817e str r7, [sp] | *(sp) = r7;
| do {
| label_0:
0x00008180 ldr r0, [pc, 0x64] |
0x00008182 movs r3, 3 | r3 = 3;
0x00008184 mov r2, sp | r2 = sp;
0x00008186 mov.w r1, 0x16c | r1 = 0x16c;
0x0000818a add r0, pc | r0 = 0x10376;
0x0000818c adds r0, 0x60 | r0 += 0x60;
0x0000818e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008192 ldr r2, [pc, 0x58] |
0x00008194 ldr r3, [pc, 0x4c] | r3 = *(0x81e4);
0x00008196 ldr r0, [sp] | r0 = *(sp);
0x00008198 add r2, pc | r2 = 0x1038a;
0x0000819a ldr r3, [r2, r3] | r3 = *(0x1038a);
0x0000819c ldr r2, [r3] | r2 = *(0x1038a);
0x0000819e ldr r3, [sp, 4] | r3 = var_4h_3;
0x000081a0 eors r2, r3 | r2 ^= r3;
0x000081a2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000081a6 bne 0x81d8 | goto label_3;
| }
0x000081a8 add sp, 0xc |
0x000081aa pop {r4, r5, r6, r7, pc} |
| label_2:
0x000081ac cmp r0, 1 |
0x000081ae bne 0x8180 |
| } while (r0 != 1);
0x000081b0 ldrb r1, [r6] | r1 = *(r6);
0x000081b2 mov r0, r5 | r0 = r5;
0x000081b4 bl 0xd318 | fcn_0000d318 (r0, r1);
0x000081b8 movs r3, 0 | r3 = 0;
0x000081ba str r3, [sp] | *(sp) = r3;
0x000081bc b 0x8180 | goto label_0;
| label_1:
0x000081be ldr r0, [pc, 0x30] |
0x000081c0 mov r1, r5 | r1 = r5;
0x000081c2 add r0, pc | r0 = 0x103b8;
0x000081c4 bl 0x7d88 | r0 = fcn_00007d88 (r0, r1);
0x000081c8 cmp r0, 0xb |
| if (r0 != 0xb) {
0x000081ca bne 0x8180 | goto label_0;
| }
0x000081cc movs r1, 0 | r1 = 0;
0x000081ce mov r0, r5 | r0 = r5;
0x000081d0 str r4, [sp] | *(sp) = r4;
0x000081d2 bl 0xd210 | fcn_0000d210 (r0, r1);
0x000081d6 b 0x8180 | goto label_0;
| label_3:
0x000081d8 blx 0x348c | fprintf_chk ()
0x000081dc movs r7, 0xf8 | r7 = 0xf8;
0x000081de movs r1, r0 | r1 = r0;
0x000081e0 ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x000081e2 movs r2, r0 | r2 = r0;
0x000081e4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000081e6 movs r0, r0 |
0x000081e8 movs r7, 0xa2 | r7 = 0xa2;
0x000081ea movs r1, r0 | r1 = r0;
0x000081ec ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x000081ee movs r2, r0 | r2 = r0;
0x000081f0 movs r4, 0x56 | r4 = 0x56;
0x000081f2 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x82b4 */
| #include <stdint.h>
|
; (fcn) fcn.000082b4 () | void fcn_000082b4 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x000082b4 ldrsbgt pc, [r0], -0x8f | __asm ("ldrsbgt pc, [r0], -0x8f");
0x000082b8 ldr r1, [pc, 0x50] |
0x000082ba push {lr} |
0x000082bc sub sp, 0xc |
0x000082be add ip, pc |
0x000082c0 ldr r3, [pc, 0x4c] |
0x000082c2 ldr.w r1, [ip, r1] | r1 = *((ip + r1));
0x000082c6 ldr r2, [pc, 0x4c] | r2 = *(0x8316);
0x000082c8 add r3, pc | r3 = 0x105dc;
0x000082ca ldr r1, [r1] | r1 = *(0x830c);
0x000082cc str r1, [sp, 4] | var_4h = r1;
0x000082ce mov.w r1, 0 | r1 = 0;
0x000082d2 str r0, [sp] | *(sp) = r0;
0x000082d4 ldr r0, [pc, 0x40] |
0x000082d6 mov r1, sp | r1 = sp;
0x000082d8 ldr r2, [r3, r2] | r2 = *(0x105dc);
0x000082da add r0, pc |
0x000082dc ldr.w r0, [r0, 0x110] | r0 = *(0x10706);
0x000082e0 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x000082e4 ldr r2, [pc, 0x34] |
0x000082e6 ldr r3, [pc, 0x24] | r3 = *(0x830e);
0x000082e8 add r2, pc | r2 = 0x10608;
0x000082ea ldr r3, [r2, r3] | r3 = *(0x10608);
0x000082ec ldr r2, [r3] | r2 = *(0x10608);
0x000082ee ldr r3, [sp, 4] | r3 = var_4h;
0x000082f0 eors r2, r3 | r2 ^= r3;
0x000082f2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000082f6 bne 0x8304 |
0x000082f8 clz r0, r0 | r0 &= r0;
0x000082fc lsrs r0, r0, 5 | r0 >>= 5;
0x000082fe add sp, 0xc |
0x00008300 ldr pc, [sp], 4 | pc = *(sp);
| sp += 4;
| }
0x00008304 blx 0x348c | fprintf_chk ()
0x00008308 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0000830a movs r2, r0 | r2 = r0;
0x0000830c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000830e movs r0, r0 |
0x00008310 ldr r0, [r1, 0x1c] | r0 = *((r1 + 0x1c));
0x00008312 movs r2, r0 | r2 = r0;
0x00008314 lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x00008316 movs r0, r0 |
0x00008318 ldr r2, [r0, 0x74] | r2 = *((r0 + 0x74));
0x0000831a movs r2, r0 | r2 = r0;
0x0000831c ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0000831e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8320 */
| #include <stdint.h>
|
; (fcn) fcn.00008320 () | void fcn_00008320 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00008320 ssub8mi fp, r7, r0 | __asm ("ssub8mi fp, r7, r0");
0x00008324 ldr r2, [pc, 0x84] |
0x00008326 mov r4, r3 | r4 = r3;
0x00008328 sub sp, 0xc |
0x0000832a mov r5, r0 | r5 = r0;
0x0000832c ldr r3, [pc, 0x80] | r3 = *(0x83b0);
0x0000832e ldr r6, [pc, 0x84] |
0x00008330 add r2, pc | r2 = 0x106e0;
0x00008332 ldr r3, [r2, r3] |
0x00008334 movs r2, 3 | r2 = 3;
0x00008336 add r6, pc | r6 = 0x106f0;
0x00008338 add.w r0, r6, 0x80 | r0 = r6 + 0x80;
0x0000833c mov r6, r1 | r6 = r1;
0x0000833e mov.w r1, 0x1bc | r1 = 0x1bc;
0x00008342 ldr r3, [r3] | r3 = *(0x106e0);
0x00008344 str r3, [sp, 4] | var_4h_2 = r3;
0x00008346 mov.w r3, 0 | r3 = 0;
0x0000834a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000834e movs r3, 0 | r3 = 0;
0x00008350 mov r2, r7 | r2 = r7;
0x00008352 str r3, [r4] | *(r4) = r3;
0x00008354 mov r1, r6 | r1 = r6;
0x00008356 mov r0, r5 | r0 = r5;
0x00008358 blx 0x3150 | r0 = fcn_00003150 ();
0x0000835c adds r3, r0, 1 | r3 = r0 + 1;
0x0000835e str r0, [sp] | *(sp) = r0;
0x00008360 it ne |
| if (r3 == r0) {
0x00008362 strne r0, [r4] | *(r4) = r0;
| }
0x00008364 beq 0x8392 |
| while (1) {
0x00008366 ldr r0, [pc, 0x50] |
0x00008368 movs r3, 3 | r3 = 3;
0x0000836a mov r2, sp | r2 = sp;
0x0000836c mov.w r1, 0x1f0 | r1 = 0x1f0;
0x00008370 add r0, pc | r0 = 0x1072e;
0x00008372 adds r0, 0x80 | r0 += 0x80;
0x00008374 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008378 ldr r2, [pc, 0x40] |
0x0000837a ldr r3, [pc, 0x34] | r3 = *(0x83b2);
0x0000837c ldr r0, [sp] | r0 = *(sp);
0x0000837e add r2, pc | r2 = 0x1073e;
0x00008380 ldr r3, [r2, r3] | r3 = *(0x1073e);
0x00008382 ldr r2, [r3] | r2 = *(0x1073e);
0x00008384 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00008386 eors r2, r3 | r2 ^= r3;
0x00008388 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000838c bne 0x83a8 | goto label_0;
| }
0x0000838e add sp, 0xc |
0x00008390 pop {r4, r5, r6, r7, pc} |
0x00008392 ldr r0, [pc, 0x2c] |
0x00008394 mov r1, r5 | r1 = r5;
0x00008396 add r0, pc | r0 = 0x1075c;
0x00008398 bl 0x7d88 | r0 = fcn_00007d88 (r0, r1);
0x0000839c cmp r0, 0xb |
0x0000839e itt eq |
| if (r0 != 0xb) {
0x000083a0 mvneq r3, 0x15 | r3 = ~0x15;
| }
| if (r0 == 0xb) {
0x000083a4 str r3, [sp] | *(sp) = r3;
| }
0x000083a6 b 0x8366 |
| }
| label_0:
0x000083a8 blx 0x348c | fprintf_chk ()
0x000083ac ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x000083ae movs r2, r0 | r2 = r0;
0x000083b0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000083b2 movs r0, r0 |
0x000083b4 movs r5, 0xf6 | r5 = 0xf6;
0x000083b6 movs r1, r0 | r1 = r0;
0x000083b8 movs r5, 0xbc | r5 = 0xbc;
0x000083ba movs r1, r0 | r1 = r0;
0x000083bc ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000083be movs r2, r0 | r2 = r0;
0x000083c0 movs r2, 0xce | r2 = 0xce;
0x000083c2 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x83c4 */
| #include <stdint.h>
|
; (fcn) fcn.000083c4 () | void fcn_000083c4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_34h;
| int16_t var_5ch;
| int16_t var_84h;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_90h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000083c4 push {r1, r7, ip, sp, pc} |
0x000083c8 blx lr | lr ();
0x000083ca mov sl, r2 | sl = r2;
0x000083cc sub sp, 0x60 |
0x000083ce ldr r2, [pc, 0x1ac] |
0x000083d0 mov r8, r3 | r8 = r3;
0x000083d2 mov r7, r0 | r7 = r0;
0x000083d4 str r3, [sp, 0x84] | var_84h = r3;
0x000083d6 mov sb, r1 | sb = r1;
0x000083d8 ldr r3, [pc, 0x1a4] | r3 = *(0x8580);
0x000083da add r2, pc | r2 = 0x1095c;
0x000083dc ldr r0, [pc, 0x1a4] |
0x000083de mov.w r1, 0x208 | r1 = 0x208;
0x000083e2 ldr r4, [pc, 0x1a4] |
0x000083e4 movs r5, 0 | r5 = 0;
0x000083e6 ldr r3, [r2, r3] |
0x000083e8 movs r2, 3 | r2 = 3;
0x000083ea add r0, pc | r0 = 0x10972;
0x000083ec ldr r6, [sp, 0x8c] | r6 = var_4h_2;
0x000083ee adds r0, 0x90 | r0 += 0x90;
0x000083f0 add r4, pc | r4 = 0x1097e;
0x000083f2 ldr r3, [r3] | r3 = *(0x1095c);
0x000083f4 str r3, [sp, 0x5c] | var_5ch = r3;
0x000083f6 mov.w r3, 0 | r3 = 0;
0x000083fa mvn r3, 0x15 | r3 = ~0x15;
0x000083fe strd r5, r3, [sp, 0x14] | __asm ("strd r5, r3, [sp, 0x14]");
0x00008402 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00008406 ldr r3, [pc, 0x184] | r3 = *(0x858e);
0x00008408 add r1, sp, 0x1c | r1 += var_1ch;
0x0000840a str r7, [sp, 0x1c] | var_1ch = r7;
0x0000840c ldr r2, [r4, r3] | r2 = *(0x1097e);
0x0000840e ldr r3, [pc, 0x180] |
0x00008410 add r3, pc | r3 = 0x109a6;
0x00008412 ldr.w r0, [r3, 0x110] | r0 = *(0x10ab6);
0x00008416 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x0000841a cmp r0, 0 |
| if (r0 != 0) {
0x0000841c bne.w 0x853e | goto label_2;
| }
0x00008420 cmp.w r8, 0 |
0x00008424 itttt gt |
| if (r8 <= 0) {
0x00008426 lslgt r2, r8, 2 | r2 = r8 << 2;
| }
| if (r8 <= 0) {
0x0000842a movgt ip, r6 |
| }
| if (r8 <= 0) {
0x0000842c movgt r4, sl | r4 = sl;
| }
| if (r8 > 0) {
0x0000842e adds r3, r6, r2 | r3 = r6 + r2;
| }
| if (r3 <= r6) {
0x00008430 ble.w 0x856a | goto label_3;
| }
| do {
0x00008434 ldr r5, [ip], 4 | r5 = *(ip);
| ip += 4;
0x00008438 cmp ip, r3 |
0x0000843a add r4, r5 | r4 += r5;
0x0000843c bne 0x8434 |
| } while (ip != r3);
0x0000843e ldr r5, [sp, 0x88] | r5 = var_0h_2;
0x00008440 sub.w lr, r6, 4 | lr = r6 - 4;
0x00008444 ldr r1, [sp, 0x90] | r1 = var_90h;
0x00008446 add r6, sp, 0x34 | r6 += var_34h;
0x00008448 mov ip, r6 |
0x0000844a movs r3, 1 | r3 = 1;
0x0000844c adds r0, r5, r2 | r0 = r5 + r2;
0x0000844e strd sb, sl, [sp, 0x34] | __asm ("strd sb, sl, [sp, 0x34]");
0x00008452 str r3, [sp, 0x20] | var_20h = r3;
| do {
0x00008454 ldr r3, [r5], 4 | r3 = *(r5);
| r5 += 4;
0x00008458 add.w ip, ip, 8 |
0x0000845c str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x00008460 cmp r0, r5 |
0x00008462 ldr r3, [lr, 4]! | r3 = *((lr += 4));
0x00008464 subs r7, 4 | r7 -= 4;
0x00008466 str.w r3, [ip, 4] | __asm ("str.w r3, [ip, 4]");
0x0000846a bne 0x8454 |
| } while (r7 != 4);
0x0000846c add r0, sp, 0x24 | r0 += var_24h;
0x0000846e blx 0x32a0 | pthread_cond_signal ();
| label_1:
0x00008472 add.w r8, r8, 1 | r8++;
0x00008476 add r3, sp, 0x14 | r3 += var_14h;
0x00008478 mov r2, r8 | r2 = r8;
0x0000847a mov r1, r6 | r1 = r6;
0x0000847c mov r0, r7 | r0 = r7;
0x0000847e bl 0x8320 | fcn_00008320 (r0, r1, r2, r3);
0x00008482 str r0, [sp, 0x18] | var_18h = r0;
0x00008484 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00008486 beq 0x8494 | goto label_0;
| }
0x00008488 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000848a cmp r3, r4 |
0x0000848c itt eq |
| if (r3 != r4) {
0x0000848e moveq r3, 0 | r3 = 0;
| }
| if (r3 != r4) {
0x00008490 streq r3, [sp, 0x18] | var_18h = r3;
| }
0x00008492 bne 0x84c6 |
| while (1) {
| label_0:
0x00008494 ldr r0, [pc, 0xfc] |
0x00008496 movs r3, 3 | r3 = 3;
0x00008498 add r2, sp, 0x18 | r2 += var_18h;
0x0000849a movw r1, 0x23d | r1 = 0x23d;
0x0000849e add r0, pc | r0 = 0x10a36;
0x000084a0 adds r0, 0x90 | r0 += 0x90;
0x000084a2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000084a6 ldr r2, [pc, 0xf0] |
0x000084a8 ldr r3, [pc, 0xd4] | r3 = *(0x8580);
0x000084aa ldr r0, [sp, 0x18] | r0 = var_18h;
0x000084ac add r2, pc | r2 = 0x10a4a;
0x000084ae ldr r3, [r2, r3] | r3 = *(0x10a4a);
0x000084b0 ldr r2, [r3] | r2 = *(0x10a4a);
0x000084b2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000084b4 eors r2, r3 | r2 ^= r3;
0x000084b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000084ba bne 0x8578 | goto label_4;
| }
0x000084bc add sp, 0x60 |
0x000084be pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000084c0 blx lr | lr ();
0x000084c2 add sp, 8 |
0x000084c4 bx lr | return;
0x000084c6 ldr.w sb, [pc, 0xd4] |
0x000084ca movs r2, 4 | r2 = 4;
0x000084cc movw r1, 0x223 | r1 = 0x223;
0x000084d0 add sb, pc | sb = 0x10a72;
0x000084d2 mov r0, sb | r0 = sb;
0x000084d4 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000084d8 mov r5, r0 | r5 = r0;
0x000084da cmp r0, 0 |
| if (r0 == 0) {
0x000084dc beq 0x8562 | goto label_5;
| }
0x000084de ldr r2, [pc, 0xc0] |
0x000084e0 mov.w r1, -1 | r1 = -1;
0x000084e4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000084e6 movs r0, 3 | r0 = 3;
0x000084e8 strd r4, r7, [sp] | __asm ("strd r4, r7, [sp]");
0x000084ec add r2, pc | r2 = 0x10a92;
0x000084ee bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000084f2 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000084f4 mov r2, r8 | r2 = r8;
0x000084f6 str r4, [sp, 4] | var_4h_3 = r4;
0x000084f8 mov r3, r6 | r3 = r6;
0x000084fa ldr r4, [pc, 0xa8] |
0x000084fc mov r0, r7 | r0 = r7;
0x000084fe str r1, [sp, 8] | var_8h = r1;
0x00008500 add r1, sp, 0x20 | r1 += var_20h;
0x00008502 str r1, [sp] | *(sp) = r1;
0x00008504 movs r1, 0 | r1 = 0;
0x00008506 add r4, pc | r4 = 0x10ab0;
0x00008508 bl 0xd3ec | fcn_0000d3ec (r0, r1, r2, r3, r4, r5, r6);
0x0000850c ldr.w r0, [r4, 0x110] | r0 = *(0x10bc0);
0x00008510 movs r2, 4 | r2 = 4;
0x00008512 mov r1, r5 | r1 = r5;
0x00008514 str r7, [r5] | *(r5) = r7;
0x00008516 bl 0xd5f8 | r0 = fcn_0000d5f8 (r0, r1, r2);
| if (r0 == 0) {
0x0000851a cbz r0, 0x8556 | goto label_6;
| }
0x0000851c mov r0, r7 | r0 = r7;
0x0000851e and r7, r7, 0x1f | r7 &= 0x1f;
0x00008522 blx 0x3760 | fcn_00003760 ();
0x00008526 adds r0, 0x44 | r0 += 0x44;
0x00008528 movs r3, 1 | r3 = 1;
0x0000852a add.w r4, r4, r0, lsl 2 | r4 += (r0 << 2);
0x0000852e lsls r3, r7 | r3 <<= r7;
0x00008530 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00008532 mvn r1, 0x15 | r1 = ~0x15;
0x00008536 str r1, [sp, 0x18] | var_18h = r1;
0x00008538 orrs r3, r2 | r3 |= r2;
0x0000853a str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0000853c b 0x8494 |
| }
| label_2:
0x0000853e ldr r2, [pc, 0x68] |
0x00008540 mov r3, r7 | r3 = r7;
0x00008542 mov.w r1, -1 | r1 = -1;
0x00008546 movs r0, 6 | r0 = 6;
0x00008548 add r2, pc | r2 = 0x10af6;
0x0000854a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000854e mov.w r3, -1 | r3 = -1;
0x00008552 str r3, [sp, 0x18] | var_18h = r3;
0x00008554 b 0x8494 | goto label_0;
| label_6:
0x00008556 mov r2, r5 | r2 = r5;
0x00008558 mov.w r1, 0x234 | r1 = 0x234;
0x0000855c mov r0, sb | r0 = sb;
0x0000855e bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_5:
0x00008562 mvn r3, 0x62 | r3 = ~0x62;
0x00008566 str r3, [sp, 0x18] | var_18h = r3;
0x00008568 b 0x8494 | goto label_0;
| label_3:
0x0000856a movs r3, 1 | r3 = 1;
0x0000856c mov r4, sl | r4 = sl;
0x0000856e add r6, sp, 0x34 | r6 += var_34h;
0x00008570 strd sb, sl, [sp, 0x34] | __asm ("strd sb, sl, [sp, 0x34]");
0x00008574 str r3, [sp, 0x20] | var_20h = r3;
0x00008576 b 0x8472 | goto label_1;
| label_4:
0x00008578 blx 0x348c | fprintf_chk ()
0x0000857c ldr r6, [r6, 8] | r6 = *((r6 + 8));
0x0000857e movs r2, r0 | r2 = r0;
0x00008580 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00008582 movs r0, r0 |
0x00008584 movs r5, 0x42 | r5 = 0x42;
0x00008586 movs r1, r0 | r1 = r0;
0x00008588 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0000858a movs r2, r0 | r2 = r0;
0x0000858c lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x0000858e movs r0, r0 |
0x00008590 ldr r4, [r1, 0x60] | r4 = *((r1 + 0x60));
0x00008592 movs r2, r0 | r2 = r0;
0x00008594 movs r4, 0x8e | r4 = 0x8e;
0x00008596 movs r1, r0 | r1 = r0;
0x00008598 str r4, [r4, 0x7c] | *((r4 + 0x7c)) = r4;
0x0000859a movs r2, r0 | r2 = r0;
0x0000859c movs r0, 0xc8 | r0 = 0xc8;
0x0000859e movs r1, r0 | r1 = r0;
0x000085a0 movs r1, 0xd4 | r1 = 0xd4;
0x000085a2 movs r1, r0 | r1 = r0;
0x000085a4 ldr r6, [r2, 0x50] | r6 = *((r2 + 0x50));
0x000085a6 movs r2, r0 | r2 = r0;
0x000085a8 movs r1, 0x30 | r1 = 0x30;
0x000085aa movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8610 */
| #include <stdint.h>
|
; (fcn) fcn.00008610 () | void fcn_00008610 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x00008610 invalid |
0x00008614 movs r2, 3 | r2 = 3;
0x00008616 push {r4, lr} |
0x00008618 mov r4, r0 | r4 = r0;
0x0000861a ldr r0, [pc, 0xa4] |
0x0000861c sub sp, 8 |
0x0000861e add ip, pc |
0x00008620 movw r1, 0x262 | r1 = 0x262;
0x00008624 ldr r3, [pc, 0x9c] |
0x00008626 ldr.w r0, [ip, r0] | r0 = *((ip + r0));
0x0000862a add r3, pc | r3 = 0x10cf2;
0x0000862c ldr r0, [r0] | r0 = *(0x86c2);
0x0000862e str r0, [sp, 4] | var_4h = r0;
0x00008630 mov.w r0, 0 | r0 = 0;
0x00008634 add.w r0, r3, 0xa0 | r0 = r3 + 0xa0;
0x00008638 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000863c movs r1, 1 | r1 = 1;
0x0000863e mov r0, r4 | r0 = r4;
0x00008640 blx 0x3390 | SSL_CTX_use_PrivateKey_file ();
0x00008644 adds r0, 1 | r0++;
0x00008646 beq 0x8692 |
| while (1) {
0x00008648 movs r3, 0 | r3 = 0;
0x0000864a mov r0, r4 | r0 = r4;
0x0000864c mov r2, r3 | r2 = r3;
0x0000864e mov r1, r3 | r1 = r3;
0x00008650 blx 0x3050 | fcn_00003050 ();
0x00008654 str r0, [sp] | *(sp) = r0;
0x00008656 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00008658 beq 0x86aa | goto label_2;
| }
| label_1:
0x0000865a mov r0, r4 | r0 = r4;
0x0000865c blx 0x33cc | fwrite (r0, r1, r2, r3);
0x00008660 str r0, [sp] | *(sp) = r0;
0x00008662 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00008664 beq 0x869e | goto label_3;
| }
| label_0:
0x00008666 ldr r0, [pc, 0x60] |
0x00008668 movs r3, 3 | r3 = 3;
0x0000866a mov r2, sp | r2 = sp;
0x0000866c mov.w r1, 0x270 | r1 = 0x270;
0x00008670 add r0, pc | r0 = 0x10d3e;
0x00008672 adds r0, 0xa0 | r0 += 0xa0;
0x00008674 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008676 invalid |
0x0000867a ldr r3, [pc, 0x44] | r3 = *(0x86c2);
0x0000867c ldr r0, [sp] | r0 = *(sp);
0x0000867e add r2, pc | r2 += pc;
0x00008680 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00008682 ldr r2, [r3] | r2 = *(0x86c2);
0x00008684 ldr r3, [sp, 4] | r3 = var_4h;
0x00008686 eors r2, r3 | r2 ^= r3;
0x00008688 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000868c bne 0x86b6 | goto label_4;
| }
0x0000868e add sp, 8 |
0x00008690 pop {r4, pc} |
0x00008692 ldr r0, [pc, 0x3c] |
0x00008694 mov r1, r4 | r1 = r4;
0x00008696 add r0, pc | r0 = 0x10d6c;
0x00008698 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x0000869c b 0x8648 |
| }
| label_3:
0x0000869e ldr r0, [pc, 0x34] |
0x000086a0 mov r1, r4 | r1 = r4;
0x000086a2 add r0, pc | r0 = 0x10d7c;
0x000086a4 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x000086a8 b 0x8666 | goto label_0;
| label_2:
0x000086aa ldr r0, [pc, 0x2c] |
0x000086ac mov r1, r4 | r1 = r4;
0x000086ae add r0, pc | r0 = 0x10d8c;
0x000086b0 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x000086b4 b 0x865a | goto label_1;
| label_4:
0x000086b6 blx 0x348c | fprintf_chk ()
0x000086ba nop |
0x000086bc str r2, [r6, 0x64] | *((r6 + 0x64)) = r2;
0x000086be movs r2, r0 | r2 = r0;
0x000086c0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000086c2 movs r0, r0 |
0x000086c4 movs r3, 2 | r3 = 2;
0x000086c6 movs r1, r0 | r1 = r0;
0x000086c8 movs r2, 0xbc | r2 = 0xbc;
0x000086ca movs r1, r0 | r1 = r0;
0x000086cc str r2, [r2, 0x60] | *((r2 + 0x60)) = r2;
0x000086ce movs r2, r0 | r2 = r0;
0x000086d0 subs r2, r5, 2 | r2 = r5 - 2;
0x000086d2 movs r1, r0 | r1 = r0;
0x000086d4 movs r0, 0x5e | r0 = 0x5e;
0x000086d6 movs r1, r0 | r1 = r0;
0x000086d8 subs r2, r2, 2 | r2 -= 2;
0x000086da movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x86ec */
| #include <stdint.h>
|
; (fcn) fcn.000086ec () | void fcn_000086ec (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_28h;
| int16_t var_3ch;
| int16_t var_40h;
| r0 = arg1;
| if (? < ?) {
0x000086ec andhs r4, r3, 104, 22 | r4 = r3 & (104 22);
| }
0x000086f0 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000086f4 mov r5, r0 | r5 = r0;
0x000086f6 ldr r6, [pc, 0x19c] |
0x000086f8 sub sp, 0x44 |
0x000086fa add r3, pc | r3 += pc;
0x000086fc mov.w r1, 0x370 | r1 = 0x370;
0x00008700 add.w r0, r3, 0xb4 | r0 = r3 + 0xb4;
0x00008704 ldr r3, [pc, 0x190] | r3 = *(0x8898);
0x00008706 add r6, pc | r6 = 0x10fa0;
0x00008708 movs r4, 0 | r4 = 0;
0x0000870a ldr r3, [r6, r3] |
0x0000870c ldr r3, [r3] | r3 = *(0x10fa0);
0x0000870e str r3, [sp, 0x3c] | var_3ch = r3;
0x00008710 mov.w r3, 0 | r3 = 0;
0x00008714 strd r4, r4, [sp, 0xc] | __asm ("strd r4, r4, [var_ch]");
0x00008716 add r3, r0 | r3 += r0;
0x00008718 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000871c mov r0, r5 | r0 = r5;
0x0000871e bl 0xd4e0 | fcn_0000d4e0 (r0);
0x00008722 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00008724 cmp r2, 0 |
| if (r2 != 0) {
0x00008726 bne.w 0x8872 | goto label_5;
| }
0x0000872a ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x0000872c mov r4, r0 | r4 = r0;
0x0000872e cmp r6, 0 |
| if (r6 <= 0) {
0x00008730 ble 0x878a | goto label_6;
| }
0x00008732 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00008734 add.w r6, r4, r6, lsl 3 | r6 = r4 + (r6 << 3);
0x00008738 mov ip, r2 |
0x0000873a mov r1, r4 | r1 = r4;
0x0000873c b 0x8754 |
| while (r0 < lr) {
0x0000873e ldr r7, [r1, 0x14] | r7 = *((r1 + 0x14));
0x00008740 add.w lr, sp, 0x40 | lr += var_40h;
0x00008744 add.w lr, lr, r2, lsl 3 | lr += (r2 << 3);
0x00008748 adds r2, 1 | r2++;
0x0000874a strd r7, r3, [lr, -0x2c] | __asm ("strd r7, r3, [var_10h]");
| label_0:
0x0000874e adds r1, 8 | r1 += 8;
0x00008750 cmp r1, r6 |
| if (r1 == r6) {
0x00008752 beq 0x878a | goto label_6;
| }
| label_1:
0x00008754 mov lr, ip | lr = ip;
0x00008756 ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00008758 cmp r0, lr |
0x0000875a add ip, r3 |
0x0000875c bls 0x873e |
| }
0x0000875e cmp r0, ip |
| if (r0 >= ip) {
0x00008760 bhs 0x874e | goto label_0;
| }
0x00008762 ldr r7, [r1, 0x14] | r7 = *((r1 + 0x14));
0x00008764 add.w r8, sp, 0x40 | r8 += var_40h;
0x00008768 adds r1, 8 | r1 += 8;
0x0000876a add.w r8, r8, r2, lsl 3 | r8 += (r2 << 3);
0x0000876e sub.w sb, lr, r0 | sb = lr - r0;
0x00008772 cmp r1, r6 |
0x00008774 sub.w lr, r0, lr | lr = r0 - lr;
0x00008778 add r3, sb | r3 += sb;
0x0000877a add r7, lr | r7 += lr;
0x0000877c add.w r2, r2, 1 | r2++;
0x00008780 str r3, [r8, -0x28] | var_28h = r3;
0x00008784 str r7, [r8, -0x2c] | var_14h = r7;
| if (r1 != r6) {
0x00008788 bne 0x8754 | goto label_1;
| }
| label_6:
0x0000878a add r3, sp, 0x10 | r3 += var_10h;
0x0000878c add r1, sp, 0x14 | r1 += var_14h;
0x0000878e mov r0, r5 | r0 = r5;
0x00008790 bl 0x8320 | fcn_00008320 (r0, r1, r2, r3);
0x00008794 str r0, [sp, 0xc] | var_ch = r0;
0x00008796 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00008798 beq 0x8834 | goto label_7;
| }
0x0000879a ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0000879c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000879e ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000087a0 add r2, r3 | r2 += r3;
0x000087a2 cmp r2, r1 |
0x000087a4 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x000087a6 ite eq |
| if (r2 != r1) {
0x000087a8 moveq r2, 1 | r2 = 1;
| }
| if (r2 == r1) {
0x000087aa movne r2, 0 | r2 = 0;
| }
0x000087ac str r2, [sp, 0xc] | var_ch = r2;
| if (r2 != r1) {
0x000087ae bne 0x887a | goto label_8;
| }
0x000087b0 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000087b2 cmp r3, 0 |
| if (r3 <= 0) {
0x000087b4 ble 0x87f2 | goto label_9;
| }
0x000087b6 ldr.w sb, [pc, 0xe4] |
0x000087ba add.w r7, r4, 0x3c | r7 = r4 + 0x3c;
0x000087bc lsls r4, r7, 0x1c | r4 = r7 << 0x1c;
0x000087be movs r6, 0 | r6 = 0;
0x000087c0 add.w r8, r4, 0x14 | r8 = r4 + 0x14;
0x000087c4 add sb, pc | sb = 0x11066;
0x000087c6 b 0x87ce |
| while (r2 == 0) {
0x000087c8 adds r6, 1 | r6++;
0x000087ca cmp r3, r6 |
| if (r3 <= r6) {
0x000087cc ble 0x87f2 | goto label_9;
| }
| label_2:
0x000087ce ldr r2, [r7], 4 | r2 = *(r7);
| r7 += 4;
0x000087d2 cmp r2, 0 |
0x000087d4 beq 0x87c8 |
| }
0x000087d6 ldr.w r2, [r8, r6, lsl 3] | offset_0 = r6 << 3;
| r2 = *((r8 + offset_0));
0x000087da movw r1, 0x396 | r1 = 0x396;
0x000087de mov r0, sb | r0 = sb;
0x000087e0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000087e4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000087e6 movs r2, 0 | r2 = 0;
0x000087e8 str.w r2, [r8, r6, lsl 3] | __asm ("str.w r2, [r8, r6, lsl 3]");
0x000087ec adds r6, 1 | r6++;
0x000087ee cmp r3, r6 |
| if (r3 > r6) {
0x000087f0 bgt 0x87ce | goto label_2;
| }
| label_9:
0x000087f2 ldr r2, [pc, 0xac] |
0x000087f4 movs r4, 1 | r4 = 1;
0x000087f6 mov r3, r5 | r3 = r5;
0x000087f8 mov.w r1, -1 | r1 = -1;
0x000087fc movs r0, 3 | r0 = 3;
0x000087fe str r4, [sp, 0xc] | var_ch = r4;
0x00008800 add r2, pc | r2 = 0x110a6;
0x00008802 bl 0x9a28 | fcn_00009a28 (r0, r1);
| do {
| label_3:
0x00008806 ldr r0, [pc, 0x9c] |
0x00008808 movs r3, 3 | r3 = 3;
0x0000880a add r2, sp, 0xc | r2 += var_ch;
0x0000880c movw r1, 0x3b1 | r1 = 0x3b1;
0x0000880e adds r1, 0xb1 | r1 += 0xb1;
0x00008810 add r0, pc | r0 = 0x110ba;
0x00008812 adds r0, 0xb4 | r0 += 0xb4;
0x00008814 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008816 invalid |
0x00008818 ldr r2, [pc, 0x8c] |
0x0000881a ldr r3, [pc, 0x7c] | r3 = *(0x889a);
0x0000881c ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000881e add r2, pc | r2 = 0x110ca;
0x00008820 ldr r3, [r2, r3] | r3 = *(0x110ca);
0x00008822 ldr r2, [r3] | r2 = *(0x110ca);
0x00008824 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00008826 eors r2, r3 | r2 ^= r3;
0x00008828 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000882c bne 0x888c | goto label_10;
| }
0x0000882e add sp, 0x44 |
0x00008830 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_7:
0x00008834 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00008836 cmp r3, 0 |
0x00008838 ble 0x8806 |
| } while (r3 <= 0);
0x0000883a ldr.w r8, [pc, 0x70] |
0x0000883e add.w r6, r4, 0x3c | r6 = r4 + 0x3c;
0x00008842 movs r5, 0 | r5 = 0;
0x00008844 add.w r7, r4, 0x14 | r7 = r4 + 0x14;
0x00008848 add r8, pc | r8 = 0x110fa;
0x0000884a b 0x8852 | goto label_11;
| label_4:
0x0000884c adds r5, 1 | r5++;
0x0000884e cmp r3, r5 |
| if (r3 <= r5) {
0x00008850 ble 0x8806 | goto label_3;
| }
| label_11:
0x00008852 ldr r2, [r6], 4 | r2 = *(r6);
| r6 += 4;
0x00008856 cmp r2, 0 |
| if (r2 == 0) {
0x00008858 beq 0x884c | goto label_4;
| }
0x0000885a ldr.w r2, [r7, r5, lsl 3] | offset_1 = r5 << 3;
| r2 = *((r7 + offset_1));
0x0000885e movw r1, 0x3a9 | r1 = 0x3a9;
0x00008862 mov r0, r8 | r0 = r8;
0x00008864 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00008866 ldc2 p2, c2, [r6], {0} | __asm ("ldc2 p2, c2, [r6], {0}");
0x0000886a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000886c str.w r2, [r7, r5, lsl 3] | __asm ("str.w r2, [r7, r5, lsl 3]");
0x00008870 b 0x884c | goto label_4;
| label_5:
0x00008872 bl 0x18f6c | fcn_00018f6c (r0);
0x00008876 str r0, [sp, 0xc] | var_ch = r0;
0x00008878 b 0x8806 | goto label_3;
| label_8:
0x0000887a ldr r2, [pc, 0x34] |
0x0000887c mov.w r1, -1 | r1 = -1;
0x00008880 movs r0, 3 | r0 = 3;
0x00008882 str r5, [sp] | *(sp) = r5;
0x00008884 add r2, pc | r2 = 0x1113a;
0x00008886 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000888a b 0x8806 | goto label_3;
| label_10:
0x0000888c blx 0x348c | fprintf_chk ()
0x00008890 movs r2, 0x32 | r2 = 0x32;
0x00008892 movs r1, r0 | r1 = r0;
0x00008894 str r2, [r1, 0x58] | *((r1 + 0x58)) = r2;
0x00008896 movs r2, r0 | r2 = r0;
0x00008898 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000889a movs r0, r0 |
0x0000889c adds r4, r2, 7 | r4 = r2 + 7;
0x0000889e movs r1, r0 | r1 = r0;
0x000088a0 subs r0, r1, 4 | r0 = r1 - 4;
0x000088a2 movs r1, r0 | r1 = r0;
0x000088a4 movs r1, 0x1c | r1 = 0x1c;
0x000088a6 movs r1, r0 | r1 = r0;
0x000088a8 str r2, [r6, 0x44] | *((r6 + 0x44)) = r2;
0x000088aa movs r2, r0 | r2 = r0;
0x000088ac adds r0, r2, 5 | r0 = r2 + 5;
0x000088ae movs r1, r0 | r1 = r0;
0x000088b0 subs r4, r7, 2 | r4 = r7 - 2;
0x000088b2 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x88b4 */
| #include <stdint.h>
|
; (fcn) fcn.000088b4 () | void fcn_000088b4 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x000088b4 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x000088b8 mov r5, r0 | r5 = r0;
0x000088ba ldr r4, [pc, 0xb0] |
0x000088bc sub sp, 0xc |
0x000088be movs r3, 0 | r3 = 0;
0x000088c0 movs r2, 3 | r2 = 3;
0x000088c2 ldr r6, [pc, 0xac] |
0x000088c4 movw r1, 0x3c1 | r1 = 0x3c1;
0x000088c8 add r4, pc | r4 = 0x1123a;
0x000088ca add.w r0, r4, 0xcc | r0 = r4 + 0xcc;
0x000088ce ldr r4, [pc, 0xa4] | r4 = *(0x8976);
0x000088d0 add r6, pc | r6 = 0x11246;
0x000088d2 ldr r4, [r6, r4] |
0x000088d4 ldr r4, [r4] | r4 = *(0x11246);
0x000088d6 str r4, [sp, 4] | var_4h = r4;
0x000088d8 mov.w r4, 0 | r4 = 0;
0x000088dc str r3, [sp] | *(sp) = r3;
0x000088de bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000088e2 mov r0, r5 | r0 = r5;
0x000088e4 bl 0xd4e0 | r0 = fcn_0000d4e0 (r0);
| if (r0 == 0) {
0x000088e8 cbz r0, 0x88f0 | goto label_0;
| }
0x000088ea ldr r4, [r0, 0xc] | r4 = *((r0 + 0xc));
0x000088ec mov r6, r0 | r6 = r0;
0x000088ee cbz r4, 0x891e |
| while (r1 <= 0) {
| label_0:
0x000088f0 ldr r0, [pc, 0x84] |
0x000088f2 movs r3, 3 | r3 = 3;
0x000088f4 mov r2, sp | r2 = sp;
0x000088f6 movw r1, 0x3d3 | r1 = 0x3d3;
0x000088fa add r0, pc | r0 = 0x11276;
0x000088fc adds r0, 0xcc | r0 += 0xcc;
0x000088fe bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008902 ldr r2, [pc, 0x78] |
0x00008904 ldr r3, [pc, 0x6c] | r3 = *(0x8974);
0x00008906 ldr r0, [sp] | r0 = *(sp);
0x00008908 add r2, pc | r2 = 0x1128a;
0x0000890a ldr r3, [r2, r3] | r3 = *(0x1128a);
0x0000890c ldr r2, [r3] | r2 = *(0x1128a);
0x0000890e ldr r3, [sp, 4] | r3 = var_4h;
0x00008910 eors r2, r3 | r2 ^= r3;
0x00008912 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00008916 bne 0x8968 | goto label_2;
| }
0x00008918 add sp, 0xc |
0x0000891a pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0000891e ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x00008920 cmp r1, 0 |
0x00008922 ble 0x88f0 |
| }
0x00008924 ldr.w sb, [pc, 0x58] |
0x00008928 add.w r7, r0, 0x3c | r7 = r0 + 0x3c;
0x0000892c ldr.w r8, [pc, 0x54] |
0x00008930 add sb, pc | sb = 0x112b4;
0x00008932 add r8, pc | r8 = 0x112ba;
0x00008934 b 0x893c | goto label_3;
| label_1:
0x00008936 adds r4, 1 | r4++;
0x00008938 cmp r1, r4 |
| if (r1 <= r4) {
0x0000893a ble 0x88f0 | goto label_0;
| }
| label_3:
0x0000893c ldr r2, [r7], 4 | r2 = *(r7);
| r7 += 4;
0x00008940 cmp r2, 0 |
| if (r2 == 0) {
0x00008942 beq 0x8936 | goto label_1;
| }
0x00008944 mov r3, r5 | r3 = r5;
0x00008946 mov r2, sb | r2 = sb;
0x00008948 mov.w r1, -1 | r1 = -1;
0x0000894c movs r0, 3 | r0 = 3;
0x0000894e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008952 add.w r3, r6, 0x14 | r3 = r6 + 0x14;
0x00008956 movw r1, 0x3cf | r1 = 0x3cf;
0x0000895a ldr.w r2, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| r2 = *((r3 + offset_0));
0x0000895e mov r0, r8 | r0 = r8;
0x00008960 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00008964 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00008966 b 0x8936 | goto label_1;
| label_2:
0x00008968 blx 0x348c | fprintf_chk ()
0x0000896c movs r0, 0x64 | r0 = 0x64;
0x0000896e movs r1, r0 | r1 = r0;
0x00008970 str r0, [r0, 0x3c] | *((r0 + 0x3c)) = r0;
0x00008972 movs r2, r0 | r2 = r0;
0x00008974 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00008976 movs r0, r0 |
0x00008978 movs r0, 0x32 | r0 = 0x32;
0x0000897a movs r1, r0 | r1 = r0;
0x0000897c str r0, [r1, 0x38] | *((r1 + 0x38)) = r0;
0x0000897e movs r2, r0 | r2 = r0;
0x00008980 subs r4, r7, 0 | r4 = r7 - 0;
0x00008982 movs r1, r0 | r1 = r0;
0x00008984 adds r6, r4, 1 | r6 = r4 + 1;
0x00008986 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8988 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00008988 () | void fcn_00008988 (int16_t arg1) {
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| r0 = arg1;
| if (? >= ?) {
0x00008988 addlt fp, r4, r0, ror r5 |
| }
0x0000898c ldr r4, [pc, 0x180] |
0x0000898e movs r2, 3 | r2 = 3;
0x00008990 mov.w r1, 0x27c | r1 = 0x27c;
0x00008994 movs r5, 1 | r5 = 1;
0x00008996 str r0, [sp, 4] | var_4h_2 = r0;
0x00008998 ldr r0, [pc, 0x178] | r0 = *(0x8b14);
0x0000899a add r4, pc | r4 = 0x114ae;
0x0000899c ldr r3, [pc, 0x178] |
0x0000899e ldr r6, [pc, 0x17c] |
0x000089a0 ldr r0, [r4, r0] |
0x000089a2 add r3, pc | r3 = 0x114be;
0x000089a4 ldr r4, [pc, 0x178] |
0x000089a6 add r6, pc | r6 = 0x114c8;
0x000089a8 ldr r0, [r0] | r0 = *(0x114ae);
0x000089aa str r0, [sp, 0xc] | var_ch = r0;
0x000089ac mov.w r0, 0 | r0 = 0;
0x000089b0 add.w r0, r3, 0xe0 | r0 = r3 + 0xe0;
0x000089b4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000089b8 ldr r0, [sp, 4] | r0 = var_4h_2;
0x000089ba add r4, pc | r4 = 0x114de;
0x000089bc bl 0x8610 | fcn_00008610 (r0);
0x000089c0 ldr r0, [sp, 4] | r0 = var_4h_2;
0x000089c2 blx 0x3760 | r0 = fcn_00003760 ();
0x000089c6 mov r3, r0 | r3 = r0;
0x000089c8 ldr r0, [sp, 4] | r0 = var_4h_2;
0x000089ca adds r3, 0x20 | r3 += 0x20;
0x000089cc ldr.w r2, [r4, r3, lsl 2] | r2 = *(0x114de);
0x000089d0 and r1, r0, 0x1f | r1 = r0 & 0x1f;
0x000089d4 lsl.w r1, r5, r1 | r1 = r5 << r1;
0x000089d8 bic.w r2, r2, r1 | r2 = BIT_MASK (r2, r1);
0x000089dc str.w r2, [r4, r3, lsl 2] | __asm ("str.w r2, [r4, r3, lsl 2]");
0x000089e0 blx 0x3760 | fcn_00003760 ();
0x000089e4 ldr r3, [sp, 4] | r3 = var_4h_2;
0x000089e6 add.w r0, r4, r0, lsl 2 | r0 = r4 + (r0 << 2);
0x000089ea ldr.w r1, [r0, 0x114] | r1 = *((r0 + 0x114));
0x000089ee and r2, r3, 0x1f | r2 = r3 & 0x1f;
0x000089f2 lsl.w r2, r5, r2 | r2 = r5 << r2;
0x000089f6 tst r2, r1 |
| if ((r2 & r1) != 0) {
0x000089f8 beq 0x8a16 |
0x000089fa mov r0, r3 | r0 = r3;
0x000089fc blx 0x3760 | fcn_00003760 ();
0x00008a00 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00008a02 adds r0, 0x44 | r0 += 0x44;
0x00008a04 add.w r4, r4, r0, lsl 2 | r4 += (r0 << 2);
0x00008a08 and r2, r3, 0x1f | r2 = r3 & 0x1f;
0x00008a0c lsls r5, r2 | r5 <<= r2;
0x00008a0e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00008a10 bic.w r2, r2, r5 | r2 = BIT_MASK (r2, r5);
0x00008a14 str r2, [r4, 4] | *((r4 + 4)) = r2;
| }
0x00008a16 ldr r1, [pc, 0x10c] |
0x00008a18 add r1, pc | r1 = 0x11542;
0x00008a1a ldr.w r2, [r1, 0x108] | r2 = *(0x1164a);
| if (r2 != 0) {
0x00008a1e cbz r2, 0x8a2e |
0x00008a20 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x00008a22 ldr r0, [r0] | r0 = *(r0);
0x00008a24 cmp r0, r3 |
0x00008a26 itt eq |
| if (r0 != r3) {
0x00008a28 ldreq r2, [r2, 4] | r2 = *((r2 + 4));
| }
| if (r0 == r3) {
0x00008a2a streq r2, [r1, 0x108] | *((r1 + 0x108)) = r2;
| goto label_1;
| }
| }
| label_1:
0x00008a2e mov r0, r3 | r0 = r3;
0x00008a30 ldr r4, [pc, 0xf4] |
0x00008a32 bl 0x88b4 | fcn_000088b4 (r0);
0x00008a36 ldr r0, [sp, 4] | r0 = var_4h_2;
0x00008a38 add r5, sp, 4 | r5 += var_4h_2;
0x00008a3a bl 0xcfac | fcn_0000cfac (r0);
0x00008a3e ldr r3, [pc, 0xec] | r3 = *(0x8b2e);
0x00008a40 add r4, pc | r4 = 0x1156c;
0x00008a42 mov r1, r5 | r1 = r5;
0x00008a44 ldr.w r0, [r4, 0x10c] | r0 = *(0x11678);
0x00008a48 ldr r6, [r6, r3] | r6 = *((r6 + r3));
0x00008a4a mov r2, r6 | r2 = r6;
0x00008a4c bl 0xd948 | fcn_0000d948 (r0, r1, r2);
0x00008a50 mov r2, r6 | r2 = r6;
0x00008a52 mov r1, r5 | r1 = r5;
0x00008a54 ldr.w r0, [r4, 0x110] | r0 = *(0x1167c);
0x00008a58 bl 0xd948 | fcn_0000d948 (r0, r1, r2);
0x00008a5c ldr.w r0, [r4, 0x104] | r0 = *(0x11670);
0x00008a60 mov r2, r6 | r2 = r6;
0x00008a62 mov r1, r5 | r1 = r5;
0x00008a64 bl 0xd948 | fcn_0000d948 (r0, r1, r2);
0x00008a68 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00008a6a cmp r0, 0 |
| if (r0 == 0) {
0x00008a6c beq 0x8afa | goto label_2;
| }
0x00008a6e ldr r2, [pc, 0xc0] |
0x00008a70 mov.w r1, -1 | r1 = -1;
0x00008a74 movs r0, 3 | r0 = 3;
0x00008a76 add r2, pc | r2 = 0x115ac;
0x00008a78 bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_0:
0x00008a7c ldr r4, [pc, 0xb4] |
0x00008a7e ldr r3, [sp, 4] | r3 = var_4h_2;
0x00008a80 add r4, pc | r4 = 0x115b8;
0x00008a82 ldr.w r2, [r4, 0x100] | r2 = *(0x116b8);
0x00008a86 adds r3, 1 | r3++;
0x00008a88 cmp r3, r2 |
| if (r3 < r2) {
0x00008a8a blt 0x8ad0 | goto label_3;
| }
0x00008a8c movs r2, 0 | r2 = 0;
0x00008a8e add r5, sp, 8 | r5 += var_8h_2;
0x00008a90 mov r3, r2 | r3 = r2;
0x00008a92 str r2, [sp, 8] | var_8h_2 = r2;
0x00008a94 b 0x8aa6 |
| while (r0 != 0) {
0x00008a96 ldr r3, [sp, 8] | r3 = var_8h_2;
0x00008a98 ldr.w r2, [r4, 0x100] | r2 = *((r4 + 0x100));
0x00008a9c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00008a9e ldr r3, [r3] | r3 = *(r3);
0x00008aa0 cmp r3, r2 |
0x00008aa2 it lt |
| if (r3 >= r2) {
0x00008aa4 movlt r3, r2 | r3 = r2;
| }
0x00008aa6 ldr.w r0, [r4, 0x104] | r0 = *((r4 + 0x104));
0x00008aaa mov r1, r5 | r1 = r5;
0x00008aac str.w r3, [r4, 0x100] | __asm ("str.w r3, [r4, 0x100]");
0x00008ab0 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00008ab4 cmp r0, 0 |
0x00008ab6 bne 0x8a96 |
| }
0x00008ab8 ldr.w r3, [r4, 0x100] | r3 = *((r4 + 0x100));
0x00008abc movs r0, 1 | r0 = 1;
0x00008abe ldr r2, [pc, 0x78] |
0x00008ac0 mov.w r1, -1 | r1 = -1;
0x00008ac4 add r3, r0 | r3 += r0;
0x00008ac6 add r2, pc | r2 = 0x11604;
0x00008ac8 str.w r3, [r4, 0x100] | __asm ("str.w r3, [r4, 0x100]");
0x00008acc bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_3:
0x00008ad0 ldr r0, [pc, 0x68] |
0x00008ad2 movs r3, 3 | r3 = 3;
0x00008ad4 movs r2, 0 | r2 = 0;
0x00008ad6 movw r1, 0x297 | r1 = 0x297;
0x00008ada add r0, pc | r0 = 0x1161a;
0x00008adc adds r0, 0xe0 | r0 += 0xe0;
0x00008ade bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008ae2 ldr r2, [pc, 0x5c] |
0x00008ae4 ldr r3, [pc, 0x2c] | r3 = *(0x8b14);
0x00008ae6 add r2, pc | r2 = 0x1162c;
0x00008ae8 ldr r3, [r2, r3] | r3 = *(0x1162c);
0x00008aea ldr r2, [r3] | r2 = *(0x1162c);
0x00008aec ldr r3, [sp, 0xc] | r3 = var_ch;
0x00008aee eors r2, r3 | r2 ^= r3;
0x00008af0 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00008af4 bne 0x8b0a |
0x00008af6 add sp, 0x10 |
0x00008af8 pop {r4, r5, r6, pc} |
| label_2:
0x00008afa ldr r2, [pc, 0x48] |
0x00008afc mov.w r1, -1 | r1 = -1;
0x00008b00 movs r0, 5 | r0 = 5;
0x00008b02 add r2, pc | r2 = 0x1164c;
0x00008b04 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008b08 b 0x8a7c | goto label_0;
| }
0x00008b0a blx 0x348c | fprintf_chk ()
0x00008b0e nop |
0x00008b10 str r6, [r6, 0x2c] | *((r6 + 0x2c)) = r6;
0x00008b12 movs r2, r0 | r2 = r0;
0x00008b14 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00008b16 movs r0, r0 |
0x00008b18 subs r2, r1, 6 | r2 = r1 - 6;
0x00008b1a movs r1, r0 | r1 = r0;
0x00008b1c str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
0x00008b1e movs r2, r0 | r2 = r0;
0x00008b20 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00008b22 movs r2, r0 | r2 = r0;
0x00008b24 ldr r4, [r0] | r4 = *(r0);
0x00008b26 movs r2, r0 | r2 = r0;
0x00008b28 str r4, [r3, 0x7c] | *((r3 + 0x7c)) = r4;
0x00008b2a movs r2, r0 | r2 = r0;
0x00008b2c lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x00008b2e movs r0, r0 |
0x00008b30 adds r6, r3, 4 | r6 = r3 + 4;
0x00008b32 movs r1, r0 | r1 = r0;
0x00008b34 str r4, [r3, 0x78] | *((r3 + 0x78)) = r4;
0x00008b36 movs r2, r0 | r2 = r0;
0x00008b38 adds r6, r7, 3 | r6 = r7 + 3;
0x00008b3a movs r1, r0 | r1 = r0;
0x00008b3c subs r2, r2, 1 | r2--;
0x00008b3e movs r1, r0 | r1 = r0;
0x00008b40 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x00008b42 movs r2, r0 | r2 = r0;
0x00008b44 adds r6, r4, 2 | r6 = r4 + 2;
0x00008b46 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8b48 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00008b48 () | void fcn_00008b48 (int16_t arg_f0h, int16_t arg_110h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_4;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| void * addr;
| int16_t var_3ah;
| int16_t var_3ch;
| int16_t var_48h;
| int16_t var_4ah;
| int16_t var_50h;
| int16_t var_64h;
| int16_t var_4h_3;
| int16_t var_ch_3;
| int16_t var_10h_2;
| int16_t var_14h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00008b48 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00008b4c sub sp, 0x6c |
0x00008b4e str r2, [sp, 0xc] | var_ch_2 = r2;
0x00008b50 mov r8, r3 | r8 = r3;
0x00008b52 mov r6, r1 | r6 = r1;
0x00008b54 mov r7, r0 | r7 = r0;
0x00008b56 ldr r2, [pc, 0x288] |
0x00008b58 add.w sl, sp, 0x18 | sl += var_18h;
0x00008b5c ldr r3, [pc, 0x284] | r3 = *(0x8de4);
0x00008b5e mov ip, sl |
0x00008b60 ldr.w fp, [pc, 0x284] |
0x00008b64 movs r4, 0 | r4 = 0;
0x00008b66 add r2, pc | r2 = 0x1194c;
0x00008b68 mov.w sb, -1 | sb = -1;
0x00008b6c ldr r3, [r2, r3] |
0x00008b6e add r5, sp, 0x48 | r5 += var_48h;
0x00008b70 add fp, pc | fp = 0x1195c;
0x00008b72 add.w lr, fp, 0xf0 | lr += arg_f0h;
0x00008b76 ldr r3, [r3] | r3 = *(0x1194c);
0x00008b78 str r3, [sp, 0x64] | var_64h = r3;
0x00008b7a mov.w r3, 0 | r3 = 0;
0x00008b7e ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00008b82 str r4, [sp, 0x14] | var_14h = r4;
0x00008b84 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x00008b88 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00008b8c ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x00008b90 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00008b94 movs r2, 3 | r2 = 3;
0x00008b96 add.w r0, fp, 0x110 | r0 += arg_110h;
0x00008b9a mov.w r1, 0x2b8 | r1 = 0x2b8;
0x00008b9e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00008ba2 str.w sb, [r8] | __asm ("str.w sb, [r8]");
0x00008ba6 movw r1, 0x2c2 | r1 = 0x2c2;
0x00008baa ldrb r3, [r7] | r3 = *(r7);
0x00008bac ldr r0, [pc, 0x23c] |
0x00008bae str r4, [sp, 0x48] | var_48h = r4;
0x00008bb0 cmp r3, 0x5b |
0x00008bb2 strd r4, r4, [r5, 4] | __asm ("strd r4, r4, [r5, 4]");
0x00008bb6 it eq |
| if (r3 != 0x5b) {
0x00008bb8 moveq r2, r6 | r2 = r6;
| }
0x00008bba strd r4, r4, [r5, 0xc] | __asm ("strd r4, r4, [var_4h_3]");
0x00008bbe strd r4, r4, [r5, 0x14] | __asm ("strd r4, r4, [var_ch_3]");
0x00008bc2 it ne |
| if (r3 == 0x5b) {
0x00008bc4 addne r2, r6, 1 | r2 = r6 + 1;
| }
0x00008bc6 add r0, pc | r0 = 0x119b6;
0x00008bc8 itt eq |
| if (r3 != 0x5b) {
0x00008bca addeq r7, 1 | r7++;
| }
| if (r3 != 0x5b) {
0x00008bcc addeq r6, r6, -1 | r6 += -1;
| }
0x00008bd0 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00008bd4 mov r4, r0 | r4 = r0;
0x00008bd6 cmp r0, 0 |
| if (r0 == 0) {
0x00008bd8 beq.w 0x8d16 | goto label_7;
| }
0x00008bdc mov r2, r6 | r2 = r6;
0x00008bde mov r1, r7 | r1 = r7;
0x00008be0 blx 0x32a0 | pthread_cond_signal ();
0x00008be4 movs r1, 0 | r1 = 0;
0x00008be6 mov r2, sl | r2 = sl;
0x00008be8 add r3, sp, 0x14 | r3 += var_14h;
0x00008bea mov r0, r4 | r0 = r4;
0x00008bec strb r1, [r4, r6] | *((r4 + r6)) = r1;
0x00008bee blx 0x3218 | fcn_00003218 ();
0x00008bf0 adds.w r0, r4, r4, lsl 4 | r0 = r4 + (r4 << 4);
0x00008bf4 cmp r0, 0 |
| if (r0 != 0) {
0x00008bf6 bne 0x8cae | goto label_8;
| }
0x00008bf8 ldr.w ip, [sp, 0x14] | ip = var_14h;
0x00008bfc mov r1, ip | r1 = ip;
| if (r1 == 0) {
0x00008bfe cbz r1, 0x8c16 | goto label_0;
| }
| do {
0x00008c00 ldr r6, [r1, 4] | r6 = *((r1 + 4));
0x00008c02 cmp r6, 2 |
| if (r6 == 2) {
0x00008c04 beq.w 0x8d8e | goto label_9;
| }
0x00008c08 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00008c0a cmp r3, 0 |
| if (r3 == 0) {
0x00008c0c beq.w 0x8d1e | goto label_10;
| }
0x00008c10 mov r1, r3 | r1 = r3;
0x00008c12 cmp r1, 0 |
0x00008c14 bne 0x8c00 |
| } while (r1 != 0);
| label_0:
0x00008c16 movs r6, 2 | r6 = 2;
0x00008c18 mov.w r3, -1 | r3 = -1;
0x00008c1c str r3, [sp, 0x10] | var_10h = r3;
| label_1:
0x00008c1e mov r0, ip | r0 = ip;
0x00008c20 blx 0x30fc | BIO_push ();
0x00008c24 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00008c26 cmp r2, 0 |
| if (r2 != 0) {
0x00008c28 bne 0x8cc8 | goto label_11;
| }
| do {
0x00008c2a movs r1, 1 | r1 = 1;
0x00008c2c mov r0, r6 | r0 = r6;
0x00008c2e blx 0x3200 | r0 = fcn_00003200 ();
0x00008c32 adds r1, r0, 1 | r1 = r0 + 1;
0x00008c34 mov r3, r0 | r3 = r0;
0x00008c36 str.w r0, [r8] | __asm ("str.w r0, [r8]");
| if (r1 == r0) {
0x00008c3a beq.w 0x8d44 | goto label_12;
| }
0x00008c3e ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00008c40 mov.w r1, -1 | r1 = -1;
0x00008c44 movs r0, 3 | r0 = 3;
0x00008c46 strd r7, r2, [sp] | __asm ("strd r7, r2, [sp]");
0x00008c4a ldr r2, [pc, 0x1a4] |
0x00008c4c add r2, pc | r2 = 0x11a42;
0x00008c4e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008c52 ldr.w r0, [r8] | r0 = *(r8);
0x00008c56 bl 0x7eb8 | fcn_00007eb8 (r0);
0x00008c5a adds r0, 1 | r0++;
| if (r0 == 1) {
0x00008c5c beq.w 0x8da8 | goto label_13;
| }
0x00008c60 cmp r6, 2 |
0x00008c62 ldr.w r0, [r8] | r0 = *(r8);
0x00008c66 ittee eq |
| if (r6 != 2) {
0x00008c68 moveq r2, 0x10 | r2 = 0x10;
| }
| if (r6 != 2) {
0x00008c6a addeq r1, sp, 0x38 | r1 += addr;
| }
| if (r6 == 2) {
0x00008c6c movne r2, 0x1c | r2 = 0x1c;
| }
| if (r6 == 2) {
0x00008c6e movne r1, r5 | r1 = r5;
| }
0x00008c70 blx 0x2f40 | r0 = connect (r0, r1, r2);
0x00008c74 adds r2, r0, 1 | r2 = r0 + 1;
0x00008c76 str r0, [sp, 0x10] | var_10h = r0;
| if (r2 == r0) {
0x00008c78 beq.w 0x8dcc | goto label_14;
| }
| label_4:
0x00008c7c cmp r0, 0xb |
0x00008c7e it ne |
| if (r0 != 0xb) {
0x00008c80 cmpne r0, 0x73 | __asm ("cmpne r0, 0x73");
| }
| if (r0 == 0xb) {
0x00008c82 beq 0x8d52 | goto label_15;
| }
| label_3:
0x00008c84 cmp r0, 0 |
0x00008c86 it ne |
| if (r0 != 0) {
0x00008c88 cmpne r0, 0x73 | __asm ("cmpne r0, 0x73");
| }
0x00008c8a ite ne |
| if (r0 == 0) {
0x00008c8c movne r3, 1 | r3 = 1;
| }
| if (r0 != 0) {
0x00008c8e moveq r3, 0 | r3 = 0;
| }
0x00008c90 cmp r0, 0xb |
0x00008c92 ite eq |
| if (r0 != 0xb) {
0x00008c94 moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0xb) {
0x00008c96 andne r3, r3, 1 | r3 &= 1;
| }
| if (r3 == 0) {
0x00008c9a cbz r3, 0x8cd8 | goto label_2;
| }
0x00008c9c ldr.w r0, [r8] | r0 = *(r8);
0x00008ca0 bl 0x8988 | fcn_00008988 (r0);
0x00008ca4 mov.w r3, -1 | r3 = -1;
0x00008ca8 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00008cac b 0x8cd8 | goto label_2;
| label_8:
0x00008cae ldr r2, [pc, 0x144] |
0x00008cb0 mov r3, r4 | r3 = r4;
0x00008cb2 str r0, [sp] | *(sp) = r0;
0x00008cb4 mov.w r1, -1 | r1 = -1;
0x00008cb8 movs r0, 5 | r0 = 5;
0x00008cba movs r6, 2 | r6 = 2;
0x00008cbc add r2, pc | r2 = 0x11ab6;
0x00008cbe bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008cc2 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00008cc4 cmp r2, 0 |
0x00008cc6 beq 0x8c2a |
| } while (r2 == 0);
| label_11:
0x00008cc8 ldr r2, [pc, 0x12c] |
0x00008cca mov r3, r4 | r3 = r4;
0x00008ccc mov.w r1, -1 | r1 = -1;
0x00008cd0 movs r0, 5 | r0 = 5;
0x00008cd2 add r2, pc | r2 = 0x11ace;
0x00008cd4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008cd6 invalid |
| label_2:
0x00008cd8 ldr r0, [pc, 0x120] |
0x00008cda mov r2, r4 | r2 = r4;
0x00008cdc movw r1, 0x352 | r1 = 0x352;
0x00008ce0 add r0, pc | r0 = 0x11ae0;
0x00008ce2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| do {
0x00008ce6 ldr r0, [pc, 0x118] |
0x00008ce8 movs r3, 3 | r3 = 3;
0x00008cea add r2, sp, 0x10 | r2 += var_10h;
0x00008cec mov.w r1, 0x354 | r1 = 0x354;
0x00008cf0 add r0, pc |
0x00008cf2 add.w r0, r0, 0x110 | r0 = 0x11c06;
0x00008cf6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008cfa ldr r2, [pc, 0x108] |
0x00008cfc ldr r3, [pc, 0xe4] | r3 = *(0x8de4);
0x00008cfe ldr r0, [sp, 0x10] | r0 = var_10h;
0x00008d00 add r2, pc | r2 = 0x11b0a;
0x00008d02 ldr r3, [r2, r3] | r3 = *(0x11b0a);
0x00008d04 ldr r2, [r3] | r2 = *(0x11b0a);
0x00008d06 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00008d08 eors r2, r3 | r2 ^= r3;
0x00008d0a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00008d0e bne 0x8ddc | goto label_16;
| }
0x00008d10 add sp, 0x6c |
0x00008d12 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x00008d16 mvn r3, 0x62 | r3 = ~0x62;
0x00008d1a str r3, [sp, 0x10] | var_10h = r3;
0x00008d1c b 0x8ce6 |
| } while (1);
| label_10:
0x00008d1e cmp r6, 0xa |
| if (r6 != 0xa) {
0x00008d20 bne.w 0x8c16 | goto label_0;
| }
0x00008d24 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00008d26 add.w lr, sp, 0x50 | lr += var_50h;
0x00008d2a ldr r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x00008d2c strh.w r6, [sp, 0x48] | var_48h = r6;
0x00008d30 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00008d32 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00008d34 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00008d36 strh.w r2, [sp, 0x4a] | var_4ah = r2;
0x00008d3a ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00008d3c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00008d3e stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00008d42 b 0x8c1e | goto label_1;
| label_12:
0x00008d44 ldr r0, [pc, 0xc0] |
0x00008d46 mov r1, r3 | r1 = r3;
0x00008d48 add r0, pc | r0 = 0x11b54;
0x00008d4a bl 0x7d88 | fcn_00007d88 (r0, r1);
0x00008d4e str r0, [sp, 0x10] | var_10h = r0;
0x00008d50 b 0x8cd8 | goto label_2;
| label_15:
0x00008d52 ldr r6, [pc, 0xb8] |
0x00008d54 movs r2, 4 | r2 = 4;
0x00008d56 movw r1, 0x335 | r1 = 0x335;
0x00008d5a add r6, pc | r6 = 0x11b6c;
0x00008d5c mov r0, r6 | r0 = r6;
0x00008d5e bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00008d62 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00008d64 cbz r0, 0x8dc4 |
0x00008d66 ldr.w r3, [r8] | r3 = *(r8);
0x00008d6a movs r2, 4 | r2 = 4;
0x00008d6c mov r1, r5 | r1 = r5;
0x00008d6e str r3, [r0] | *(r0) = r3;
0x00008d70 ldr r3, [pc, 0x9c] |
0x00008d72 add r3, pc | r3 = 0x11b86;
0x00008d74 ldr.w r0, [r3, 0x10c] | r0 = *(0x11c92);
0x00008d78 bl 0xd5f8 | r0 = fcn_0000d5f8 (r0, r1, r2);
| if (r0 != 0) {
0x00008d7c cbz r0, 0x8db8 |
0x00008d7e ldr r2, [pc, 0x94] |
0x00008d80 movs r0, 3 | r0 = 3;
0x00008d82 movs r1, 0xf | r1 = 0xf;
0x00008d84 add r2, pc | r2 = 0x11b9e;
0x00008d86 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008d8a ldr r0, [sp, 0x10] | r0 = var_10h;
0x00008d8c b 0x8c84 | goto label_3;
| label_9:
0x00008d8e ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x00008d90 movs r3, 0 | r3 = 0;
0x00008d92 strd r3, r3, [sp, 0x40] | __asm ("strd r3, r3, [sp, 0x40]");
0x00008d96 strh.w r6, [sp, 0x38] | addr = r6;
0x00008d98 str r0, [r7] | *(r7) = r0;
0x00008d9a ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00008d9c str r3, [sp, 0x3c] | var_3ch = r3;
0x00008d9e ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00008da0 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00008da2 strh.w r3, [sp, 0x3a] | var_3ah = r3;
0x00008da6 b 0x8c1e | goto label_1;
| label_13:
0x00008da8 ldr r0, [pc, 0x6c] |
0x00008daa ldr.w r1, [r8] | r1 = *(r8);
0x00008dae add r0, pc | r0 = 0x11bca;
0x00008db0 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x00008db4 str r0, [sp, 0x10] | var_10h = r0;
0x00008db6 b 0x8c84 | goto label_3;
| }
0x00008db8 mov r2, r5 | r2 = r5;
0x00008dba movw r1, 0x33f | r1 = 0x33f;
0x00008dbe mov r0, r6 | r0 = r6;
0x00008dc0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x00008dc4 mvn r3, 0x62 | r3 = ~0x62;
0x00008dc8 str r3, [sp, 0x10] | var_10h = r3;
0x00008dca b 0x8cd8 | goto label_2;
| label_14:
0x00008dcc ldr r0, [pc, 0x4c] |
0x00008dce ldr.w r1, [r8] | r1 = *(r8);
0x00008dd2 add r0, pc | r0 = 0x11bf2;
0x00008dd4 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x00008dd8 str r0, [sp, 0x10] | var_10h = r0;
0x00008dda b 0x8c7c | goto label_4;
| label_16:
0x00008ddc blx 0x348c | fprintf_chk ()
0x00008de0 str r2, [r5, 0x10] | *((r5 + 0x10)) = r2;
0x00008de2 movs r2, r0 | r2 = r0;
0x00008de4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00008de6 movs r0, r0 |
0x00008de8 adds r4, r7, 6 | r4 = r7 + 6;
0x00008dea movs r1, r0 | r1 = r0;
0x00008dec adds r2, r2, r7 | r2 += r7;
0x00008dee movs r1, r0 | r1 = r0;
0x00008df0 subs r4, r4, r7 | r4 -= r7;
0x00008df2 movs r1, r0 | r1 = r0;
0x00008df4 subs r0, r4, r4 | r0 = r4 - r4;
0x00008df6 movs r1, r0 | r1 = r0;
0x00008df8 subs r6, r6, r4 | r6 -= r4;
0x00008dfa movs r1, r0 | r1 = r0;
0x00008dfc adds r0, r7, r2 | r0 = r7 + r2;
0x00008dfe movs r1, r0 | r1 = r0;
0x00008e00 adds r4, r7, 0 | r4 = r7 + 0;
0x00008e02 movs r1, r0 | r1 = r0;
0x00008e04 ldrsh r0, [r2, r6] | r0 = *((r2 + r6));
0x00008e06 movs r2, r0 | r2 = r0;
0x00008e08 subs r0, r4, r3 | r0 = r4 - r3;
0x00008e0a movs r1, r0 | r1 = r0;
0x00008e0c adds r6, r7, r0 | r6 = r7 + r0;
0x00008e0e movs r1, r0 | r1 = r0;
0x00008e10 str r2, [r5, 0x48] | *((r5 + 0x48)) = r2;
0x00008e12 movs r2, r0 | r2 = r0;
0x00008e14 subs r0, r3, r3 | r0 = r3 - r3;
0x00008e16 movs r1, r0 | r1 = r0;
0x00008e18 subs r2, r4, r2 | r2 = r4 - r2;
0x00008e1a movs r1, r0 | r1 = r0;
0x00008e1c ldr r6, [pc, 0x28] | r6 = *(0x8e48);
0x00008e1e movs r1, r0 | r1 = r0;
0x00008e20 ldr r3, [pc, 0x134] |
0x00008e22 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00008e26 sub sp, 0x1c |
0x00008e28 str r1, [sp, 4] | var_4h_3 = r1;
0x00008e2a mov r6, r0 | r6 = r0;
0x00008e2c add r3, pc | r3 = 0x11d88;
0x00008e2e movs r4, 0 | r4 = 0;
0x00008e30 ldr r2, [pc, 0x128] |
0x00008e32 add.w r0, r3, 0x11c | r0 = r3 + 0x11c;
0x00008e36 ldr r1, [pc, 0x128] |
0x00008e38 ldr r3, [pc, 0x128] | r3 = *(0x8f64);
0x00008e3a add r2, pc |
0x00008e3c ldr r7, [pc, 0x128] |
0x00008e3e add r1, pc | r1 = 0x11da4;
0x00008e40 ldr.w r2, [r2, 0x110] | r2 = *(0x11eaa);
0x00008e44 ldr r3, [r1, r3] |
0x00008e46 movw r1, 0x3e3 | r1 = 0x3e3;
0x00008e4a ldr.w r8, [pc, 0x120] | r8 = *(0x00008f6c);
0x00008e4e add r7, pc | r7 = 0x11dba;
0x00008e50 ldr.w sb, [pc, 0x11c] | sb = *(0x00008f70);
0x00008e54 ldr r3, [r3] | r3 = *(0x11da4);
0x00008e56 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00008e58 mov.w r3, 0 | r3 = 0;
0x00008e5c ldr r3, [r2] | r3 = *(0x11eaa);
0x00008e5e ldr.w fp, [pc, 0x114] |
0x00008e62 movs r2, 3 | r2 = 3;
0x00008e64 str r4, [sp, 0xc] | var_ch_3 = r4;
0x00008e66 add r8, pc | r8 += pc;
0x00008e68 str r3, [sp, 0x10] | var_10h_2 = r3;
0x00008e6a add sb, pc | sb += pc;
0x00008e6c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00008e70 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00008e72 add fp, pc | fp = 0x11dec;
| if (r2 == 0) {
| label_5:
0x00008e74 cbz r2, 0x8eac | goto label_17;
| }
| do {
0x00008e76 ldr r3, [r2, 8] | r3 = *((r2 + 8));
| if (r3 == 0) {
0x00008e78 cbz r3, 0x8eac | goto label_17;
| }
0x00008e7a ldr r5, [r3] | r5 = *(r3);
0x00008e7c movs r4, 1 | r4 = 1;
0x00008e7e mov r0, r5 | r0 = r5;
0x00008e80 blx 0x3760 | fcn_00003760 ();
0x00008e84 and r2, r5, 0x1f | r2 = r5 & 0x1f;
0x00008e88 ldr.w r3, [r6, r0, lsl 2] | offset_0 = r0 << 2;
| r3 = *((r6 + offset_0));
0x00008e8a adds r0, 0x20 | r0 += 0x20;
0x00008e8c lsls r4, r2 | r4 <<= r2;
0x00008e8e tst r4, r3 |
| if ((r4 & r3) != 0) {
0x00008e90 beq 0x8e9c |
0x00008e92 mov r0, r5 | r0 = r5;
0x00008e94 bl 0x86ec | r0 = fcn_000086ec (r0);
0x00008e98 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00008e9a cbnz r0, 0x8edc | goto label_18;
| }
| }
0x00008e9c ldr.w r0, [r7, 0x110] | r0 = *((r7 + 0x110));
0x00008ea0 add r1, sp, 0x10 | r1 += var_10h_2;
0x00008ea2 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00008ea6 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00008ea8 cmp r2, 0 |
0x00008eaa bne 0x8e76 |
| } while (r2 != 0);
| label_17:
0x00008eac ldr r0, [pc, 0xc8] |
0x00008eae movs r3, 3 | r3 = 3;
0x00008eb0 add r2, sp, 0xc | r2 += var_ch_3;
0x00008eb2 movw r1, 0x401 | r1 = 0x401;
0x00008eb6 add r0, pc |
0x00008eb8 add.w r0, r0, 0x11c | r0 = 0x11f4e;
0x00008ebc bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00008ec0 ldr r2, [pc, 0xb8] |
0x00008ec2 ldr r3, [pc, 0xa0] | r3 = *(0x8f66);
0x00008ec4 ldr r0, [sp, 0xc] | r0 = var_ch_3;
0x00008ec6 add r2, pc | r2 = 0x11e46;
0x00008ec8 ldr r3, [r2, r3] | r3 = *(0x11e46);
0x00008eca ldr r2, [r3] | r2 = *(0x11e46);
0x00008ecc ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x00008ece eors r2, r3 | r2 ^= r3;
0x00008ed0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00008ed4 bne 0x8f54 | goto label_19;
| }
0x00008ed6 add sp, 0x1c |
0x00008ed8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x00008edc mov r0, r5 | r0 = r5;
0x00008ede bl 0xd50c | r0 = fcn_0000d50c (r0);
| if (r0 == 0) {
0x00008ee2 cbz r0, 0x8f46 | goto label_20;
| }
| label_6:
0x00008ee4 mov r0, r5 | r0 = r5;
0x00008ee6 blx 0x3760 | fcn_00003760 ();
0x00008eea ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00008eec adds r0, 0x44 | r0 += 0x44;
0x00008eee add.w r0, r8, r0, lsl 2 | r0 = r8 + (r0 << 2);
0x00008ef2 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x00008ef4 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00008ef6 bic.w r2, r2, r4 | r2 = BIT_MASK (r2, r4);
0x00008efa str r2, [r0, 4] | *((r0 + 4)) = r2;
0x00008efc ldr.w r0, [r8, 0x110] | r0 = *((r8 + 0x110));
0x00008f00 bl 0xd800 | r0 = fcn_0000d800 (r0, r1);
0x00008f04 cbz r0, 0x8f2c |
| while (1) {
0x00008f06 ldr.w r2, [sb, 0x110] | r2 = *((sb + 0x110));
0x00008f0a ldr.w r4, [sb, 0x194] | r4 = *((sb + 0x194));
0x00008f0e ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00008f10 str r2, [sp, 0x10] | var_10h_2 = r2;
| if (r4 != 0) {
0x00008f12 cbz r4, 0x8f1c |
0x00008f14 mov r1, sl | r1 = sl;
0x00008f16 mov r0, r5 | r0 = r5;
0x00008f18 blx r4 | uint32_t (*r4)(uint32_t, uint32_t) (r0, r1);
0x00008f1a ldr r2, [sp, 0x10] | r2 = var_10h_2;
| }
0x00008f1c cmp.w sl, -1 |
0x00008f20 ittt eq |
| if (sl != -1) {
0x00008f22 ldreq r3, [sp, 4] | r3 = var_4h_3;
| }
| if (sl != -1) {
0x00008f24 streq sl, [sp, 0xc] | var_ch_3 = sl;
| }
| if (sl == -1) {
0x00008f28 str r5, [r3] | *(r3) = r5;
| }
0x00008f2a b 0x8e74 | goto label_5;
0x00008f2c ldr r2, [pc, 0x50] |
0x00008f2e mov.w r1, -1 | r1 = -1;
0x00008f32 movs r0, 6 | r0 = 6;
0x00008f34 add r2, pc | r2 = 0x11eb8;
0x00008f36 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008f3a ldr.w r0, [r8, 0x110] | r0 = *((r8 + 0x110));
0x00008f3e add r1, sp, 0x10 | r1 += var_10h_2;
0x00008f40 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00008f44 b 0x8f06 |
| }
| label_20:
0x00008f46 mov r2, fp | r2 = fp;
0x00008f48 mov.w r1, -1 | r1 = -1;
0x00008f4c movs r0, 6 | r0 = 6;
0x00008f4e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00008f52 b 0x8ee4 | goto label_6;
| label_19:
0x00008f54 blx 0x348c | r0 = fprintf_chk ()
0x00008f58 subs r0, r0, r4 | r0 -= r4;
0x00008f5a movs r1, r0 | r1 = r0;
0x00008f5c str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x00008f5e movs r2, r0 | r2 = r0;
0x00008f60 ldrsh r2, [r2, r1] | r2 = *((r2 + r1));
0x00008f62 movs r2, r0 | r2 = r0;
0x00008f64 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00008f66 movs r0, r0 |
0x00008f68 str r6, [r1, 0x3c] | *((r1 + 0x3c)) = r6;
0x00008f6a movs r2, r0 | r2 = r0;
0x00008f6c str r6, [r6, 0x38] | *((r6 + 0x38)) = r6;
0x00008f6e movs r2, r0 | r2 = r0;
0x00008f70 str r2, [r6, 0x38] | *((r6 + 0x38)) = r2;
0x00008f72 movs r2, r0 | r2 = r0;
0x00008f74 adds r2, r7, r7 | r2 = r7 + r7;
0x00008f76 movs r1, r0 | r1 = r0;
0x00008f78 subs r6, r6, r1 | r6 -= r1;
0x00008f7a movs r1, r0 | r1 = r0;
0x00008f7c ldrb r2, [r1, r7] | r2 = *((r1 + r7));
0x00008f7e movs r2, r0 | r2 = r0;
0x00008f80 adds r0, r6, r5 | r0 = r6 + r5;
0x00008f82 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x8f84 */
| #include <stdint.h>
|
; (fcn) fcn.00008f84 () | void fcn_00008f84 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_8h;
| int16_t var_ch_4;
| int16_t var_14h_3;
| int16_t var_94h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00008f84 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x00008f88 mov r8, r3 | r8 = r3;
0x00008f8a ldr r5, [pc, 0x228] |
0x00008f8c sub sp, 0x9c |
0x00008f8e movs r3, 0 | r3 = 0;
0x00008f90 add.w sb, sp, 0xc | sb += var_ch_4;
0x00008f94 ldr r4, [pc, 0x220] | r4 = *(0x91b8);
0x00008f96 mov r7, r2 | r7 = r2;
0x00008f98 add r5, pc | r5 = 0x12152;
0x00008f9a movs r2, 3 | r2 = 3;
0x00008f9c ldr r4, [r5, r4] |
0x00008f9e mov r5, r0 | r5 = r0;
0x00008fa0 ldr r4, [r4] | r4 = *(0x12152);
0x00008fa2 str r4, [sp, 0x94] | var_94h = r4;
0x00008fa4 mov.w r4, 0 | r4 = 0;
0x00008fa8 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00008fac str r3, [sp, 8] | var_8h = r3;
0x00008fae mov r4, r1 | r4 = r1;
0x00008fb0 ldr r3, [pc, 0x208] |
0x00008fb2 add r3, pc | r3 = 0x12172;
0x00008fb4 add.w r1, r3, 0x134 | r1 = r3 + 0x134;
0x00008fb6 strb r2, [r3, 6] | *((r3 + 6)) = r2;
0x00008fb8 ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x00008fba stm.w sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
0x00008fbe add.w r0, r3, 0x13c | r0 = r3 + 0x13c;
0x00008fc2 movs r1, 0xfc | r1 = 0xfc;
0x00008fc4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00008fc8 mov r0, r7 | r0 = r7;
0x00008fca blx 0x3644 | fcn_00003644 ();
0x00008fce ldr r3, [pc, 0x1f0] |
0x00008fd0 add r3, pc | r3 = 0x12196;
0x00008fd2 ldr.w r2, [r3, 0x104] |
0x00008fd6 ldr r2, [r2, 0xc] | r2 = *(0x122a6);
0x00008fd8 cmp r2, 0 |
| if (r2 == 0) {
0x00008fda beq 0x908e | goto label_3;
| }
0x00008fdc cmp r5, 0 |
| if (r5 != 0) {
0x00008fde bne 0x9080 | goto label_4;
| }
| if (r4 != 0) {
0x00008fe0 cbz r4, 0x8fea |
0x00008fe2 ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x00008fe6 stm.w sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
| }
| label_0:
0x00008fea ldr r4, [pc, 0x1d8] |
0x00008fec add r4, pc | r4 = 0x121b6;
0x00008fee ldr.w r1, [r4, 0x108] | r1 = *(0x122be);
0x00008ff2 cmp r1, 0 |
| if (r1 == 0) {
0x00008ff4 beq 0x9092 | goto label_5;
| }
0x00008ff6 add.w r5, r4, 0x1a0 | r5 = r4 + 0x1a0;
0x00008ffa add.w r6, r4, 0x108 | r6 = r4 + 0x108;
0x00008ffe b 0x9012 |
| while (r0 == 0) {
0x00009000 mov r1, r6 | r1 = r6;
0x00009002 ldr.w r0, [r4, 0x104] | r0 = *((r4 + 0x104));
0x00009006 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x0000900a ldr.w r1, [r4, 0x108] | r1 = *((r4 + 0x108));
0x0000900e cmp r1, 0 |
| if (r1 == 0) {
0x00009010 beq 0x9092 | goto label_5;
| }
0x00009012 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00009014 mov r2, r5 | r2 = r5;
0x00009016 mov r1, r4 | r1 = r4;
0x00009018 ldr r0, [r3] | r0 = *(r3);
0x0000901a bl 0x8010 | r0 = fcn_00008010 (r0, r1, r2);
0x0000901e cmp r0, 0 |
0x00009020 beq 0x9000 |
| }
0x00009022 ldr.w r3, [r4, 0x108] | r3 = *((r4 + 0x108));
0x00009026 cmp r3, 0 |
| if (r3 == 0) {
0x00009028 beq 0x9092 | goto label_5;
| }
0x0000902a add r5, sp, 8 | r5 += var_8h;
0x0000902c movs r2, 0 | r2 = 0;
0x0000902e str.w r2, [r8] | __asm ("str.w r2, [r8]");
| label_2:
0x00009032 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00009034 ldr r3, [pc, 0x190] |
0x00009036 ldr r2, [r2] | r2 = *(r2);
0x00009038 add r3, pc | r3 = 0x12204;
0x0000903a ldr.w r0, [r3, 0x104] | r0 = *(0x12308);
0x0000903e add.w r1, r3, 0x108 | r1 = r3 + 0x108;
0x00009042 str r2, [sp, 8] | var_8h = r2;
0x00009044 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
| do {
| label_1:
0x00009048 mov r0, r7 | r0 = r7;
0x0000904a blx 0x35b4 | fcn_000035b4 ();
0x0000904c invalid |
0x0000904e ldr r0, [pc, 0x17c] |
0x00009050 movs r3, 3 | r3 = 3;
0x00009052 mov r2, r5 | r2 = r5;
0x00009054 mov.w r1, 0x148 | r1 = 0x148;
0x00009058 add r0, pc |
0x0000905a add.w r0, r0, 0x13c | r0 = 0x12366;
0x0000905e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00009062 ldr r2, [pc, 0x16c] |
0x00009064 ldr r3, [pc, 0x150] | r3 = *(0x91b8);
0x00009066 ldr r0, [sp, 8] | r0 = var_8h;
0x00009068 add r2, pc | r2 = 0x1223e;
0x0000906a ldr r3, [r2, r3] | r3 = *(0x1223e);
0x0000906c ldr r2, [r3] | r2 = *(0x1223e);
0x0000906e ldr r3, [sp, 0x94] | r3 = var_94h;
0x00009070 eors r2, r3 | r2 ^= r3;
0x00009072 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00009076 bne.w 0x91ae | goto label_6;
| }
0x0000907a add sp, 0x9c |
0x0000907c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x00009080 add.w r3, r3, 0x198 | r3 += 0x198;
0x00009084 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x00009088 stm.w sb, {r0, r1} | *(sb) = r0;
| *((sb + 4)) = r1;
0x0000908a movs r3, r0 | r3 = r0;
0x0000908c b 0x8fea | goto label_0;
| label_3:
0x0000908e add r5, sp, 8 | r5 += var_8h;
0x00009090 b 0x9048 |
| } while (1);
| label_5:
0x00009092 ldr r4, [pc, 0x140] |
0x00009094 movs r2, 0x80 | r2 = 0x80;
0x00009096 add r5, sp, 0x14 | r5 += var_14h_3;
0x00009098 add r4, pc | r4 = 0x12272;
0x0000909a add.w r6, r4, 0x80 | r6 = r4 + 0x80;
0x0000909e mov r0, r4 | r0 = r4;
0x000090a0 mov r1, r6 | r1 = r6;
0x000090a2 blx 0x32a0 | pthread_cond_signal ();
0x000090a6 movs r2, 0x80 | r2 = 0x80;
0x000090a8 add.w r1, r4, 0x114 | r1 = r4 + 0x114;
0x000090ac mov r0, r5 | r0 = r5;
0x000090ae blx 0x32a0 | pthread_cond_signal ();
0x000090b2 mov r0, r7 | r0 = r7;
0x000090b4 blx 0x35b4 | fcn_000035b4 ();
0x000090b8 movs r3, 0 | r3 = 0;
0x000090ba mov r2, r5 | r2 = r5;
0x000090bc mov r1, r4 | r1 = r4;
0x000090be str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000090c2 ldr.w r0, [r4, 0x100] | r0 = *(0x12372);
0x000090c6 blx 0x33b4 | close (r0);
0x000090ca str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x000090ce mov r0, r7 | r0 = r7;
0x000090d0 blx 0x3644 | fcn_00003644 ();
0x000090d4 ldr.w r3, [r8] | r3 = *(r8);
0x000090d8 adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 == r3) {
0x000090da beq 0x919a | goto label_7;
| }
0x000090dc ldr r2, [pc, 0xf8] |
0x000090de mov.w r1, -1 | r1 = -1;
0x000090e2 movs r0, 1 | r0 = 1;
0x000090e4 add r2, pc | r2 = 0x122c0;
0x000090e6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000090ea mov r0, r5 | r0 = r5;
0x000090ec add r5, sp, 8 | r5 += var_8h;
0x000090ee mov r1, r5 | r1 = r5;
0x000090f0 bl 0x8e20 | r0 = void (*0x8e20)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
0x000090f4 adds r1, r0, 1 | r1 = r0 + 1;
0x000090f6 it eq |
| if (r1 == r0) {
0x000090f8 streq r0, [r8] | *(r8) = r0;
| goto label_8;
| }
| if (r1 == r0) {
| label_8:
0x000090fc beq 0x9048 | goto label_1;
| }
0x000090fe mov r1, r6 | r1 = r6;
0x00009100 add.w r6, r4, 0x1a0 | r6 = r4 + 0x1a0;
0x00009104 movs r2, 0x80 | r2 = 0x80;
0x00009106 mov r0, r6 | r0 = r6;
0x00009108 blx 0x32a0 | pthread_cond_signal ();
0x0000910c movs r3, 0 | r3 = 0;
0x0000910e add.w r2, r4, 0x198 | r2 = r4 + 0x198;
0x00009112 ldr.w r0, [r4, 0x100] | r0 = *((r4 + 0x100));
0x00009116 mov r1, r3 | r1 = r3;
0x00009118 str r2, [sp] | *(sp) = r2;
0x0000911a mov r2, r6 | r2 = r6;
0x0000911c blx 0x33b4 | close (r0);
0x0000911e strd pc, r1, [sl, -0x2c0] | __asm ("strd pc, r1, [sl, -0x2c0]");
0x00009122 subs r7, 0xff | r7 -= 0xff;
0x00009124 mov sb, r0 | sb = r0;
| if (r7 == 0xff) {
0x00009126 beq 0x918a | goto label_9;
| }
0x00009128 ldr r2, [pc, 0xb0] |
0x0000912a mov r3, r0 | r3 = r0;
0x0000912c mov.w r1, -1 | r1 = -1;
0x00009130 movs r0, 1 | r0 = 1;
0x00009132 add r2, pc | r2 = 0x12312;
0x00009134 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00009138 ldr.w r3, [r8] | r3 = *(r8);
0x0000913c orrs.w r3, sb, r3 | r3 = sb | r3;
| if (r3 == sb) {
0x00009140 beq 0x9186 | goto label_10;
| }
0x00009142 ldr.w r3, [r4, 0x104] | r3 = *((r4 + 0x104));
0x00009146 ldr r3, [r3] | r3 = *(r3);
0x00009148 str.w r3, [r4, 0x108] | __asm ("str.w r3, [r4, 0x108]");
| if (r3 == 0) {
0x0000914c cbz r3, 0x91a8 | goto label_11;
| }
0x0000914e add.w sb, r4, 0x108 | sb = r4 + 0x108;
0x00009152 b 0x9164 |
| while (r0 == 0) {
0x00009154 ldr.w r0, [r4, 0x104] | r0 = *((r4 + 0x104));
0x00009158 mov r1, sb | r1 = sb;
0x0000915a bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x0000915e ldr.w r3, [r4, 0x108] | r3 = *((r4 + 0x108));
| if (r3 == 0) {
0x00009162 cbz r3, 0x91a8 | goto label_11;
| }
0x00009164 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00009166 mov r2, r6 | r2 = r6;
0x00009168 mov r1, r4 | r1 = r4;
0x0000916a ldr r0, [r3] | r0 = *(r3);
0x0000916c bl 0x8010 | r0 = fcn_00008010 (r0, r1, r2);
0x00009170 cmp r0, 0 |
0x00009172 beq 0x9154 |
| }
0x00009174 ldr.w r3, [r4, 0x108] | r3 = *((r4 + 0x108));
0x00009178 movs r2, 0 | r2 = 0;
0x0000917a str.w r2, [r8] | __asm ("str.w r2, [r8]");
0x0000917e cmp r3, 0 |
| if (r3 != 0) {
0x00009180 bne.w 0x9032 | goto label_2;
| }
| do {
0x00009184 movs r3, 0 | r3 = 0;
| label_10:
0x00009186 str r3, [sp, 8] | var_8h = r3;
0x00009188 b 0x9048 | goto label_1;
| label_9:
0x0000918a ldr r0, [pc, 0x54] |
0x0000918c movs r1, 0 | r1 = 0;
0x0000918e add r0, pc | r0 = 0x12374;
0x00009190 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x00009194 str.w sb, [r8] | __asm ("str.w sb, [r8]");
0x00009196 str r0, [sp] | *(sp) = r0;
0x00009198 b 0x9048 | goto label_1;
| label_7:
0x0000919a ldr r0, [pc, 0x48] |
0x0000919c movs r1, 0 | r1 = 0;
0x0000919e add r5, sp, 8 | r5 += var_8h;
0x000091a0 add r0, pc | r0 = 0x1238a;
0x000091a2 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x000091a6 b 0x9048 | goto label_1;
| label_11:
0x000091a8 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x000091ac b 0x9184 |
| } while (1);
| label_6:
0x000091ae blx 0x348c | fprintf_chk ()
0x000091b2 nop |
0x000091b4 ldrb r0, [r7, r3] | r0 = *((r7 + r3));
0x000091b6 movs r2, r0 | r2 = r0;
0x000091b8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000091ba movs r0, r0 |
0x000091bc adds r2, r7, r5 | r2 = r7 + r5;
0x000091be movs r1, r0 | r1 = r0;
0x000091c0 str r4, [r1, 0x24] | *((r1 + 0x24)) = r4;
0x000091c2 movs r2, r0 | r2 = r0;
0x000091c4 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x000091c6 movs r2, r0 | r2 = r0;
0x000091c8 str r4, [r4, 0x1c] | *((r4 + 0x1c)) = r4;
0x000091ca movs r2, r0 | r2 = r0;
0x000091cc adds r4, r2, r3 | r4 = r2 + r3;
0x000091ce movs r1, r0 | r1 = r0;
0x000091d0 ldrb r0, [r5, r0] | r0 = *((r5 + r0));
0x000091d2 movs r2, r0 | r2 = r0;
0x000091d4 str r4, [r0, 0x18] | *((r0 + 0x18)) = r4;
0x000091d6 movs r2, r0 | r2 = r0;
0x000091d8 asrs r4, r5, 0x1f | r4 = r5 >> 0x1f;
0x000091da movs r1, r0 | r1 = r0;
0x000091dc asrs r6, r7, 0x1e | r6 = r7 >> 0x1e;
0x000091de movs r1, r0 | r1 = r0;
0x000091e0 asrs r6, r6, 0x1d | r6 >>= 0x1d;
0x000091e2 movs r1, r0 | r1 = r0;
0x000091e4 asrs r4, r0, 0x1d | r4 = r0 >> 0x1d;
0x000091e6 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x9254 */
| #include <stdint.h>
|
; (fcn) fcn.00009254 () | void fcn_00009254 (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_24h;
| r0 = arg1;
0x00009254 ldrsbgt pc, [ip], -0x8f | __asm ("ldrsbgt pc, [ip], -0x8f");
0x00009258 movs r3, 0x1c | r3 = 0x1c;
0x0000925a ldr r1, [pc, 0x5c] |
0x0000925c push {r4, r5, lr} |
0x0000925e sub sp, 0x2c |
0x00009260 add ip, pc |
0x00009262 add r5, sp, 8 | r5 += var_8h;
0x00009264 add r2, sp, 4 | r2 += var_4h;
0x00009266 mov r4, r0 | r4 = r0;
0x00009268 ldr.w r1, [ip, r1] | r1 = *((ip + r1));
0x0000926c ldr r1, [r1] | r1 = *(0x92ba);
0x0000926e str r1, [sp, 0x24] | var_24h = r1;
0x00009270 mov.w r1, 0 | r1 = 0;
0x00009274 mov r1, r5 | r1 = r5;
0x00009276 str r3, [sp, 4] | var_4h = r3;
0x00009278 blx 0x36a4 | fcn_000036a4 ();
0x0000927c adds r0, 1 | r0++;
| if (r0 == 1) {
0x0000927e beq 0x92a0 | goto label_0;
| }
0x00009280 mov r1, r4 | r1 = r4;
0x00009282 mov r0, r5 | r0 = r5;
0x00009284 bl 0x91e8 | fcn_000091e8 (r0);
| do {
0x00009288 ldr r2, [pc, 0x30] |
0x0000928a ldr r3, [pc, 0x2c] | r3 = *(0x92ba);
0x0000928c add r2, pc | r2 = 0x1254c;
0x0000928e ldr r3, [r2, r3] | r3 = *(0x1254c);
0x00009290 ldr r2, [r3] | r2 = *(0x1254c);
0x00009292 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00009294 eors r2, r3 | r2 ^= r3;
0x00009296 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000929a bne 0x92b0 | goto label_1;
| }
0x0000929c add sp, 0x2c |
0x0000929e pop {r4, r5, pc} |
| label_0:
0x000092a0 ldr r0, [pc, 0x1c] |
0x000092a2 mov r1, r4 | r1 = r4;
0x000092a4 add r0, pc | r0 = 0x12568;
0x000092a6 bl 0x7d88 | fcn_00007d88 (r0, r1);
0x000092aa ldr r0, [pc, 0x18] |
0x000092ac add r0, pc | r0 = 0x12576;
0x000092ae b 0x9288 |
| } while (1);
| label_1:
0x000092b0 blx 0x348c | fprintf_chk ()
0x000092b4 ldrh r0, [r6, r0] | r0 = *((r6 + r0));
0x000092b6 movs r2, r0 | r2 = r0;
0x000092b8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000092ba movs r0, r0 |
0x000092bc ldrh r4, [r0, r0] | r4 = *((r0 + r0));
0x000092be movs r2, r0 | r2 = r0;
0x000092c0 asrs r4, r7, 0x19 | r4 = r7 >> 0x19;
0x000092c2 movs r1, r0 | r1 = r0;
0x000092c4 asrs r4, r5, 0x19 | r4 = r5 >> 0x19;
0x000092c6 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x960c */
| #include <stdint.h>
|
; (fcn) fcn.0000960c () | void fcn_0000960c (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_6ch;
| r0 = arg1;
0x0000960c invalid |
0x00009610 strb r6, [r2, 0xa] | *((r2 + 0xa)) = r6;
0x00009612 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00009616 mov r4, r0 | r4 = r0;
0x00009618 ldr r0, [pc, 0x2c0] |
0x0000961a sub sp, 0x74 |
0x0000961c add r3, pc | r3 += pc;
0x0000961e ldr r1, [pc, 0x2c0] | r1 = *(0x98e2);
0x00009620 ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x00009622 add r0, pc | r0 = 0x12f02;
0x00009624 ldr r6, [pc, 0x2bc] |
0x00009626 ldr r1, [r0, r1] |
0x00009628 mul r0, r2, r5 | r0 = r2 * r5;
0x0000962c add r6, pc | r6 = 0x12f14;
0x0000962e ldr r1, [r1] | r1 = *(0x12f02);
0x00009630 str r1, [sp, 0x6c] | var_6ch = r1;
0x00009632 mov.w r1, 0 | r1 = 0;
0x00009636 blx 0x3480 | sem_trywait ();
0x0000963a ldr r3, [pc, 0x2ac] |
0x0000963c add r3, pc | r3 = 0x12f2a;
0x0000963e str r0, [r3, 0x2c] | *((r3 + 0x2c)) = r0;
0x00009640 cmp r0, 0 |
| if (r0 == 0) {
0x00009642 beq.w 0x975e | goto label_5;
| }
0x00009646 ldr r0, [pc, 0x2a4] |
0x00009648 str r5, [r3, 0x28] | *((r3 + 0x28)) = r5;
0x0000964a add r0, pc | r0 = 0x12f3c;
0x0000964c blx 0x305c | r0 = fcn_0000305c ();
0x00009650 mov r5, r0 | r5 = r0;
0x00009652 cmp r0, 0 |
| if (r0 != 0) {
0x00009654 beq 0x96d6 |
0x00009656 ldrb r3, [r0] | r3 = *(r0);
0x00009658 cmp r3, 0 |
| if (r3 == 0) {
0x0000965a beq 0x96d6 | goto label_4;
| }
0x0000965c cmp r3, 0x4f |
| if (r3 == 0x4f) {
0x0000965e beq.w 0x9872 | goto label_6;
| }
| label_3:
0x00009662 ldr r1, [pc, 0x28c] |
0x00009664 mov r0, r5 | r0 = r5;
0x00009666 ldr.w r8, [pc, 0x28c] | r8 = *(0x000098f4);
0x0000966a add r1, pc | r1 = 0x12f60;
0x0000966c add r8, pc | r8 += pc;
0x0000966e blx 0x30c0 | sem_getvalue ();
0x00009672 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00009676 cmp r0, 0 |
| if (r0 == 0) {
0x00009678 beq.w 0x9882 | goto label_7;
| }
0x0000967c mov r0, r5 | r0 = r5;
0x0000967e blx 0x3258 | r0 = unlink (r0);
0x00009682 add.w sb, r0, 1 | sb = r0 + 1;
0x00009686 mov r7, r0 | r7 = r0;
0x00009688 mov r0, sb | r0 = sb;
0x0000968a blx 0x3480 | r0 = sem_trywait ();
0x0000968e mov r6, r0 | r6 = r0;
0x00009690 str.w r0, [r8, 0xc] | __asm ("str.w r0, [r8, 0xc]");
0x00009694 cmp r0, 0 |
| if (r0 == 0) {
0x00009696 beq.w 0x98ce | goto label_8;
| }
0x0000969a mov r1, r5 | r1 = r5;
0x0000969c mov r2, sb | r2 = sb;
0x0000969e adds r5, r7, 3 | r5 = r7 + 3;
0x000096a0 blx 0x32a0 | pthread_cond_signal ();
0x000096a4 mov r0, r5 | r0 = r5;
0x000096a6 blx 0x3480 | sem_trywait ();
0x000096aa str.w r0, [r8, 8] | __asm ("str.w r0, [r8, 8]");
0x000096ae cmp r0, 0 |
| if (r0 == 0) {
0x000096b0 beq.w 0x98be | goto label_9;
| }
0x000096b4 ldr r3, [pc, 0x240] |
0x000096b6 movs r2, 1 | r2 = 1;
0x000096b8 mov r1, r5 | r1 = r5;
0x000096ba str r6, [sp, 4] | var_4h = r6;
0x000096bc add r3, pc | r3 = 0x12fb8;
0x000096be str r3, [sp] | *(sp) = r3;
0x000096c0 mov.w r3, -1 | r3 = -1;
0x000096c4 blx 0x3378 | shutdown ();
0x000096c6 cdp p2, 5, c4, c8, c8, 5 | __asm ("cdp p2, 5, c4, c8, c8, 5");
0x000096ca itttt hs |
| if (r2 < 1) {
0x000096cc ldrhs r3, [r8, 8] | r3 = *((r8 + 8));
| }
| if (r2 < 1) {
0x000096d0 movhs r2, 0 | r2 = 0;
| }
| if (r2 < 1) {
0x000096d2 addhs r3, r3, r7 | r3 += r7;
| }
| if (r2 < 1) {
0x000096d4 strb r2, [r3, 2] | *((r3 + 2)) = r2;
| goto label_4;
| }
| }
| label_4:
0x000096d6 ldr r0, [pc, 0x224] |
0x000096d8 add r0, pc | r0 = 0x12fda;
0x000096da blx 0x305c | r0 = fcn_0000305c ();
| if (r0 != 0) {
0x000096de cbz r0, 0x96e8 |
0x000096e0 ldrb r3, [r0] | r3 = *(r0);
0x000096e2 cmp r3, 0 |
| if (r3 != 0) {
0x000096e4 bne.w 0x9812 | goto label_10;
| }
| }
| label_1:
0x000096e8 ldr r0, [pc, 0x214] |
0x000096ea add r0, pc | r0 = 0x12fee;
0x000096ec blx 0x305c | r0 = fcn_0000305c ();
0x000096f0 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x000096f2 cbz r0, 0x96fa |
0x000096f4 ldrb r3, [r0] | r3 = *(r0);
0x000096f6 cmp r3, 0 |
| if (r3 != 0) {
0x000096f8 bne 0x977e | goto label_11;
| }
| }
| label_0:
0x000096fa ldr r1, [pc, 0x208] |
0x000096fc movs r0, 3 | r0 = 3;
0x000096fe add r1, pc | r1 = 0x13008;
0x00009700 bl 0x92c8 | fcn_000092c8 (r0, r1);
0x00009704 ldr r1, [pc, 0x200] |
0x00009706 movs r0, 3 | r0 = 3;
0x00009708 add r1, pc | r1 = 0x13014;
0x0000970a bl 0x92c8 | fcn_000092c8 (r0, r1);
| if (r4 == 0) {
0x0000970e cbz r4, 0x9744 | goto label_12;
| }
0x00009710 ldr r0, [r4] | r0 = *(r4);
| if (r0 == 0) {
0x00009712 cbz r0, 0x9744 | goto label_12;
| }
0x00009714 ldr r5, [pc, 0x1f4] |
0x00009716 ldr r6, [pc, 0x1f8] |
0x00009718 add r5, pc | r5 = 0x13028;
0x0000971a add r6, pc | r6 = 0x13030;
0x0000971c adds r5, 0x34 | r5 += 0x34;
| do {
0x0000971e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00009720 movs r2, 1 | r2 = 1;
0x00009722 str r0, [sp, 4] | var_4h = r0;
0x00009724 mov r0, r5 | r0 = r5;
0x00009726 str r6, [sp] | *(sp) = r6;
0x00009728 str r3, [sp, 8] | var_8h = r3;
0x0000972a mov.w r3, 0x200 | r3 = 0x200;
0x0000972c strb r0, [r0, 0xc] | *((r0 + 0xc)) = r0;
0x0000972e mov r1, r3 | r1 = r3;
0x00009730 blx 0x3378 | shutdown ();
0x00009734 movs r0, 3 | r0 = 3;
0x00009736 mov r1, r5 | r1 = r5;
0x00009738 bl 0x92c8 | fcn_000092c8 (r0, r1);
0x0000973c ldr r0, [r4, 8]! | r0 = *((r4 += 8));
0x00009740 cmp r0, 0 |
0x00009742 bne 0x971e |
| } while (r0 != 0);
| label_12:
0x00009744 ldr r4, [pc, 0x1cc] |
0x00009746 add r1, sp, 0x10 | r1 += var_10h;
0x00009748 add r4, pc | r4 = 0x13060;
0x0000974a mov r0, r4 | r0 = r4;
0x0000974c blx 0x3710 | fcn_00003710 ();
0x00009750 adds r0, 1 | r0++;
| if (r0 != 1) {
0x00009752 bne 0x9830 | goto label_13;
| }
| label_2:
0x00009754 ldr r1, [pc, 0x1c0] |
0x00009756 movs r0, 3 | r0 = 3;
0x00009758 add r1, pc | r1 = 0x13074;
0x0000975a bl 0x92c8 | fcn_000092c8 (r0, r1);
| label_5:
0x0000975e ldr r2, [pc, 0x1bc] |
0x00009760 ldr r3, [pc, 0x17c] | r3 = *(0x98e0);
0x00009762 add r2, pc | r2 = 0x13084;
0x00009764 ldr r3, [r2, r3] | r3 = *(0x13084);
0x00009766 ldr r2, [r3] | r2 = *(0x13084);
0x00009768 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0000976a eors r2, r3 | r2 ^= r3;
0x0000976c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00009770 bne.w 0x98ba | goto label_14;
| }
0x00009774 mov.w r0, -1 | r0 = -1;
0x00009778 add sp, 0x74 |
0x0000977a pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_11:
0x0000977e ldr r1, [pc, 0x1a0] |
0x00009780 add r1, pc | r1 = 0x130a6;
0x00009782 blx 0x372c | r0 = cxa_finalize ();
0x00009786 cmp r0, 0 |
| if (r0 == 0) {
0x00009788 beq 0x9826 | goto label_15;
| }
0x0000978a ldr r1, [pc, 0x198] |
0x0000978c mov r0, r5 | r0 = r5;
0x0000978e add r1, pc | r1 = 0x130b8;
0x00009790 blx 0x372c | r0 = cxa_finalize ();
0x00009794 cmp r0, 0 |
| if (r0 == 0) {
0x00009796 beq 0x9826 | goto label_15;
| }
0x00009798 ldr r1, [pc, 0x18c] |
0x0000979a mov r0, r5 | r0 = r5;
0x0000979c add r1, pc | r1 = 0x130c8;
0x0000979e blx 0x372c | r0 = cxa_finalize ();
0x000097a2 cmp r0, 0 |
| if (r0 == 0) {
0x000097a4 beq 0x989c | goto label_16;
| }
0x000097a6 ldr r1, [pc, 0x184] |
0x000097a8 mov r0, r5 | r0 = r5;
0x000097aa add r1, pc | r1 = 0x130dc;
0x000097ac blx 0x372c | r0 = cxa_finalize ();
0x000097b0 cmp r0, 0 |
| if (r0 == 0) {
0x000097b2 beq 0x989c | goto label_16;
| }
0x000097b4 ldr r1, [pc, 0x178] |
0x000097b6 mov r0, r5 | r0 = r5;
0x000097b8 add r1, pc | r1 = 0x130ec;
0x000097ba blx 0x372c | r0 = cxa_finalize ();
0x000097be cmp r0, 0 |
| if (r0 == 0) {
0x000097c0 beq 0x98a6 | goto label_17;
| }
0x000097c2 ldr r1, [pc, 0x170] |
0x000097c4 mov r0, r5 | r0 = r5;
0x000097c6 add r1, pc | r1 = 0x13100;
0x000097c8 blx 0x372c | r0 = cxa_finalize ();
0x000097cc cmp r0, 0 |
| if (r0 == 0) {
0x000097ce beq 0x98a6 | goto label_17;
| }
0x000097d0 ldr r1, [pc, 0x164] |
0x000097d2 mov r0, r5 | r0 = r5;
0x000097d4 add r1, pc | r1 = 0x13110;
0x000097d6 blx 0x372c | r0 = cxa_finalize ();
0x000097da cmp r0, 0 |
| if (r0 == 0) {
0x000097dc beq 0x98b0 | goto label_18;
| }
0x000097de ldr r1, [pc, 0x15c] |
0x000097e0 mov r0, r5 | r0 = r5;
0x000097e2 add r1, pc | r1 = 0x13124;
0x000097e4 blx 0x372c | r0 = cxa_finalize ();
0x000097e8 cmp r0, 0 |
| if (r0 == 0) {
0x000097ea beq 0x98b0 | goto label_18;
| }
0x000097ec ldr r1, [pc, 0x150] |
0x000097ee mov r0, r5 | r0 = r5;
0x000097f0 add r1, pc | r1 = 0x13134;
0x000097f2 blx 0x372c | r0 = cxa_finalize ();
| if (r0 == 0) {
0x000097f6 cbz r0, 0x9808 | goto label_19;
| }
0x000097f8 ldr r1, [pc, 0x148] |
0x000097fa mov r0, r5 | r0 = r5;
0x000097fc add r1, pc | r1 = 0x13144;
0x000097fe blx 0x372c | r0 = cxa_finalize ();
0x00009802 cmp r0, 0 |
| if (r0 != 0) {
0x00009804 bne.w 0x96fa | goto label_0;
| }
| label_19:
0x00009808 ldr r3, [pc, 0x13c] |
0x0000980a movs r2, 5 | r2 = 5;
0x0000980c add r3, pc | r3 = 0x13158;
0x0000980e str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x00009810 b 0x96fa | goto label_0;
| label_10:
0x00009812 movs r2, 0xa | r2 = 0xa;
0x00009814 movs r1, 0 | r1 = 0;
0x00009816 blx 0x32f4 | r0 = sem_init ();
0x0000981a cmp r0, 0 |
| if (r0 <= 0) {
0x0000981c ble 0x9890 | goto label_20;
| }
0x0000981e ldr r3, [pc, 0x12c] |
0x00009820 add r3, pc | r3 = 0x13172;
0x00009822 str r0, [r3] | *(r3) = r0;
0x00009824 b 0x96e8 | goto label_1;
| label_15:
0x00009826 ldr r3, [pc, 0x128] |
0x00009828 movs r2, 1 | r2 = 1;
0x0000982a add r3, pc | r3 = 0x13180;
0x0000982c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0000982e b 0x96fa | goto label_0;
| label_13:
0x00009830 ldr r1, [pc, 0x120] |
0x00009832 mov r0, r4 | r0 = r4;
0x00009834 add r1, pc | r1 = 0x1318c;
0x00009836 blx 0x30c0 | r0 = sem_getvalue ();
0x0000983a mov r4, r0 | r4 = r0;
0x0000983c cmp r0, 0 |
| if (r0 == 0) {
0x0000983e beq 0x9754 | goto label_2;
| }
0x00009840 ldr r3, [pc, 0x114] |
0x00009842 ldr r6, [pc, 0x118] |
0x00009844 add r3, pc | r3 = 0x131a0;
0x00009846 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00009848 add r6, pc | r6 = 0x131aa;
0x0000984a add.w r5, r6, 0x34 | r5 = r6 + 0x34;
0x0000984e stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x00009852 mov r2, r4 | r2 = r4;
0x00009854 movw r1, 0x1f1 | r1 = 0x1f1;
0x00009858 add.w r0, r6, 0x43 | r0 = r6 + 0x43;
0x0000985c blx 0x3044 | r0 = fcn_00003044 ();
| if (r0 != 0) {
0x00009860 cbz r0, 0x986a |
0x00009862 mov r1, r5 | r1 = r5;
0x00009864 movs r0, 3 | r0 = 3;
0x00009866 bl 0x92c8 | fcn_000092c8 (r0, r1);
| }
0x0000986a mov r0, r4 | r0 = r4;
0x0000986c blx 0x3038 | fcn_00003038 ();
0x00009870 b 0x9754 | goto label_2;
| label_6:
0x00009872 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x00009874 cmp r3, 0x4e |
| if (r3 != 0x4e) {
0x00009876 bne.w 0x9662 | goto label_3;
| }
0x0000987a ldrb r3, [r0, 2] | r3 = *((r0 + 2));
0x0000987c cmp r3, 0 |
| if (r3 != 0) {
0x0000987e bne.w 0x9662 | goto label_3;
| }
| label_7:
0x00009882 ldr r3, [pc, 0xdc] |
0x00009884 ldr r2, [pc, 0xdc] |
0x00009886 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00009888 add r2, pc | r2 = 0x131f0;
0x0000988a ldr r3, [r3] | r3 = *(0x9962);
0x0000988c str r3, [r2] | *(r2) = r3;
0x0000988e b 0x96d6 | goto label_4;
| label_20:
0x00009890 ldr r3, [pc, 0xd4] |
0x00009892 mov.w r2, 0x3e8 | r2 = 0x3e8;
0x00009896 add r3, pc | r3 = 0x13202;
0x00009898 str r2, [r3] | *(r3) = r2;
0x0000989a b 0x96e8 | goto label_1;
| label_16:
0x0000989c ldr r3, [pc, 0xcc] |
0x0000989e movs r2, 2 | r2 = 2;
0x000098a0 add r3, pc | r3 = 0x13210;
0x000098a2 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000098a4 b 0x96fa | goto label_0;
| label_17:
0x000098a6 ldr r3, [pc, 0xc8] |
0x000098a8 movs r2, 3 | r2 = 3;
0x000098aa add r3, pc | r3 = 0x13220;
0x000098ac str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000098ae b 0x96fa | goto label_0;
| label_18:
0x000098b0 ldr r3, [pc, 0xc0] |
0x000098b2 movs r2, 4 | r2 = 4;
0x000098b4 add r3, pc | r3 = 0x1322c;
0x000098b6 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x000098b8 b 0x96fa | goto label_0;
| label_14:
0x000098ba blx 0x348c | fprintf_chk ()
| label_9:
0x000098be ldr.w r0, [r8, 0x2c] | r0 = *((r8 + 0x2c));
0x000098c2 blx 0x31a8 | fcn_000031a8 ();
0x000098c6 mov r0, r6 | r0 = r6;
0x000098c8 blx 0x31a8 | fcn_000031a8 ();
0x000098cc b 0x975e | goto label_5;
| label_8:
0x000098ce ldr.w r0, [r8, 0x2c] | r0 = *((r8 + 0x2c));
0x000098d2 blx 0x31a8 | fcn_000031a8 ();
0x000098d6 b 0x975e | goto label_5;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x9a28 */
| #include <stdint.h>
|
; (fcn) fcn.00009a28 () | void fcn_00009a28 (int16_t arg1, int16_t arg2) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
0x00009a28 push {r2, r3} |
0x00009a2a ldr r3, [pc, 0xc4] |
0x00009a2c push {r4, r5, r6, lr} |
0x00009a2e mov r4, r0 | r4 = r0;
0x00009a30 ldr r0, [pc, 0xc0] |
0x00009a32 add r3, pc |
0x00009a34 sub sp, 0x10 |
0x00009a36 ldr r2, [pc, 0xc0] | r2 = *(0x9afa);
0x00009a38 ldr r3, [r3, 4] | r3 = *(0x1352c);
0x00009a3a add r0, pc | r0 = 0x13532;
0x00009a3c ldr r6, [sp, 0x20] | r6 = var_20h;
0x00009a3e ldr r2, [r0, r2] |
0x00009a40 cmp r3, r4 |
0x00009a42 ldr r2, [r2] | r2 = *(0x13532);
0x00009a44 str r2, [sp, 0xc] | var_ch = r2;
0x00009a46 mov.w r2, 0 | r2 = 0;
0x00009a4a ble 0x9a6a |
| while (1) {
0x00009a4c ldr r2, [pc, 0xac] |
0x00009a4e ldr r3, [pc, 0xa8] | r3 = *(0x9afa);
0x00009a50 add r2, pc | r2 = 0x13550;
0x00009a52 ldr r3, [r2, r3] | r3 = *(0x13550);
0x00009a54 ldr r2, [r3] | r2 = *(0x13550);
0x00009a56 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00009a58 eors r2, r3 | r2 ^= r3;
0x00009a5a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00009a5e bne 0x9aec | goto label_1;
| }
0x00009a60 add sp, 0x10 |
0x00009a62 pop.w {r4, r5, r6, lr} |
0x00009a66 add sp, 8 |
0x00009a68 bx lr | return;
0x00009a6a ldr r0, [pc, 0x94] |
0x00009a6c mov r5, r1 | r5 = r1;
0x00009a6e add r0, pc |
0x00009a70 add.w r0, r0, 0x234 | r0 = 0x137a8;
0x00009a74 blx 0x3644 | fcn_00003644 ();
| if (r6 == 0) {
0x00009a78 cbz r6, 0x9ae0 | goto label_2;
| }
| label_0:
0x00009a7a ldr r5, [pc, 0x88] |
0x00009a7c add r1, sp, 0x24 | r1 += var_24h;
0x00009a7e mov.w r3, 0x200 | r3 = 0x200;
0x00009a82 strd r6, r1, [sp] | __asm ("strd r6, r1, [sp]");
0x00009a86 str r1, [sp, 8] | var_8h = r1;
0x00009a88 movs r2, 1 | r2 = 1;
0x00009a8a add r5, pc | r5 = 0x13594;
0x00009a8c mov r1, r3 | r1 = r3;
0x00009a8e add.w r6, r5, 0x34 | r6 = r5 + 0x34;
0x00009a92 mov r0, r6 | r0 = r6;
0x00009a94 blx 0x3330 | SSL_connect ();
0x00009a98 ldr r3, [r5, 0x2c] | r3 = *(0x135c0);
| if (r3 != 0) {
0x00009a9a cbz r3, 0x9ad2 |
0x00009a9c bl 0x9378 | fcn_00009378 ();
0x00009aa0 add.w r3, r5, 0x18 | r3 = r5 + 0x18;
0x00009aa4 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00009aa6 mov r5, r0 | r5 = r0;
0x00009aa8 ldm r3!, {r0, r1} | r0 = *(r3!);
| r1 = *((r3! + 4));
0x00009aaa movs r3, 2 | r3 = 2;
0x00009aac str r2, [r5, 8] | *((r5 + 8)) = r2;
0x00009aae movw r2, 0x101 | r2 = 0x101;
0x00009ab2 str r0, [r5] | *(r5) = r0;
0x00009ab4 add.w r0, r5, 0x18 | r0 = r5 + 0x18;
0x00009ab8 str r1, [r5, 4] | *((r5 + 4)) = r1;
0x00009aba mov r1, r6 | r1 = r6;
0x00009abc str.w r3, [r5, 0x120] | __asm ("str.w r3, [r5, 0x120]");
0x00009ac0 blx 0x3028 | fcn_00003028 ();
0x00009ac4 movs r3, 0 | r3 = 0;
0x00009ac6 mov r1, r5 | r1 = r5;
0x00009ac8 mov r0, r4 | r0 = r4;
0x00009aca strb.w r3, [r5, 0x118] | *((r5 + 0x118)) = r3;
0x00009ace bl 0x94ac | fcn_000094ac (r0, r1);
| }
0x00009ad2 ldr r0, [pc, 0x34] |
0x00009ad4 add r0, pc |
0x00009ad6 add.w r0, r0, 0x234 | r0 = 0x13816;
0x00009ad8 strb r5, [r1] | *(r1) = r5;
0x00009ada blx 0x35b4 | fcn_000035b4 ();
0x00009ade b 0x9a4c |
| }
| label_2:
0x00009ae0 mov r1, r4 | r1 = r4;
0x00009ae2 mov r0, r5 | r0 = r5;
0x00009ae4 bl 0x7504 | r0 = fcn_00007504 (r0, r1);
0x00009ae8 mov r6, r0 | r6 = r0;
0x00009aea b 0x9a7a | goto label_0;
| label_1:
0x00009aec blx 0x348c | fprintf_chk ()
0x00009af0 ldrsb r6, [r7, r2] | r6 = *((r7 + r2));
0x00009af2 movs r2, r0 | r2 = r0;
0x00009af4 strh r6, [r2, r1] | *((r2 + r1)) = r6;
0x00009af6 movs r2, r0 | r2 = r0;
0x00009af8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00009afa movs r0, r0 |
0x00009afc strh r0, [r0, r1] | *((r0 + r1)) = r0;
0x00009afe movs r2, r0 | r2 = r0;
0x00009b00 ldrh r2, [r1, r0] | r2 = *((r1 + r0));
0x00009b02 movs r2, r0 | r2 = r0;
0x00009b04 ldr r6, [r5, r7] | r6 = *((r5 + r7));
0x00009b06 movs r2, r0 | r2 = r0;
0x00009b08 ldr r4, [r4, r6] | r4 = *((r4 + r6));
0x00009b0a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x9bb8 */
| #include <stdint.h>
|
; (fcn) fcn.00009bb8 () | void fcn_00009bb8 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00009bb8 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00009bbc mov r4, r1 | r4 = r1;
0x00009bbe ldr r1, [pc, 0x140] |
0x00009bc0 mov r7, r0 | r7 = r0;
0x00009bc2 sub sp, 8 |
0x00009bc4 mov r5, r2 | r5 = r2;
0x00009bc6 ldr r3, [pc, 0x13c] | r3 = *(0x9d06);
0x00009bc8 movs r6, 0 | r6 = 0;
0x00009bca add r1, pc | r1 = 0x138d0;
0x00009bcc ldr r0, [pc, 0x138] |
0x00009bce ldr.w r8, [pc, 0x13c] | r8 = *(0x00009d0c);
0x00009bd2 movs r2, 3 | r2 = 3;
0x00009bd4 ldr r3, [r1, r3] |
0x00009bd6 movs r1, 0x38 | r1 = 0x38;
0x00009bd8 add r0, pc | r0 = 0x138e4;
0x00009bda add r8, pc | r8 += pc;
0x00009bdc ldr r3, [r3] | r3 = *(0x138d0);
0x00009bde str r3, [sp, 4] | var_4h = r3;
0x00009be0 mov.w r3, 0 | r3 = 0;
0x00009be4 str r6, [sp] | *(sp) = r6;
0x00009be6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00009bea cmp r4, 1 |
| if (r4 == 1) {
0x00009bec beq 0x9c28 | goto label_3;
| }
0x00009bee cmp r4, 2 |
| if (r4 == 2) {
0x00009bf0 beq 0x9ca6 | goto label_4;
| }
| if (r4 == 0) {
0x00009bf2 cbz r4, 0x9c2c | goto label_5;
| }
0x00009bf4 mov r5, r6 | r5 = r6;
0x00009bf6 mvn r3, 1 | r3 = ~1;
0x00009bfa str r3, [sp] | *(sp) = r3;
| do {
| label_0:
0x00009bfc str r5, [r7] | *(r7) = r5;
| label_2:
0x00009bfe ldr r0, [pc, 0x110] |
0x00009c00 movs r3, 3 | r3 = 3;
0x00009c02 mov r2, sp | r2 = sp;
0x00009c04 movs r1, 0x68 | r1 = 0x68;
0x00009c06 add r0, pc | r0 = 0x1391c;
0x00009c08 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00009c0c ldr r2, [pc, 0x104] |
0x00009c0e ldr r3, [pc, 0xf4] | r3 = *(0x9d06);
0x00009c10 ldr r0, [sp] | r0 = *(sp);
0x00009c12 add r2, pc | r2 = 0x1392a;
0x00009c14 ldr r3, [r2, r3] | r3 = *(0x1392a);
0x00009c16 ldr r2, [r3] | r2 = *(0x1392a);
0x00009c18 ldr r3, [sp, 4] | r3 = var_4h;
0x00009c1a eors r2, r3 | r2 ^= r3;
0x00009c1c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00009c20 bne 0x9cfa | goto label_6;
| }
0x00009c22 add sp, 8 |
0x00009c24 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00009c28 mov r5, r6 | r5 = r6;
0x00009c2a b 0x9bfc |
| } while (1);
| label_5:
0x00009c2c ldr r0, [pc, 0xe8] |
0x00009c2e movs r2, 0x24 | r2 = 0x24;
0x00009c30 movs r1, 0x40 | r1 = 0x40;
0x00009c32 add r0, pc | r0 = 0x1394e;
0x00009c34 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00009c38 mov r4, r0 | r4 = r0;
0x00009c3a cmp r0, 0 |
| if (r0 == 0) {
0x00009c3c beq 0x9cd6 | goto label_7;
| }
0x00009c3e cmp r5, 0 |
| if (r5 == 0) {
0x00009c40 beq 0x9ce0 | goto label_8;
| }
0x00009c42 mov r0, r5 | r0 = r5;
0x00009c44 blx 0x3258 | r0 = unlink (r0);
0x00009c48 adds r2, r0, 1 | r2 = r0 + 1;
| label_1:
0x00009c4a ldr r6, [pc, 0xd0] |
0x00009c4c movs r1, 0x45 | r1 = 0x45;
0x00009c4e add r6, pc | r6 = 0x13970;
0x00009c50 mov r0, r6 | r0 = r6;
0x00009c52 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00009c56 str r0, [r4] | *(r4) = r0;
0x00009c58 cmp r0, 0 |
| if (r0 == 0) {
0x00009c5a beq 0x9ce8 | goto label_9;
| }
0x00009c5c mov r1, r5 | r1 = r5;
0x00009c5e mov r5, r4 | r5 = r4;
0x00009c60 blx 0x3300 | pthread_cond_destroy ();
0x00009c64 ldr r2, [pc, 0xb8] | r2 = *(0x9d20);
0x00009c66 ldr r3, [pc, 0xbc] | r3 = *(0x9d26);
0x00009c68 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00009c6c str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00009c6e ldr r2, [pc, 0xb8] | r2 = *(0x9d2a);
0x00009c70 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00009c74 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00009c76 ldr r3, [pc, 0xb4] | r3 = *(0x9d2e);
0x00009c78 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00009c7c str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00009c7e ldr r2, [pc, 0xb0] | r2 = *(0x9d32);
0x00009c80 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00009c82 adds r0, 3 | r0 += 3;
0x00009c84 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00009c86 ldr r3, [pc, 0xac] | r3 = *(0x9d36);
0x00009c88 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00009c8c str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x00009c8e ldr r2, [pc, 0xa8] | r2 = *(0x9d3a);
0x00009c90 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00009c94 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00009c96 ldr r3, [pc, 0xa4] | r3 = *(0x9d3e);
0x00009c98 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00009c9c str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x00009c9e ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00009ca2 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x00009ca4 b 0x9bfc | goto label_0;
| if (r5 == 0) {
| label_4:
0x00009ca6 cbz r5, 0x9cce | goto label_10;
| }
0x00009ca8 ldr r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00009caa cbz r3, 0x9cce | goto label_10;
| }
0x00009cac ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
| if (r3 == 0) {
0x00009cae cbz r3, 0x9cce | goto label_10;
| }
0x00009cb0 ldr r3, [r5, 8] | r3 = *((r5 + 8));
| if (r3 == 0) {
0x00009cb2 cbz r3, 0x9cce | goto label_10;
| }
0x00009cb4 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
| if (r3 == 0) {
0x00009cb6 cbz r3, 0x9cce | goto label_10;
| }
0x00009cb8 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| if (r3 == 0) {
0x00009cba cbz r3, 0x9cce | goto label_10;
| }
0x00009cbc ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 == 0) {
0x00009cbe cbz r3, 0x9cce | goto label_10;
| }
0x00009cc0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
| if (r3 == 0) {
0x00009cc2 cbz r3, 0x9cce | goto label_10;
| }
0x00009cc4 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
| if (r3 == 0) {
0x00009cc6 cbz r3, 0x9cce | goto label_10;
| }
0x00009cc8 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00009cca cmp r3, 0 |
| if (r3 != 0) {
0x00009ccc bne 0x9bfc | goto label_0;
| }
| label_10:
0x00009cce mvn r3, 1 | r3 = ~1;
0x00009cd2 str r3, [sp] | *(sp) = r3;
0x00009cd4 b 0x9bfc | goto label_0;
| label_7:
0x00009cd6 mvn r3, 0x62 | r3 = ~0x62;
0x00009cda mov r5, r0 | r5 = r0;
0x00009cdc str r3, [sp] | *(sp) = r3;
0x00009cde b 0x9bfc | goto label_0;
| label_8:
0x00009ce0 ldr r5, [pc, 0x5c] |
0x00009ce2 movs r2, 2 | r2 = 2;
0x00009ce4 add r5, pc | r5 = 0x13a28;
0x00009ce6 b 0x9c4a | goto label_1;
| label_9:
0x00009ce8 mov r2, r4 | r2 = r4;
0x00009cea movs r1, 0x47 | r1 = 0x47;
0x00009cec mov r0, r6 | r0 = r6;
0x00009cee bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00009cf2 mvn r3, 0x62 | r3 = ~0x62;
0x00009cf6 str r3, [sp] | *(sp) = r3;
0x00009cf8 b 0x9bfe | goto label_2;
| label_6:
0x00009cfa blx 0x348c | fprintf_chk ()
0x00009cfe nop |
0x00009d00 str r6, [r0, r3] | *((r0 + r3)) = r6;
0x00009d02 movs r2, r0 | r2 = r0;
0x00009d04 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00009d06 movs r0, r0 |
0x00009d08 asrs r0, r2, 6 | r0 = r2 >> 6;
0x00009d0a movs r1, r0 | r1 = r0;
0x00009d0c str r6, [r6, r2] | *((r6 + r2)) = r6;
0x00009d0e movs r2, r0 | r2 = r0;
0x00009d10 asrs r2, r4, 5 | r2 = r4 >> 5;
0x00009d12 movs r1, r0 | r1 = r0;
0x00009d14 str r6, [r7, r1] | *((r7 + r1)) = r6;
0x00009d16 movs r2, r0 | r2 = r0;
0x00009d18 lsrs r6, r7, 0x1e | r6 = r7 >> 0x1e;
0x00009d1a movs r1, r0 | r1 = r0;
0x00009d1c lsrs r2, r4, 0x1e | r2 = r4 >> 0x1e;
0x00009d1e movs r1, r0 | r1 = r0;
0x00009d20 lsls r4, r4, 0xc | r4 <<= 0xc;
0x00009d22 movs r0, r0 |
0x00009d24 lsls r0, r4, 0xb | r0 = r4 << 0xb;
0x00009d26 movs r0, r0 |
0x00009d28 lsls r4, r0, 0xd | r4 = r0 << 0xd;
0x00009d2a movs r0, r0 |
0x00009d2c lsls r0, r1, 0xd | r0 = r1 << 0xd;
0x00009d2e movs r0, r0 |
0x00009d30 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00009d32 movs r0, r0 |
0x00009d34 lsls r4, r5, 0xc | r4 = r5 << 0xc;
0x00009d36 movs r0, r0 |
0x00009d38 lsls r4, r3, 0xd | r4 = r3 << 0xd;
0x00009d3a movs r0, r0 |
0x00009d3c lsls r0, r3, 0xb | r0 = r3 << 0xb;
0x00009d3e movs r0, r0 |
0x00009d40 lsrs r0, r1, 0x1c | r0 = r1 >> 0x1c;
0x00009d42 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x9d44 */
| #include <stdint.h>
|
; (fcn) fcn.00009d44 () | void fcn_00009d44 (int16_t arg1) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| if (? < ?) {
0x00009d44 andhs r4, r3, 40, 22 | r4 = r3 & (40 22);
| }
0x00009d48 ldr.w ip, [pc, 0xa0] | ip = *(0x00009dec);
0x00009d4c movs r1, 0x8d | r1 = 0x8d;
0x00009d4e push {r4, r5, lr} |
0x00009d50 mov r4, r0 | r4 = r0;
0x00009d52 add r3, pc | r3 += pc;
0x00009d54 sub sp, 0xc |
0x00009d56 add.w r0, r3, 0x18 | r0 = r3 + 0x18;
0x00009d5a add ip, pc |
0x00009d5c ldr r3, [pc, 0x90] |
0x00009d5e movs r5, 0 | r5 = 0;
0x00009d60 ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00009d64 ldr r3, [r3] | r3 = *(0x9df0);
0x00009d66 str r3, [sp, 4] | var_4h = r3;
0x00009d68 mov.w r3, 0 | r3 = 0;
0x00009d6c str r5, [sp] | *(sp) = r5;
0x00009d6e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00009d72 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x00009d76 ldr r5, [pc, 0x7c] |
0x00009d78 add r5, pc | r5 = 0x13b72;
| if (r3 == 0) {
0x00009d7a cbz r3, 0x9d9a | goto label_0;
| }
0x00009d7c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00009d7e ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x00009d82 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00009d84 ldr.w r2, [r4, 0x84] | r2 = *((r4 + 0x84));
0x00009d88 ldr r3, [pc, 0x6c] | r3 = *(0x9df8);
0x00009d8a str r0, [sp] | *(sp) = r0;
0x00009d8c ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00009d8e ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00009d90 cmp r1, r3 |
0x00009d92 beq 0x9dc4 |
| while (1) {
0x00009d94 movs r3, 0 | r3 = 0;
0x00009d96 strd r3, r3, [r4, 0x80] | __asm ("strd r3, r3, [r4, 0x80]");
| label_0:
0x00009d9a ldr r0, [pc, 0x60] |
0x00009d9c movs r3, 3 | r3 = 3;
0x00009d9e mov r2, sp | r2 = sp;
0x00009da0 movs r1, 0x9d | r1 = 0x9d;
0x00009da2 add r0, pc | r0 = 0x13ba4;
0x00009da4 adds r0, 0x18 | r0 += 0x18;
0x00009da6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00009daa ldr r2, [pc, 0x54] |
0x00009dac ldr r3, [pc, 0x40] | r3 = *(0x9df0);
0x00009dae ldr r0, [sp] | r0 = *(sp);
0x00009db0 add r2, pc | r2 = 0x13bb6;
0x00009db2 ldr r3, [r2, r3] | r3 = *(0x13bb6);
0x00009db4 ldr r2, [r3] | r2 = *(0x13bb6);
0x00009db6 ldr r3, [sp, 4] | r3 = var_4h;
0x00009db8 eors r2, r3 | r2 ^= r3;
0x00009dba mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00009dbe bne 0x9de4 | goto label_1;
| }
0x00009dc0 add sp, 0xc |
0x00009dc2 pop {r4, r5, pc} |
0x00009dc4 ldr r3, [r2] | r3 = *(r2);
| if (r3 != 0) {
0x00009dc6 cbz r3, 0x9dd8 |
0x00009dc8 ldr r0, [pc, 0x38] |
0x00009dca mov r2, r3 | r2 = r3;
0x00009dcc movs r1, 0x95 | r1 = 0x95;
0x00009dce add r0, pc | r0 = 0x13bd6;
0x00009dd0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00009dd4 ldr.w r2, [r4, 0x84] | r2 = *((r4 + 0x84));
| }
0x00009dd8 ldr r0, [pc, 0x2c] |
0x00009dda movs r1, 0x96 | r1 = 0x96;
0x00009ddc add r0, pc | r0 = 0x13be8;
0x00009dde bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00009de2 b 0x9d94 |
| }
| label_1:
0x00009de4 blx 0x348c | fprintf_chk ()
0x00009de8 asrs r6, r2, 0x20 | r6 = r2 >> 0x20;
0x00009dea movs r1, r0 | r1 = r0;
0x00009dec ldr r7, [pc, 0xd8] | r7 = *(0x9ec8);
0x00009dee movs r2, r0 | r2 = r0;
0x00009df0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00009df2 movs r0, r0 |
0x00009df4 ldr r7, [pc, 0x60] | r7 = *(0x9e58);
0x00009df6 movs r2, r0 | r2 = r0;
0x00009df8 lsls r4, r4, 0xc | r4 <<= 0xc;
0x00009dfa movs r0, r0 |
0x00009dfc lsrs r6, r0, 0x1f | r6 = r0 >> 0x1f;
0x00009dfe movs r1, r0 | r1 = r0;
0x00009e00 ldr r6, [pc, 0x380] | r6 = *(0xa184);
0x00009e02 movs r2, r0 | r2 = r0;
0x00009e04 lsrs r2, r4, 0x18 | r2 = r4 >> 0x18;
0x00009e06 movs r1, r0 | r1 = r0;
0x00009e08 lsrs r4, r2, 0x18 | r4 = r2 >> 0x18;
0x00009e0a movs r1, r0 | r1 = r0;
0x00009e0c ldr r3, [pc, 0x68] |
0x00009e0e movs r2, 3 | r2 = 3;
0x00009e10 ldr.w ip, [pc, 0x68] | ip = *(0x00009e7c);
0x00009e14 movs r1, 0xaa | r1 = 0xaa;
0x00009e16 push {r4, r5, lr} |
0x00009e18 mov r4, r0 | r4 = r0;
0x00009e1a add r3, pc | r3 = 0x13c96;
0x00009e1c sub sp, 0xc |
0x00009e1e add.w r0, r3, 0x30 | r0 = r3 + 0x30;
0x00009e22 add ip, pc |
0x00009e24 ldr r3, [pc, 0x58] |
0x00009e26 movs r5, 0 | r5 = 0;
0x00009e28 ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00009e2c ldr r3, [r3] | r3 = *(0x9e80);
0x00009e2e str r3, [sp, 4] | var_4h_2 = r3;
0x00009e30 mov.w r3, 0 | r3 = 0;
0x00009e34 str r5, [sp] | *(sp) = r5;
0x00009e36 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00009e3a ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
| if (r3 != 0) {
0x00009e3e cbz r3, 0x9e4a |
0x00009e40 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00009e42 ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x00009e46 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00009e48 str r0, [sp] | *(sp) = r0;
| }
0x00009e4a ldr r0, [pc, 0x38] |
0x00009e4c movs r3, 3 | r3 = 3;
0x00009e4e mov r2, sp | r2 = sp;
0x00009e50 movs r1, 0xae | r1 = 0xae;
0x00009e52 add r0, pc | r0 = 0x13cdc;
0x00009e54 adds r0, 0x30 | r0 += 0x30;
0x00009e56 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00009e5a ldr r2, [pc, 0x2c] |
0x00009e5c ldr r3, [pc, 0x20] | r3 = *(0x9e80);
0x00009e5e ldr r0, [sp] | r0 = *(sp);
0x00009e60 add r2, pc | r2 = 0x13cee;
0x00009e62 ldr r3, [r2, r3] | r3 = *(0x13cee);
0x00009e64 ldr r2, [r3] | r2 = *(0x13cee);
0x00009e66 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00009e68 eors r2, r3 | r2 ^= r3;
0x00009e6a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00009e6e bne 0x9e74 |
0x00009e70 add sp, 0xc |
0x00009e72 pop {r4, r5, pc} |
| }
0x00009e74 blx 0x348c | fprintf_chk ()
0x00009e78 lsrs r6, r1, 0x1d | r6 = r1 >> 0x1d;
0x00009e7a movs r1, r0 | r1 = r0;
0x00009e7c ldr r6, [pc, 0x1b8] | r6 = *(0xa038);
0x00009e7e movs r2, r0 | r2 = r0;
0x00009e80 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00009e82 movs r0, r0 |
0x00009e84 lsrs r6, r2, 0x1c | r6 = r2 >> 0x1c;
0x00009e86 movs r1, r0 | r1 = r0;
0x00009e88 ldr r6, [pc, 0xc0] | r6 = *(0x9f4c);
0x00009e8a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x9f30 */
| #include <stdint.h>
|
; (fcn) fcn.00009f30 () | void fcn_00009f30 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00009f30 push {r3, r5, r8, sb, fp, lr} |
0x00009f34 rors r0, r6 | __asm ("rors r0, r6");
0x00009f36 mov r8, r2 | r8 = r2;
0x00009f38 ldr r2, [pc, 0x9c] |
0x00009f3a mov r5, r0 | r5 = r0;
0x00009f3c add r3, pc | r3 += pc;
0x00009f3e sub sp, 8 |
0x00009f40 add.w r0, r3, 0x68 | r0 = r3 + 0x68;
0x00009f44 ldr r3, [pc, 0x94] | r3 = *(0x9fdc);
0x00009f46 add r2, pc | r2 = 0x13f22;
0x00009f48 mov r7, sp | r7 = sp;
0x00009f4a movs r4, 0 | r4 = 0;
0x00009f4c mov r6, r1 | r6 = r1;
0x00009f4e ldr r3, [r2, r3] |
0x00009f50 mov.w r1, 0x196 | r1 = 0x196;
0x00009f54 movs r2, 3 | r2 = 3;
0x00009f56 ldr r3, [r3] | r3 = *(0x13f22);
0x00009f58 str r3, [sp, 4] | var_4h = r3;
0x00009f5a mov.w r3, 0 | r3 = 0;
0x00009f5e str r4, [sp] | *(sp) = r4;
0x00009f60 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
| do {
0x00009f64 mov r1, r7 | r1 = r7;
0x00009f66 mov r0, r5 | r0 = r5;
0x00009f68 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00009f6c clz r3, r4 | r3 &= r4;
0x00009f70 cmp r0, 0 |
0x00009f72 lsr.w r3, r3, 5 | r3 >>= 5;
0x00009f76 it eq |
| if (r0 != 0) {
0x00009f78 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00009f7a cbz r3, 0x9f96 | goto label_1;
| }
| label_0:
0x00009f7c ldr r4, [sp] | r4 = *(sp);
0x00009f7e ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00009f80 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00009f82 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00009f84 cmp r2, r3 |
0x00009f86 blt 0x9f64 |
| } while (r2 < r3);
0x00009f88 mov r1, r7 | r1 = r7;
0x00009f8a mov r0, r5 | r0 = r5;
0x00009f8c bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00009f90 mov r4, r0 | r4 = r0;
0x00009f92 cmp r0, 0 |
| if (r0 != 0) {
0x00009f94 bne 0x9f7c | goto label_0;
| }
| label_1:
0x00009f96 mov r3, r4 | r3 = r4;
0x00009f98 mov r2, r8 | r2 = r8;
0x00009f9a mov r1, r6 | r1 = r6;
0x00009f9c mov r0, r5 | r0 = r5;
0x00009f9e bl 0xd638 | fcn_0000d638 (r0, r1, r2, r3);
0x00009fa2 ldr r0, [pc, 0x3c] |
0x00009fa4 movs r3, 3 | r3 = 3;
0x00009fa6 movs r2, 0 | r2 = 0;
0x00009fa8 mov.w r1, 0x19e | r1 = 0x19e;
0x00009fac add r0, pc | r0 = 0x13f92;
0x00009fae adds r0, 0x68 | r0 += 0x68;
0x00009fb0 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00009fb2 vselge.f32 s8, s0, s22 | __asm ("vselge.f32 s8, s0, s22");
0x00009fb6 ldr r3, [pc, 0x24] | r3 = *(0x9fde);
0x00009fb8 add r2, pc | r2 += pc;
0x00009fba ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00009fbc ldr r2, [r3] | r2 = *(0x9fde);
0x00009fbe ldr r3, [sp, 4] | r3 = var_4h;
0x00009fc0 eors r2, r3 | r2 ^= r3;
0x00009fc2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00009fc6 bne 0x9fce |
0x00009fc8 add sp, 8 |
0x00009fca pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00009fce blx 0x348c | fprintf_chk ()
0x00009fd2 nop |
0x00009fd4 lsrs r4, r5, 0x18 | r4 = r5 >> 0x18;
0x00009fd6 movs r1, r0 | r1 = r0;
0x00009fd8 ldr r5, [pc, 0x128] | r5 = *(0xa104);
0x00009fda movs r2, r0 | r2 = r0;
0x00009fdc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00009fde movs r0, r0 |
0x00009fe0 lsrs r4, r7, 0x16 | r4 = r7 >> 0x16;
0x00009fe2 movs r1, r0 | r1 = r0;
0x00009fe4 ldr r4, [pc, 0x360] | r4 = *(0xa348);
0x00009fe6 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x9fe8 */
| #include <stdint.h>
|
; (fcn) fcn.00009fe8 () | void fcn_00009fe8 (int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00009fe8 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00009fec sub sp, 0x34 |
0x00009fee str r0, [sp, 0x24] | var_24h = r0;
0x00009ff0 mov r7, r2 | r7 = r2;
0x00009ff2 mov r5, r3 | r5 = r3;
0x00009ff4 mov r6, r1 | r6 = r1;
0x00009ff6 ldr r0, [sp, 0x58] | r0 = *(arg_58h);
0x00009ff8 movw r1, 0x1bd | r1 = 0x1bd;
0x00009ffc ldr r2, [pc, 0x1f8] |
0x00009ffe ldr r3, [pc, 0x1fc] | r3 = *(0xa1fe);
0x0000a000 str r0, [sp, 0x14] | var_14h = r0;
0x0000a002 ldr r0, [sp, 0x5c] | r0 = *(arg_5ch);
0x0000a004 add r2, pc | r2 = 0x14200;
0x0000a006 str r0, [sp, 0x18] | var_18h = r0;
0x0000a008 ldr r0, [pc, 0x1f4] |
0x0000a00a ldr r3, [r2, r3] |
0x0000a00c movs r2, 3 | r2 = 3;
0x0000a00e add r0, pc | r0 = 0x14212;
0x0000a010 ldr r3, [r3] | r3 = *(0x14200);
0x0000a012 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000a014 mov.w r3, 0 | r3 = 0;
0x0000a016 lsls r0, r0, 0xc | r0 <<= 0xc;
0x0000a018 adds r0, 0x88 | r0 += 0x88;
0x0000a01a movs r3, 0 | r3 = 0;
0x0000a01c str r3, [sp, 0x28] | var_28h = r3;
0x0000a01e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000a022 ldr r3, [pc, 0x1e0] |
0x0000a024 add r1, sp, 0x24 | r1 += var_24h;
0x0000a026 ldr r2, [pc, 0x1e0] | r2 = *(0xa20a);
0x0000a028 add r3, pc | r3 = 0x14232;
0x0000a02a ldr r2, [r3, r2] |
0x0000a02c ldr r2, [r2] | r2 = *(0x14232);
0x0000a02e ldr r0, [r2, 4] | r0 = *(0x14236);
0x0000a030 ldr r2, [pc, 0x1d8] | r2 = *(0xa20c);
0x0000a032 ldr r2, [r3, r2] | r2 = *(0x14232);
0x0000a034 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000a038 ldr.w sl, [r0, 8] | sl = *(0x1423e);
0x0000a03c ldr.w r3, [sl, 0x84] | r3 = *(0x142c2);
0x0000a040 cmp r3, 0 |
| if (r3 == 0) {
0x0000a042 beq 0xa11a | goto label_4;
| }
0x0000a044 ldr r4, [pc, 0x1c8] |
0x0000a046 movs r2, 0xb | r2 = 0xb;
0x0000a048 mov.w r1, 0x1c2 | r1 = 0x1c2;
0x0000a04c add r4, pc | r4 = 0x14260;
0x0000a04e mov r0, r4 | r0 = r4;
0x0000a050 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000a054 mov r8, r0 | r8 = r0;
0x0000a056 cmp r0, 0 |
| if (r0 == 0) {
0x0000a058 beq 0xa154 | goto label_5;
| }
0x0000a05a adds r3, r5, 1 | r3 = r5 + 1;
0x0000a05c mov.w r1, 0x1c8 | r1 = 0x1c8;
0x0000a060 lsls r2, r3, 2 | r2 = r3 << 2;
0x0000a062 mov r0, r4 | r0 = r4;
0x0000a064 str r3, [sp, 0x20] | var_20h = r3;
0x0000a066 str r2, [sp, 0x1c] | var_1ch = r2;
0x0000a068 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000a06c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0000a06e mov sb, r0 | sb = r0;
0x0000a070 cmp r0, 0 |
| if (r0 == 0) {
0x0000a072 beq 0xa148 | goto label_6;
| }
0x0000a074 mov.w r1, 0x1ce | r1 = 0x1ce;
0x0000a078 mov r0, r4 | r0 = r4;
0x0000a07a str r2, [sp, 0x1c] | var_1ch = r2;
0x0000a07c bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000a080 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0000a082 mov fp, r0 |
0x0000a084 cmp r0, 0 |
| if (r0 == 0) {
0x0000a086 beq.w 0xa1c2 | goto label_7;
| }
0x0000a08a cmp r5, 0 |
0x0000a08c str.w r7, [sb] | __asm ("str.w r7, [sb]");
0x0000a090 str r6, [r0] | *(r0) = r6;
| if (r5 <= 0) {
0x0000a092 ble 0xa0b8 | goto label_8;
| }
0x0000a094 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000a096 subs r5, r2, 4 | r5 = r2 - 4;
0x0000a098 add r5, sb | r5 += sb;
0x0000a09a mov r2, r0 | r2 = r0;
0x0000a09c subs r4, r3, 4 | r4 = r3 - 4;
0x0000a09e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000a0a0 subs r1, r3, 4 | r1 = r3 - 4;
0x0000a0a2 mov r3, sb | r3 = sb;
| do {
0x0000a0a4 ldr r0, [r4, 4]! | r0 = *((r4 += 4));
0x0000a0a8 str r0, [r3, 4]! | *((r3 += 4)) = r0;
0x0000a0ac cmp r3, r5 |
0x0000a0ae ldr r0, [r1, 4]! | r0 = *((r1 += 4));
0x0000a0b2 str r0, [r2, 4]! | *((r2 += 4)) = r0;
0x0000a0b6 bne 0xa0a4 |
| } while (r3 != r5);
| label_8:
0x0000a0b8 ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x0000a0ba cmp r3, 0 |
| if (r3 == 0) {
0x0000a0bc beq 0xa15c | goto label_9;
| }
0x0000a0be ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x0000a0c0 cmp r3, 1 |
| if (r3 == 1) {
0x0000a0c2 beq 0xa194 | goto label_10;
| }
| label_1:
0x0000a0c4 ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 == 0) {
0x0000a0c6 cbnz r3, 0xa0f2 |
0x0000a0c8 ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
| if (r4 != 0) {
0x0000a0cc cbz r4, 0xa0de |
0x0000a0ce ldr.w r0, [sl, 0x90] | r0 = *((sl + 0x90));
0x0000a0d2 mov r3, sb | r3 = sb;
0x0000a0d4 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0000a0d6 mov r2, fp | r2 = fp;
0x0000a0d8 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000a0da str r0, [sp, 0x28] | var_28h = r0;
| if (r0 != 0) {
0x0000a0dc cbnz r0, 0xa0f2 | goto label_0;
| }
| }
0x0000a0de ldrd r0, r3, [sl, 0x80] | __asm ("ldrd r0, r3, [sl, 0x80]");
0x0000a0e2 mov r1, r8 | r1 = r8;
0x0000a0e4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0000a0e8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0000a0ea ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0000a0ec mov r3, fp | r3 = fp;
0x0000a0ee blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000a0f0 str r0, [sp, 0x28] | var_28h = r0;
| }
| label_0:
0x0000a0f2 ldr r4, [pc, 0x120] |
0x0000a0f4 movw r1, 0x201 | r1 = 0x201;
0x0000a0f8 mov r2, r8 | r2 = r8;
0x0000a0fa add r4, pc | r4 = 0x14314;
0x0000a0fc mov r0, r4 | r0 = r4;
0x0000a0fe bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a102 mov r2, sb | r2 = sb;
0x0000a104 movw r1, 0x202 | r1 = 0x202;
0x0000a108 mov r0, r4 | r0 = r4;
0x0000a10a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a10e mov r2, fp | r2 = fp;
0x0000a110 movw r1, 0x203 | r1 = 0x203;
0x0000a114 mov r0, r4 | r0 = r4;
0x0000a116 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| do {
| label_4:
0x0000a11a ldr r0, [pc, 0xfc] |
0x0000a11c movs r3, 3 | r3 = 3;
0x0000a11e add r2, sp, 0x28 | r2 += var_28h;
0x0000a120 movw r1, 0x207 | r1 = 0x207;
0x0000a122 movs r1, 7 | r1 = 7;
0x0000a124 add r0, pc | r0 = 0x14342;
0x0000a126 adds r0, 0x88 | r0 += 0x88;
0x0000a128 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000a12c ldr r2, [pc, 0xec] |
0x0000a12e ldr r3, [pc, 0xcc] | r3 = *(0xa1fe);
0x0000a130 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0000a132 add r2, pc | r2 = 0x14352;
0x0000a134 ldr r3, [r2, r3] | r3 = *(0x14352);
0x0000a136 ldr r2, [r3] | r2 = *(0x14352);
0x0000a138 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0000a13a eors r2, r3 | r2 ^= r3;
0x0000a13c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a140 bne 0xa1f4 | goto label_11;
| }
0x0000a142 add sp, 0x34 |
0x0000a144 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x0000a148 mov r2, r8 | r2 = r8;
0x0000a14a mov.w r1, 0x1ca | r1 = 0x1ca;
0x0000a14e mov r0, r4 | r0 = r4;
0x0000a150 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_5:
0x0000a154 mvn r3, 0x62 | r3 = ~0x62;
0x0000a158 str r3, [sp, 0x28] | var_28h = r3;
0x0000a15a b 0xa11a |
| } while (1);
| label_9:
0x0000a15c ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0000a15e cmp r3, 3 |
| if (r3 == 3) {
0x0000a160 beq 0xa1aa | goto label_12;
| }
0x0000a162 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0000a164 cmp r3, 6 |
| if (r3 == 6) {
0x0000a166 beq 0xa1b6 | goto label_13;
| }
0x0000a168 ldr r3, [pc, 0xb4] |
0x0000a16a add r3, pc | r3 = 0x1438e;
| label_3:
0x0000a16c str r3, [sp, 4] | var_4h = r3;
0x0000a16e ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0000a170 str r3, [sp, 8] | var_8h = r3;
0x0000a172 ldr r3, [pc, 0xb0] |
0x0000a174 add r3, pc | r3 = 0x1439e;
| label_2:
0x0000a176 str r3, [sp] | *(sp) = r3;
0x0000a178 movs r2, 1 | r2 = 1;
0x0000a17a mov.w r3, -1 | r3 = -1;
0x0000a17e movs r1, 0xb | r1 = 0xb;
0x0000a180 mov r0, r8 | r0 = r8;
0x0000a182 blx 0x3378 | r0 = shutdown ();
0x0000a186 cmp r0, 0xa |
0x0000a188 itt gt |
| if (r0 <= 0xa) {
0x0000a18a mvngt r3, 1 | r3 = ~1;
| }
| if (r0 <= 0xa) {
0x0000a18e str r3, [sp, 0x28] | var_28h = r3;
| goto label_14;
| }
| if (r0 > 0xa) {
| label_14:
0x0000a190 bgt 0xa0f2 | goto label_0;
| }
0x0000a192 b 0xa0c4 | goto label_1;
| label_10:
0x0000a194 ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x0000a196 cmp r3, 4 |
| if (r3 <= 4) {
0x0000a198 ble 0xa1e2 | goto label_15;
| }
0x0000a19a ldr r3, [pc, 0x8c] |
0x0000a19c add r3, pc | r3 = 0x143ca;
| do {
0x0000a19e str r3, [sp, 4] | var_4h = r3;
0x0000a1a0 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0000a1a2 str r3, [sp, 8] | var_8h = r3;
0x0000a1a4 ldr r3, [pc, 0x84] |
0x0000a1a6 add r3, pc | r3 = 0x143d6;
0x0000a1a8 b 0xa176 | goto label_2;
| label_12:
0x0000a1aa ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x0000a1ac cmp r3, 4 |
| if (r3 <= 4) {
0x0000a1ae ble 0xa1e8 | goto label_16;
| }
0x0000a1b0 ldr r3, [pc, 0x7c] |
0x0000a1b2 add r3, pc | r3 = 0x143e6;
0x0000a1b4 b 0xa16c | goto label_3;
| label_13:
0x0000a1b6 ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x0000a1b8 cmp r3, 4 |
| if (r3 > 4) {
0x0000a1ba bgt 0xa1ee | goto label_17;
| }
0x0000a1bc ldr r3, [pc, 0x74] |
0x0000a1be add r3, pc | r3 = 0x143f6;
0x0000a1c0 b 0xa16c | goto label_3;
| label_7:
0x0000a1c2 mov.w r1, 0x1d0 | r1 = 0x1d0;
0x0000a1c6 mov r0, r4 | r0 = r4;
0x0000a1c8 mov r2, r8 | r2 = r8;
0x0000a1ca bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a1ce mov r2, sb | r2 = sb;
0x0000a1d0 movw r1, 0x1d1 | r1 = 0x1d1;
0x0000a1d4 mov r0, r4 | r0 = r4;
0x0000a1d6 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a1da mvn r3, 0x62 | r3 = ~0x62;
0x0000a1de str r3, [sp, 0x28] | var_28h = r3;
0x0000a1e0 b 0xa11a | goto label_4;
| label_15:
0x0000a1e2 ldr r3, [pc, 0x54] |
0x0000a1e4 add r3, pc | r3 = 0x14422;
0x0000a1e6 b 0xa19e |
| } while (1);
| label_16:
0x0000a1e8 ldr r3, [pc, 0x50] |
0x0000a1ea add r3, pc | r3 = 0x1442a;
0x0000a1ec b 0xa16c | goto label_3;
| label_17:
0x0000a1ee ldr r3, [pc, 0x50] |
0x0000a1f0 add r3, pc | r3 = 0x14436;
0x0000a1f2 b 0xa16c | goto label_3;
| label_11:
0x0000a1f4 blx 0x348c | fprintf_chk ()
0x0000a1f8 ldr r4, [pc, 0x230] | r4 = *(0xa42c);
0x0000a1fa movs r2, r0 | r2 = r0;
0x0000a1fc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000a1fe movs r0, r0 |
0x0000a200 lsrs r2, r3, 0x15 | r2 = r3 >> 0x15;
0x0000a202 movs r1, r0 | r1 = r0;
0x0000a204 ldr r4, [pc, 0x1a0] | r4 = *(0xa3a8);
0x0000a206 movs r2, r0 | r2 = r0;
0x0000a208 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x0000a20a movs r0, r0 |
0x0000a20c lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x0000a20e movs r0, r0 |
0x0000a210 lsrs r4, r4, 0xe | r4 >>= 0xe;
0x0000a212 movs r1, r0 | r1 = r0;
0x0000a214 lsrs r6, r6, 0xb | r6 >>= 0xb;
0x0000a216 movs r1, r0 | r1 = r0;
0x0000a218 lsrs r4, r0, 0x11 | r4 = r0 >> 0x11;
0x0000a21a movs r1, r0 | r1 = r0;
0x0000a21c ldr r3, [pc, 0x178] | r3 = *(0xa398);
0x0000a21e movs r2, r0 | r2 = r0;
0x0000a220 add.w r0, lr, 0x800000 | r0 = lr + 0x800000;
0x0000a224 lsrs r0, r1, 0xb | r0 = r1 >> 0xb;
0x0000a226 movs r1, r0 | r1 = r0;
0x0000a228 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xa244 */
| #include <stdint.h>
|
; (fcn) fcn.0000a244 () | void fcn_0000a244 (int16_t arg1, int16_t arg2, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
0x0000a244 push {r0, r2, r3, r4, r5, r6, sb, fp, lr} |
0x0000a248 rors r0, r6 | __asm ("rors r0, r6");
0x0000a24a mov r4, r0 | r4 = r0;
0x0000a24c mov r7, r3 | r7 = r3;
0x0000a24e ldr r3, [pc, 0x1f0] | r3 = *(0xa442);
0x0000a250 add r2, pc | r2 += pc;
0x0000a252 sub sp, 0x18 |
0x0000a254 add.w r0, r2, 0xa4 | r0 = r2 + 0xa4;
0x0000a258 ldr r2, [pc, 0x1e8] |
0x0000a25a movs r6, 0 | r6 = 0;
0x0000a25c mov r5, r1 | r5 = r1;
0x0000a25e movw r1, 0x219 | r1 = 0x219;
0x0000a262 add r2, pc | r2 = 0x146aa;
0x0000a264 ldr r3, [r2, r3] |
0x0000a266 movs r2, 3 | r2 = 3;
0x0000a268 ldr r3, [r3] | r3 = *(0x146aa);
0x0000a26a str r3, [sp, 0x14] | var_14h = r3;
0x0000a26c mov.w r3, 0 | r3 = 0;
0x0000a270 str r6, [sp, 0x10] | var_10h = r6;
0x0000a272 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000a276 ldr.w r2, [r4, 0x84] | r2 = *((r4 + 0x84));
0x0000a27a cmp r2, 0 |
| if (r2 == 0) {
0x0000a27c beq 0xa2fa | goto label_5;
| }
0x0000a27e ldr r0, [pc, 0x1c8] |
0x0000a280 movs r2, 0xb | r2 = 0xb;
0x0000a282 movw r1, 0x21d | r1 = 0x21d;
0x0000a286 add r0, pc | r0 = 0x146d4;
0x0000a288 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000a28c mov r6, r0 | r6 = r0;
0x0000a28e cmp r0, 0 |
| if (r0 == 0) {
0x0000a290 beq.w 0xa430 | goto label_6;
| }
0x0000a294 ldrb r3, [r5] | r3 = *(r5);
0x0000a296 cmp r3, 0x73 |
| if (r3 == 0x73) {
0x0000a298 bne 0xa2a2 |
0x0000a29a ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0000a29c cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x0000a29e beq.w 0xa3b4 | goto label_7;
| }
| }
| label_2:
0x0000a2a2 ldr r1, [pc, 0x1a8] |
0x0000a2a4 mov r0, r5 | r0 = r5;
0x0000a2a6 add r1, pc | r1 = 0x146f8;
0x0000a2a8 blx 0x372c | r0 = cxa_finalize ();
0x0000a2ac cmp r0, 0 |
| if (r0 != 0) {
0x0000a2ae bne.w 0xa3be | goto label_8;
| }
| label_1:
0x0000a2b2 ldr r3, [pc, 0x19c] |
0x0000a2b4 movs r2, 1 | r2 = 1;
0x0000a2b6 ldr.w r8, [pc, 0x19c] |
0x0000a2ba movs r1, 0xb | r1 = 0xb;
0x0000a2bc mov r0, r6 | r0 = r6;
0x0000a2be add r3, pc | r3 = 0x14714;
0x0000a2c0 add r8, pc | r8 = 0x1471a;
0x0000a2c2 strd r3, r7, [sp, 4] | __asm ("strd r3, r7, [var_8h]");
0x0000a2c6 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000a2ca mov.w r3, -1 | r3 = -1;
0x0000a2ce blx 0x3378 | r0 = shutdown ();
0x0000a2d2 cmp r0, 0xa |
0x0000a2d4 mov r5, r0 | r5 = r0;
0x0000a2d6 ble 0xa32a |
| while (r0 > 0xa) {
| label_0:
0x0000a2d8 mvn r3, 1 | r3 = ~1;
0x0000a2dc str r3, [sp, 0x10] | var_10h = r3;
| label_4:
0x0000a2de ldr r2, [pc, 0x178] |
0x0000a2e0 mov r3, r5 | r3 = r5;
0x0000a2e2 movs r1, 0 | r1 = 0;
0x0000a2e4 movs r0, 5 | r0 = 5;
0x0000a2e6 add r2, pc | r2 = 0x14744;
0x0000a2e8 bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_3:
0x0000a2ec ldr r0, [pc, 0x16c] |
0x0000a2ee mov r2, r6 | r2 = r6;
0x0000a2f0 movw r1, 0x24f | r1 = 0x24f;
0x0000a2f4 add r0, pc | r0 = 0x14754;
0x0000a2f6 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_5:
0x0000a2fa ldr r0, [pc, 0x164] |
0x0000a2fc movs r3, 3 | r3 = 3;
0x0000a2fe add r2, sp, 0x10 | r2 += var_10h;
0x0000a300 movw r1, 0x253 | r1 = 0x253;
0x0000a304 add r0, pc | r0 = 0x1476a;
0x0000a306 adds r0, 0xa4 | r0 += 0xa4;
0x0000a308 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000a30c ldr r2, [pc, 0x154] |
0x0000a30e ldr r3, [pc, 0x130] | r3 = *(0xa442);
0x0000a310 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000a312 add r2, pc | r2 = 0x1477a;
0x0000a314 ldr r3, [r2, r3] | r3 = *(0x1477a);
0x0000a316 ldr r2, [r3] | r2 = *(0x1477a);
0x0000a318 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000a31a eors r2, r3 | r2 ^= r3;
0x0000a31c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a320 bne.w 0xa438 | goto label_9;
| }
0x0000a324 add sp, 0x18 |
0x0000a326 pop.w {r4, r5, r6, r7, r8, pc} |
0x0000a32a ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0000a32e mov r1, r6 | r1 = r6;
0x0000a330 ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000a332 lsls r0, r0, 2 | r0 <<= 2;
0x0000a334 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a336 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a338 ldr r3, [pc, 0x12c] |
0x0000a33a movs r2, 1 | r2 = 1;
0x0000a33c str r0, [sp, 0x10] | var_10h = r0;
0x0000a33e movs r1, 0xb | r1 = 0xb;
0x0000a340 mov r0, r6 | r0 = r6;
0x0000a342 str r7, [sp, 8] | var_8h = r7;
0x0000a344 add r3, pc | r3 = 0x147b0;
0x0000a346 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000a34a str r3, [sp, 4] | var_4h = r3;
0x0000a34c mov.w r3, -1 | r3 = -1;
0x0000a350 blx 0x3378 | r0 = shutdown ();
0x0000a354 cmp r0, 0xa |
0x0000a356 mov r5, r0 | r5 = r0;
0x0000a358 bgt 0xa2d8 |
| }
0x0000a35a ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0000a35e mov r1, r6 | r1 = r6;
0x0000a360 ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000a364 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a366 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a368 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000a36a movs r2, 1 | r2 = 1;
0x0000a36c movs r1, 0xb | r1 = 0xb;
0x0000a36e str r7, [sp, 8] | var_8h = r7;
0x0000a370 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000a374 add r3, r0 | r3 += r0;
0x0000a376 mov r0, r6 | r0 = r6;
0x0000a378 str r3, [sp, 0x10] | var_10h = r3;
0x0000a37a ldr r3, [pc, 0xf0] |
0x0000a37c add r3, pc | r3 = 0x147ee;
0x0000a37e str r3, [sp, 4] | var_4h = r3;
0x0000a380 mov.w r3, -1 | r3 = -1;
0x0000a382 adds r3, 0xff | r3 += 0xff;
0x0000a384 blx 0x3378 | r0 = shutdown ();
0x0000a388 cmp r0, 0xa |
0x0000a38a mov r5, r0 | r5 = r0;
| if (r0 > 0xa) {
0x0000a38c bgt 0xa2d8 | goto label_0;
| }
0x0000a38e ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0000a392 mov r1, r6 | r1 = r6;
0x0000a394 ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000a398 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a39a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a39c ldr r2, [pc, 0xd0] |
0x0000a39e mov.w r3, -1 | r3 = -1;
0x0000a3a2 str r7, [sp, 8] | var_8h = r7;
0x0000a3a4 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000a3a8 add r2, pc | r2 = 0x1481c;
0x0000a3aa str r2, [sp, 4] | var_4h = r2;
0x0000a3ac ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000a3ae add r2, r0 | r2 += r0;
0x0000a3b0 str r2, [sp, 0x10] | var_10h = r2;
0x0000a3b2 b 0xa406 | goto label_10;
| label_7:
0x0000a3b4 ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x0000a3b6 cmp r3, 0 |
| if (r3 == 0) {
0x0000a3b8 beq.w 0xa2b2 | goto label_1;
| }
0x0000a3bc b 0xa2a2 | goto label_2;
| label_8:
0x0000a3be ldr r3, [pc, 0xb4] |
0x0000a3c0 movs r2, 1 | r2 = 1;
0x0000a3c2 ldr.w r8, [pc, 0xb4] |
0x0000a3c6 movs r1, 0xb | r1 = 0xb;
0x0000a3c8 mov r0, r6 | r0 = r6;
0x0000a3ca add r3, pc | r3 = 0x14844;
0x0000a3cc add r8, pc | r8 = 0x1484a;
0x0000a3ce strd r3, r7, [sp, 4] | __asm ("strd r3, r7, [var_8h]");
0x0000a3d2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000a3d6 mov.w r3, -1 | r3 = -1;
0x0000a3da blx 0x3378 | r0 = shutdown ();
0x0000a3de cmp r0, 0xa |
0x0000a3e0 mov r5, r0 | r5 = r0;
| if (r0 > 0xa) {
0x0000a3e2 bgt.w 0xa2d8 | goto label_0;
| }
0x0000a3e6 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x0000a3ea mov r1, r6 | r1 = r6;
0x0000a3ec ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x0000a3f0 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a3f2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a3f4 ldr r2, [pc, 0x84] |
0x0000a3f6 mov.w r3, -1 | r3 = -1;
0x0000a3fa str r7, [sp, 8] | var_8h = r7;
0x0000a3fc str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000a400 add r2, pc | r2 = 0x14880;
0x0000a402 str r0, [sp, 0x10] | var_10h = r0;
0x0000a404 str r2, [sp, 4] | var_4h = r2;
| label_10:
0x0000a406 movs r2, 1 | r2 = 1;
0x0000a408 movs r1, 0xb | r1 = 0xb;
0x0000a40a mov r0, r6 | r0 = r6;
0x0000a40c blx 0x3378 | r0 = shutdown ();
0x0000a410 cmp r0, 0xa |
0x0000a412 mov r5, r0 | r5 = r0;
| if (r0 > 0xa) {
0x0000a414 bgt.w 0xa2d8 | goto label_0;
| }
0x0000a416 add r7, sp, 0x180 | r7 = sp + 0x180;
0x0000a418 ldrd r0, r3, [r4, 0x80] | __asm ("ldrd r0, r3, [r4, 0x80]");
0x0000a41c mov r1, r6 | r1 = r6;
0x0000a41e ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a420 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a422 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000a424 add r0, r3 | r0 += r3;
0x0000a426 str r0, [sp, 0x10] | var_10h = r0;
0x0000a428 adds r0, 2 | r0 += 2;
| if (r0 != 2) {
0x0000a42a bne.w 0xa2ec | goto label_3;
| }
0x0000a42e b 0xa2de | goto label_4;
| label_6:
0x0000a430 mvn r3, 0x62 | r3 = ~0x62;
0x0000a434 str r3, [sp, 0x10] | var_10h = r3;
0x0000a436 b 0xa2fa | goto label_5;
| label_9:
0x0000a438 blx 0x348c | fprintf_chk ()
0x0000a43c lsrs r0, r3, 0xc | r0 = r3 >> 0xc;
0x0000a43e movs r1, r0 | r1 = r0;
0x0000a440 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000a442 movs r0, r0 |
0x0000a444 ldr r2, [pc, 0xb8] | r2 = *(0xa500);
0x0000a446 movs r2, r0 | r2 = r0;
0x0000a448 lsrs r2, r5, 5 | r2 = r5 >> 5;
0x0000a44a movs r1, r0 | r1 = r0;
0x0000a44c ubfx r0, lr, 0, 1 | r0 = (lr >> 0) & ((1 << 1) - 1);
0x0000a450 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xa480 */
| #include <stdint.h>
|
; (fcn) fcn.0000a480 () | void fcn_0000a480 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| if (? < ?) {
0x0000a480 andhs r4, r3, 0xbc00 | r4 = r3 & 0xbc00;
| }
0x0000a484 push {r4, r5, r6, r7, lr} |
0x0000a486 mov r6, r0 | r6 = r0;
0x0000a488 ldr r4, [pc, 0xb8] |
0x0000a48a sub sp, 0xc |
0x0000a48c add r3, pc | r3 += pc;
0x0000a48e movs r5, 0 | r5 = 0;
0x0000a490 add.w r0, r3, 0xbc | r0 = r3 + 0xbc;
0x0000a494 ldr r3, [pc, 0xb0] | r3 = *(0xa548);
0x0000a496 add r4, pc | r4 = 0x149de;
0x0000a498 movw r1, 0x262 | r1 = 0x262;
0x0000a49c ldr r3, [r4, r3] |
0x0000a49e ldr r3, [r3] | r3 = *(0x149de);
0x0000a4a0 str r3, [sp, 4] | var_4h = r3;
0x0000a4a2 mov.w r3, 0 | r3 = 0;
0x0000a4a6 str r5, [sp] | *(sp) = r5;
0x0000a4a8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000a4ac ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x0000a4ae ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0000a4b0 cmp r3, r5 |
| if (r3 <= r5) {
0x0000a4b2 bgt 0xa4de |
| label_0:
0x0000a4b4 ldr r0, [pc, 0x94] |
0x0000a4b6 movs r3, 3 | r3 = 3;
0x0000a4b8 movs r2, 0 | r2 = 0;
0x0000a4ba movw r1, 0x281 | r1 = 0x281;
0x0000a4be add r0, pc | r0 = 0x14a0e;
0x0000a4c0 adds r0, 0xbc | r0 += 0xbc;
0x0000a4c2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000a4c6 ldr r2, [pc, 0x88] |
0x0000a4c8 ldr r3, [pc, 0x7c] | r3 = *(0xa548);
0x0000a4ca add r2, pc | r2 = 0x14a20;
0x0000a4cc ldr r3, [r2, r3] | r3 = *(0x14a20);
0x0000a4ce ldr r2, [r3] | r2 = *(0x14a20);
0x0000a4d0 ldr r3, [sp, 4] | r3 = var_4h;
0x0000a4d2 eors r2, r3 | r2 ^= r3;
0x0000a4d4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a4d8 bne 0xa53a | goto label_1;
| }
0x0000a4da add sp, 0xc |
0x0000a4dc pop {r4, r5, r6, r7, pc} |
| }
0x0000a4de ldrd r3, r2, [r0] | __asm ("ldrd r3, r2, [r0]");
0x0000a4e2 mov r7, sp | r7 = sp;
0x0000a4e4 mov r1, r7 | r1 = r7;
0x0000a4e6 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0000a4e8 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000a4ea ldr r4, [r2, 8] | r4 = *((r2 + 8));
0x0000a4ec ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000a4ee rsb.w r4, r4, 0xff00 | r4 = 0xff00 - r4;
0x0000a4f2 adds r4, 0xff | r4 += 0xff;
0x0000a4f4 add r4, r3 | r4 += r3;
0x0000a4f6 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x0000a4fa str r0, [sp] | *(sp) = r0;
0x0000a4fc b 0xa514 |
| while (r0 != 0) {
0x0000a4fe ldr r2, [sp] | r2 = *(sp);
0x0000a500 ldr r1, [r2] | r1 = *(r2);
0x0000a502 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0000a504 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0000a506 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000a508 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0000a50a subs r3, r3, r1 | r3 -= r1;
0x0000a50c cmp r4, r3 |
0x0000a50e itt lt |
| if (r4 >= r3) {
0x0000a510 movlt r4, r3 | r4 = r3;
| }
| if (r4 >= r3) {
0x0000a512 movlt r5, r2 | r5 = r2;
| }
0x0000a514 ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x0000a516 mov r1, r7 | r1 = r7;
0x0000a518 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x0000a51c cmp r0, 0 |
0x0000a51e bne 0xa4fe |
| }
0x0000a520 cmp r5, 0 |
| if (r5 == 0) {
0x0000a522 beq 0xa4b4 | goto label_0;
| }
0x0000a524 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
0x0000a526 ldrd r1, r2, [r3] | __asm ("ldrd r1, r2, [r3]");
0x0000a52a str r2, [r1] | *(r1) = r2;
0x0000a52c str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0000a52e ldr r2, [r5] | r2 = *(r5);
0x0000a530 strd r5, r2, [r3] | __asm ("strd r5, r2, [r3]");
0x0000a534 str r0, [r5] | *(r5) = r0;
0x0000a536 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x0000a538 b 0xa4b4 | goto label_0;
| label_1:
0x0000a53a blx 0x348c | fprintf_chk ()
0x0000a53e nop |
0x0000a540 lsrs r4, r3, 3 | r4 = r3 >> 3;
0x0000a542 movs r1, r0 | r1 = r0;
0x0000a544 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xa554 */
| #include <stdint.h>
|
; (fcn) fcn.0000a554 () | void fcn_0000a554 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
0x0000a554 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000a558 mov r6, r0 | r6 = r0;
0x0000a55a ldr.w r4, [pc, 0x44c] |
0x0000a55e sub sp, 0x44 |
0x0000a560 movs r3, 0 | r3 = 0;
0x0000a562 movs r2, 3 | r2 = 3;
0x0000a564 ldr.w r5, [pc, 0x444] | r5 = *(0x0000a9ac);
0x0000a568 movs r1, 0xc3 | r1 = 0xc3;
0x0000a56a add r4, pc | r4 = 0x14f18;
0x0000a56c add.w r0, r4, 0xd8 | r0 = r4 + 0xd8;
0x0000a570 ldr.w r4, [pc, 0x43c] |
0x0000a574 add r5, pc | r5 += pc;
0x0000a576 ldr r4, [r5, r4] | r4 = *((r5 + r4));
0x0000a578 ldr r4, [r4] | r4 = *(0xa9b0);
0x0000a57a str r4, [sp, 0x3c] | var_3ch = r4;
0x0000a57c mov.w r4, 0 | r4 = 0;
0x0000a580 strd r3, r3, [sp, 0x24] | __asm ("strd r3, r3, [var_24h]");
0x0000a584 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000a586 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000a58a ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000a58e cmp r3, 0 |
| if (r3 == 0) {
0x0000a590 beq 0xa68c | goto label_14;
| }
0x0000a592 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0000a594 add r2, sp, 0x30 | r2 += var_30h;
0x0000a596 ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000a59a add r1, sp, 0x28 | r1 += var_28h;
0x0000a59c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000a59e str r0, [sp, 0x24] | var_24h = r0;
0x0000a5a0 cmp r0, 0 |
| if (r0 != 0) {
0x0000a5a2 bne 0xa68c | goto label_14;
| }
0x0000a5a4 ldr.w r3, [pc, 0x40c] |
0x0000a5a8 mov r4, r0 | r4 = r0;
0x0000a5aa ldr.w sb, [pc, 0x40c] |
0x0000a5ae ldr.w r8, [pc, 0x40c] |
0x0000a5b2 add r3, pc | r3 = 0x14f6a;
0x0000a5b4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0000a5b6 add sb, pc | sb = 0x14f74;
0x0000a5b8 strd r0, r3, [sp, 0x18] | __asm ("strd r0, r3, [var_1ch]");
0x0000a5bc add r8, pc | r8 = 0x14f7e;
0x0000a5be str r0, [sp, 0x14] | var_14h = r0;
0x0000a5c0 b 0xa5f0 |
| while (r3 == 0x63) {
0x0000a5c2 ldrb r2, [r1, 1] | r2 = *((r1 + 1));
0x0000a5c4 cmp r2, 0x2d |
| if (r2 != 0x2d) {
0x0000a5c6 bne 0xa602 | goto label_15;
| }
| label_0:
0x0000a5c8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0000a5ca cmp r2, 0 |
| if (r2 == 0) {
0x0000a5cc beq.w 0xa6de | goto label_16;
| }
| label_3:
0x0000a5d0 movw r1, 0x153 | r1 = 0x153;
0x0000a5d4 mov r0, r8 | r0 = r8;
0x0000a5d6 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a5da movs r3, 0 | r3 = 0;
0x0000a5dc str r3, [sp, 0x2c] | var_2ch = r3;
| label_4:
0x0000a5de ldr r2, [sp, 0x28] | r2 = var_28h;
0x0000a5e0 ldr r1, [r2, r5] | r1 = *((r2 + r5));
0x0000a5e2 cmp r1, 0 |
| if (r1 != 0) {
0x0000a5e4 bne 0xa6de | goto label_16;
| }
0x0000a5e6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000a5e8 adds r4, 1 | r4++;
0x0000a5ea cmp r3, 0 |
| if (r3 != 0) {
0x0000a5ec bne.w 0xa6f6 | goto label_17;
| }
| label_1:
0x0000a5f0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0000a5f2 cmp r3, r4 |
| if (r3 <= r4) {
0x0000a5f4 ble 0xa6f6 | goto label_17;
| }
0x0000a5f6 ldr.w r1, [r2, r4, lsl 2] | offset_0 = r4 << 2;
| r1 = *((r2 + offset_0));
0x0000a5fa lsls r5, r4, 2 | r5 = r4 << 2;
0x0000a5fc ldrb r3, [r1] | r3 = *(r1);
0x0000a5fe cmp r3, 0x63 |
0x0000a600 beq 0xa5c2 |
| }
| label_15:
0x0000a602 ldrb r2, [r1] | r2 = *(r1);
0x0000a604 cmp r2, 0x63 |
| if (r2 != 0x63) {
0x0000a606 bne 0xa614 | goto label_18;
| }
0x0000a608 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x0000a60a cmp r0, 0x35 |
| if (r0 != 0x35) {
0x0000a60c bne 0xa614 | goto label_18;
| }
0x0000a60e ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x0000a610 cmp r0, 0x2d |
| if (r0 == 0x2d) {
0x0000a612 beq 0xa5c8 | goto label_0;
| }
| label_18:
0x0000a614 cmp r3, 0x71 |
| if (r3 != 0x71) {
0x0000a616 bne 0xa61e | goto label_19;
| }
0x0000a618 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x0000a61a cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x0000a61c beq 0xa5c8 | goto label_0;
| }
| label_19:
0x0000a61e cmp r2, 0x71 |
| if (r2 != 0x71) {
0x0000a620 bne 0xa62e | goto label_20;
| }
0x0000a622 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x0000a624 cmp r3, 0x35 |
| if (r3 != 0x35) {
0x0000a626 bne 0xa62e | goto label_20;
| }
0x0000a628 ldrb r3, [r1, 2] | r3 = *((r1 + 2));
0x0000a62a cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x0000a62c beq 0xa5c8 | goto label_0;
| }
| label_20:
0x0000a62e ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000a632 add.w fp, sp, 0x34 |
0x0000a636 add r7, sp, 0x2c | r7 += var_2ch;
0x0000a638 ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000a63c mov r2, r7 | r2 = r7;
0x0000a63e ldr.w sl, [r3, 0x10] | sl = *((r3 + 0x10));
0x0000a642 mov r3, fp | r3 = fp;
0x0000a644 blx sl | sl (r0, r2, r3);
0x0000a646 str r0, [sp, 0x24] | var_24h = r0;
0x0000a648 cmp r0, 0 |
| if (r0 != 0) {
0x0000a64a bne 0xa71e | goto label_6;
| }
0x0000a64c ldr.w sl, [r6, 0x8c] | sl = *((r6 + 0x8c));
0x0000a650 cmp.w sl, 0 |
| if (sl != 0) {
0x0000a654 beq 0xa666 |
0x0000a656 ldr.w r0, [r6, 0x94] | r0 = *((r6 + 0x94));
0x0000a65a mov r2, fp | r2 = fp;
0x0000a65c mov r1, r7 | r1 = r7;
0x0000a65e blx sl | sl (r0, r1, r2);
0x0000a660 str r0, [sp, 0x24] | var_24h = r0;
0x0000a662 cmp r0, 0 |
| if (r0 != 0) {
0x0000a664 bne 0xa71e | goto label_6;
| }
| }
0x0000a666 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000a668 ldr.w sl, [r3, r5] | sl = *((r3 + r5));
0x0000a66c ldrb.w r2, [sl] | r2 = *(sl);
0x0000a670 cmp r2, 0x72 |
| if (r2 != 0x72) {
0x0000a672 bne 0xa728 | goto label_21;
| }
0x0000a674 ldrb.w r1, [sl, 1] | r1 = *((sl + 1));
0x0000a678 cmp r1, 0x35 |
| if (r1 != 0x35) {
0x0000a67a bne 0xa728 | goto label_21;
| }
0x0000a67c ldrb.w r1, [sl, 2] | r1 = *((sl + 2));
0x0000a680 cmp r1, 0x2d |
| if (r1 != 0x2d) {
0x0000a682 bne 0xa728 | goto label_21;
| }
0x0000a684 ldr.w sl, [pc, 0x338] |
0x0000a688 add sl, pc | sl = 0x1504c;
0x0000a68a b 0xa742 | goto label_7;
| label_14:
0x0000a68c mov.w fp, 0 |
0x0000a690 mov r7, fp | r7 = fp;
| label_2:
0x0000a692 ldr r1, [r6] | r1 = *(r6);
0x0000a694 movs r0, 3 | r0 = 3;
0x0000a696 ldr r2, [pc, 0x32c] |
0x0000a698 mov r3, r7 | r3 = r7;
0x0000a69a strd fp, r1, [sp] | __asm ("strd fp, r1, [sp]");
0x0000a69e mov.w r1, -1 | r1 = -1;
0x0000a6a2 add r2, pc | r2 = 0x1506c;
0x0000a6a4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000a6a8 mov r0, r6 | r0 = r6;
0x0000a6aa bl 0xa480 | fcn_0000a480 (r0);
| label_13:
0x0000a6ae ldr r0, [pc, 0x318] |
0x0000a6b0 movs r3, 3 | r3 = 3;
0x0000a6b2 add r2, sp, 0x24 | r2 += var_24h;
0x0000a6b4 movw r1, 0x161 | r1 = 0x161;
0x0000a6b8 add r0, pc | r0 = 0x15086;
0x0000a6ba adds r0, 0xd8 | r0 += 0xd8;
0x0000a6bc bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000a6c0 ldr r2, [pc, 0x308] |
0x0000a6c2 ldr r3, [pc, 0x2ec] | r3 = *(0xa9b2);
0x0000a6c4 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0000a6c6 add r2, pc | r2 = 0x15096;
0x0000a6c8 ldr r3, [r2, r3] | r3 = *(0x15096);
0x0000a6ca ldr r2, [r3] | r2 = *(0x15096);
0x0000a6cc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000a6ce eors r2, r3 | r2 ^= r3;
0x0000a6d0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000a6d4 bne.w 0xa9a4 | goto label_22;
| }
0x0000a6d8 add sp, 0x44 |
0x0000a6da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0000a6de mov r2, r1 | r2 = r1;
0x0000a6e0 mov r0, sb | r0 = sb;
0x0000a6e2 movw r1, 0x157 | r1 = 0x157;
0x0000a6e6 adds r4, 1 | r4++;
0x0000a6e8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a6ec ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000a6ee ldr r2, [sp, 0x28] | r2 = var_28h;
0x0000a6f0 cmp r3, 0 |
| if (r3 == 0) {
0x0000a6f2 beq.w 0xa5f0 | goto label_1;
| }
| label_17:
0x0000a6f6 ldrd fp, r7, [sp, 0x14] | __asm ("ldrd fp, r7, [var_14h]");
0x0000a6fa cmp r2, 0 |
| if (r2 == 0) {
0x0000a6fc beq 0xa692 | goto label_2;
| }
0x0000a6fe ldr r0, [pc, 0x2d0] |
0x0000a700 movw r1, 0x15b | r1 = 0x15b;
0x0000a704 add r0, pc | r0 = 0x150da;
0x0000a706 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a70a b 0xa692 | goto label_2;
| label_5:
0x0000a70c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000a70e ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000a712 ldr r1, [r3, r5] | r1 = *((r3 + r5));
0x0000a714 ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000a716 adds r0, 0x84 | r0 += 0x84;
0x0000a718 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a71a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a71c str r0, [sp, 0x24] | var_24h = r0;
| label_6:
0x0000a71e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0000a720 cmp r2, 0 |
| if (r2 != 0) {
0x0000a722 bne.w 0xa5d0 | goto label_3;
| }
0x0000a726 b 0xa5de | goto label_4;
| label_21:
0x0000a728 cmp r2, 0x73 |
| if (r2 != 0x73) {
0x0000a72a bne 0xa7b8 | goto label_23;
| }
0x0000a72c ldrb.w r2, [sl, 1] | r2 = *((sl + 1));
0x0000a730 cmp r2, 0x35 |
| if (r2 != 0x35) {
0x0000a732 bne 0xa7b8 | goto label_23;
| }
0x0000a734 ldrb.w r2, [sl, 2] | r2 = *((sl + 2));
0x0000a738 cmp r2, 0x2d |
| if (r2 != 0x2d) {
0x0000a73a bne 0xa7b8 | goto label_23;
| }
0x0000a73c ldr.w sl, [pc, 0x294] |
0x0000a740 add sl, pc | sl = 0x15118;
| label_7:
0x0000a742 ldr.w r2, [r6, 0x9c] | r2 = *((r6 + 0x9c));
0x0000a746 cmp r2, 4 |
| if (r2 <= 4) {
0x0000a748 ble.w 0xa994 | goto label_24;
| }
0x0000a74c movs r0, 5 | r0 = 5;
| label_8:
0x0000a74e ldr r2, [sp, 0x34] | r2 = var_34h;
0x0000a750 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0000a752 bl 0x9e8c | r0 = fcn_00009e8c (r0, r1, r2);
0x0000a756 mov r7, r0 | r7 = r0;
0x0000a758 cmp r0, 0 |
| if (r0 == 0) {
0x0000a75a beq 0xa70c | goto label_5;
| }
0x0000a75c ldrb.w r2, [sl] | r2 = *(sl);
0x0000a760 cmp r2, 0x72 |
| if (r2 == 0x72) {
0x0000a762 bne 0xa7d2 |
0x0000a764 ldrb.w r1, [sl, 1] | r1 = *((sl + 1));
0x0000a768 subs.w fp, r1, 0x2d |
| if (fp != r1) {
0x0000a76c bne 0xa7d2 | goto label_25;
| }
0x0000a76e ldr.w r3, [r6, 0x9c] | r3 = *((r6 + 0x9c));
0x0000a772 add r1, sp, 0x38 | r1 += var_38h;
0x0000a774 ldrb r2, [r0] | r2 = *(r0);
0x0000a776 str.w fp, [sp, 0x38] | __asm ("str.w fp, [var_38h]");
0x0000a77a str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x0000a77c movs r3, 1 | r3 = 1;
0x0000a77e str r3, [sp] | *(sp) = r3;
0x0000a780 ands r3, r2 | r3 &= r2;
0x0000a782 ubfx r2, r2, 1, 2 | r2 = (r2 >> 1) & ((1 << 2) - 1);
0x0000a786 bl 0x3ca0 | fcn_00003ca0 (r0, r1, r2, r3, r4);
0x0000a78a movs r3, 6 | r3 = 6;
0x0000a78c str r0, [sp, 0x38] | var_38h = r0;
0x0000a78e ldr r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x0000a790 mov r1, r0 | r1 = r0;
0x0000a792 strb.w r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
0x0000a796 ldr r0, [r6, 0x70] | r0 = *((r6 + 0x70));
0x0000a798 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x0000a79c ldr.w r3, [r6, 0x9c] | r3 = *((r6 + 0x9c));
0x0000a7a0 cmp r3, 4 |
| if (r3 > 4) {
0x0000a7a2 bgt.w 0xa8e8 | goto label_26;
| }
| label_9:
0x0000a7a6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000a7a8 mov r0, r7 | r0 = r7;
0x0000a7aa adds r3, 1 | r3++;
0x0000a7ac str r3, [sp, 0x14] | var_14h = r3;
0x0000a7ae movs r3, 0 | r3 = 0;
0x0000a7b0 str r3, [r7, 4] | *((r7 + 4)) = r3;
0x0000a7b2 bl 0x60cc | fcn_000060cc (r0);
0x0000a7b6 b 0xa71e | goto label_6;
| label_23:
0x0000a7b8 ldr r1, [pc, 0x21c] |
0x0000a7ba movs r2, 4 | r2 = 4;
0x0000a7bc mov r0, sl | r0 = sl;
0x0000a7be add r1, pc | r1 = 0x1519a;
0x0000a7c0 blx 0x3698 | r0 = fcn_00003698 ();
0x0000a7c4 cmp r0, 0 |
| if (r0 != 0) {
0x0000a7c6 bne.w 0xa8e4 | goto label_27;
| }
0x0000a7ca ldr.w sl, [pc, 0x210] |
0x0000a7ce add sl, pc | sl = 0x151b0;
0x0000a7d0 b 0xa742 | goto label_7;
| }
| label_25:
0x0000a7d2 cmp r2, 0x73 |
| if (r2 == 0x73) {
0x0000a7d4 bne 0xa846 |
0x0000a7d6 ldrb.w r2, [sl, 1] | r2 = *((sl + 1));
0x0000a7da subs r2, 0x2d | r2 -= 0x2d;
| if (r2 != 0x2d) {
0x0000a7dc bne 0xa846 | goto label_28;
| }
0x0000a7de ldr r0, [pc, 0x200] |
0x0000a7e0 movw r1, 0x10f | r1 = 0x10f;
0x0000a7e4 str r2, [sp, 0x38] | var_38h = r2;
0x0000a7e6 movs r2, 0xb | r2 = 0xb;
0x0000a7e8 add r0, pc | r0 = 0x151ce;
0x0000a7ea bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000a7ee mov sl, r0 | sl = r0;
0x0000a7f0 cmp r0, 0 |
| if (r0 == 0) {
0x0000a7f2 beq.w 0xa99c | goto label_29;
| }
0x0000a7f6 ldr.w r3, [r6, 0x9c] | r3 = *((r6 + 0x9c));
0x0000a7fa ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0000a7fc cmp r3, 4 |
0x0000a7fe str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x0000a800 str r2, [sp, 8] | var_8h = r2;
| if (r3 <= 4) {
0x0000a802 ble.w 0xa968 | goto label_30;
| }
0x0000a806 ldr r3, [pc, 0x1dc] |
0x0000a808 add r3, pc | r3 = 0x151f2;
0x0000a80a str r3, [sp, 4] | var_4h = r3;
0x0000a80c ldr r3, [pc, 0x1d8] |
0x0000a80e add r3, pc | r3 = 0x151fa;
| label_11:
0x0000a810 str r3, [sp] | *(sp) = r3;
0x0000a812 movs r2, 1 | r2 = 1;
0x0000a814 mov.w r3, -1 | r3 = -1;
0x0000a818 movs r1, 0xb | r1 = 0xb;
0x0000a81a blx 0x3378 | r0 = shutdown ();
0x0000a81e cmp r0, 0xa |
0x0000a820 mov r3, r0 | r3 = r0;
| if (r0 <= 0xa) {
0x0000a822 ble 0xa91a | goto label_31;
| }
0x0000a824 mvn r2, 1 | r2 = ~1;
0x0000a828 movs r1, 0 | r1 = 0;
0x0000a82a str r2, [sp, 0x24] | var_24h = r2;
0x0000a82c movs r0, 5 | r0 = 5;
0x0000a82e ldr r2, [pc, 0x1bc] |
0x0000a830 add r2, pc | r2 = 0x15222;
0x0000a832 bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_10:
0x0000a836 ldr r0, [pc, 0x1b8] |
0x0000a838 mov r2, sl | r2 = sl;
0x0000a83a movw r1, 0x12f | r1 = 0x12f;
0x0000a83e add r0, pc | r0 = 0x15234;
0x0000a840 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a844 b 0xa71e | goto label_6;
| }
| label_28:
0x0000a846 ldrb.w r2, [sl] | r2 = *(sl);
0x0000a84a cmp r2, 0x73 |
| if (r2 != 0x73) {
0x0000a84c bne.w 0xa71e | goto label_6;
| }
0x0000a850 ldrb.w r2, [sl, 1] | r2 = *((sl + 1));
0x0000a854 cmp r2, 0x63 |
| if (r2 != 0x63) {
0x0000a856 bne.w 0xa71e | goto label_6;
| }
0x0000a85a ldrb.w r3, [sl, 2] | r3 = *((sl + 2));
0x0000a85e cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x0000a860 bne.w 0xa71e | goto label_6;
| }
0x0000a864 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0000a866 movs r2, 0xb | r2 = 0xb;
0x0000a868 mov.w r1, 0x136 | r1 = 0x136;
0x0000a86c bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000a870 mov sl, r0 | sl = r0;
0x0000a872 cmp r0, 0 |
| if (r0 == 0) {
0x0000a874 beq.w 0xa99c | goto label_29;
| }
0x0000a878 ldr.w r2, [r6, 0x9c] | r2 = *((r6 + 0x9c));
0x0000a87c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0000a87e cmp r2, 4 |
0x0000a880 str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x0000a882 str r3, [sp, 8] | var_8h = r3;
| if (r2 <= 4) {
0x0000a884 ble 0xa974 | goto label_32;
| }
0x0000a886 ldr r3, [pc, 0x16c] |
0x0000a888 add r3, pc | r3 = 0x15282;
0x0000a88a str r3, [sp, 4] | var_4h = r3;
0x0000a88c ldr r3, [pc, 0x168] |
0x0000a88e add r3, pc | r3 = 0x1528a;
| do {
0x0000a890 str r3, [sp] | *(sp) = r3;
0x0000a892 movs r2, 1 | r2 = 1;
0x0000a894 mov.w r3, -1 | r3 = -1;
0x0000a898 movs r1, 0xb | r1 = 0xb;
0x0000a89a blx 0x3378 | r0 = shutdown ();
0x0000a89e cmp r0, 0xa |
0x0000a8a0 mov r3, r0 | r3 = r0;
| if (r0 > 0xa) {
0x0000a8a2 bgt 0xa980 | goto label_33;
| }
0x0000a8a4 ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000a8a8 mov r1, sl | r1 = sl;
0x0000a8aa ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000a8ae ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0000a8b0 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| if (r0 != 0) {
0x0000a8b2 cbz r0, 0xa8c6 |
0x0000a8b4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000a8b6 ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000a8ba ldr r1, [r3, r5] | r1 = *((r3 + r5));
0x0000a8bc ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000a8c0 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000a8c2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a8c4 str r0, [sp, 0x24] | var_24h = r0;
| }
| label_12:
0x0000a8c6 mov r2, r7 | r2 = r7;
0x0000a8c8 ldr r7, [pc, 0x130] |
0x0000a8ca mov.w r1, 0x14a | r1 = 0x14a;
0x0000a8ce add r7, pc | r7 = 0x152ce;
0x0000a8d0 mov r0, r7 | r0 = r7;
0x0000a8d2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a8d6 mov r2, sl | r2 = sl;
0x0000a8d8 mov r0, r7 | r0 = r7;
0x0000a8da movw r1, 0x14b | r1 = 0x14b;
0x0000a8de bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a8e2 b 0xa71e | goto label_6;
| label_27:
0x0000a8e4 movs r0, 4 | r0 = 4;
0x0000a8e6 b 0xa74e | goto label_8;
| label_26:
0x0000a8e8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000a8ea movw r1, 0x101 | r1 = 0x101;
0x0000a8ee ldr r0, [pc, 0x110] |
0x0000a8f0 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0000a8f2 add r0, pc | r0 = 0x152f8;
0x0000a8f4 mov sl, r0 | sl = r0;
0x0000a8f6 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0000a8f8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a8fc ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000a8fe mov r0, sl | r0 = sl;
0x0000a900 mov.w r1, 0x102 | r1 = 0x102;
0x0000a904 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0000a906 ldr r2, [r3] | r2 = *(r3);
0x0000a908 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000a90c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000a90e ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0000a910 str.w fp, [r3] | __asm ("str.w fp, [r3]");
0x0000a914 str.w fp, [r3, 8] | __asm ("str.w fp, [r3, 8]");
0x0000a918 b 0xa7a6 | goto label_9;
| label_31:
0x0000a91a ldrb r2, [r7] | r2 = *(r7);
0x0000a91c movs r3, 1 | r3 = 1;
0x0000a91e add r1, sp, 0x38 | r1 += var_38h;
0x0000a920 str r3, [sp] | *(sp) = r3;
0x0000a922 mov r0, r7 | r0 = r7;
0x0000a924 ands r3, r2 | r3 &= r2;
0x0000a926 ubfx r2, r2, 1, 2 | r2 = (r2 >> 1) & ((1 << 2) - 1);
0x0000a92a bl 0x3ca0 | fcn_00003ca0 (r0, r1, r2, r3, r4);
0x0000a92e ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000a932 mov r1, sl | r1 = sl;
0x0000a934 str r0, [sp, 0x38] | var_38h = r0;
0x0000a936 ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000a93a ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0000a93c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a93e ldr r1, [sp, 0x38] | r1 = var_38h;
| if (r0 == 0) {
0x0000a940 cbnz r0, 0xa948 |
0x0000a942 movs r3, 7 | r3 = 7;
0x0000a944 strb.w r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
| }
0x0000a948 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000a94a ldr r2, [r1, 0x30] | r2 = *((r1 + 0x30));
0x0000a94c adds r3, 1 | r3++;
0x0000a94e str r3, [sp, 0x18] | var_18h = r3;
0x0000a950 movs r3, 0 | r3 = 0;
0x0000a952 str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
0x0000a954 str r3, [r1, 0x28] | *((r1 + 0x28)) = r3;
0x0000a956 ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x0000a958 bl 0x9f30 | fcn_00009f30 (r0, r1, r2);
0x0000a95c movs r3, 0 | r3 = 0;
0x0000a95e mov r0, r7 | r0 = r7;
0x0000a960 str r3, [r7, 4] | *((r7 + 4)) = r3;
0x0000a962 bl 0x60cc | fcn_000060cc (r0);
0x0000a966 b 0xa836 | goto label_10;
| label_30:
0x0000a968 ldr r3, [pc, 0x98] |
0x0000a96a add r3, pc | r3 = 0x15372;
0x0000a96c str r3, [sp, 4] | var_4h = r3;
0x0000a96e ldr r3, [pc, 0x98] |
0x0000a970 add r3, pc | r3 = 0x1537e;
0x0000a972 b 0xa810 | goto label_11;
| label_32:
0x0000a974 ldr r3, [pc, 0x94] |
0x0000a976 add r3, pc | r3 = 0x15386;
0x0000a978 str r3, [sp, 4] | var_4h = r3;
0x0000a97a ldr r3, [pc, 0x94] |
0x0000a97c add r3, pc | r3 = 0x15392;
0x0000a97e b 0xa890 |
| } while (1);
| label_33:
0x0000a980 mvn r2, 1 | r2 = ~1;
0x0000a984 movs r1, 0 | r1 = 0;
0x0000a986 str r2, [sp, 0x24] | var_24h = r2;
0x0000a988 movs r0, 5 | r0 = 5;
0x0000a98a ldr r2, [pc, 0x88] |
0x0000a98c add r2, pc | r2 = 0x153a6;
0x0000a98e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000a992 b 0xa8c6 | goto label_12;
| label_24:
0x0000a994 mvn r3, 1 | r3 = ~1;
0x0000a998 str r3, [sp, 0x24] | var_24h = r3;
0x0000a99a b 0xa6ae | goto label_13;
| label_29:
0x0000a99c mvn r3, 0x62 | r3 = ~0x62;
0x0000a9a0 str r3, [sp, 0x24] | var_24h = r3;
0x0000a9a2 b 0xa6ae | goto label_13;
| label_22:
0x0000a9a4 blx 0x348c | fprintf_chk ()
0x0000a9a8 lsls r6, r7, 0x1f | r6 = r7 << 0x1f;
0x0000a9aa movs r1, r0 | r1 = r0;
0x0000a9ac bx r3 | return uint32_t (*r3)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xaa18 */
| #include <stdint.h>
|
; (fcn) fcn.0000aa18 () | void fcn_0000aa18 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x0000aa18 andhs r4, r3, 0x7800 | r4 = r3 & 0x7800;
| }
0x0000aa1c push {r4, r5, r6, lr} |
0x0000aa1e mov r5, r1 | r5 = r1;
0x0000aa20 ldr r1, [pc, 0x74] |
0x0000aa22 mov r4, r0 | r4 = r0;
0x0000aa24 add r3, pc | r3 += pc;
0x0000aa26 sub sp, 8 |
0x0000aa28 add.w r0, r3, 0xf8 | r0 = r3 + 0xf8;
0x0000aa2c ldr r3, [pc, 0x6c] | r3 = *(0xaa9c);
0x0000aa2e add r1, pc | r1 = 0x154ca;
0x0000aa30 movs r6, 0 | r6 = 0;
0x0000aa32 ldr r3, [r1, r3] |
0x0000aa34 movs r1, 0x77 | r1 = 0x77;
0x0000aa36 ldr r3, [r3] | r3 = *(0x154ca);
0x0000aa38 str r3, [sp, 4] | var_4h = r3;
0x0000aa3a mov.w r3, 0 | r3 = 0;
0x0000aa3e str r6, [sp] | *(sp) = r6;
0x0000aa40 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000aa44 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
| if (r3 == 0) {
0x0000aa48 cbz r3, 0xaa5c | goto label_0;
| }
0x0000aa4a mov r0, r4 | r0 = r4;
0x0000aa4c ldrd r3, r6, [r3] | __asm ("ldrd r3, r6, [r3]");
0x0000aa50 ldr r1, [r0], 0x80 | r1 = *(r0);
| r0 += 0x80;
0x0000aa54 mov r2, r5 | r2 = r5;
0x0000aa56 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000aa58 str r0, [sp] | *(sp) = r0;
0x0000aa5a cbz r0, 0xaa86 |
| while (1) {
| label_0:
0x0000aa5c ldr r0, [pc, 0x40] |
0x0000aa5e movs r3, 3 | r3 = 3;
0x0000aa60 mov r2, sp | r2 = sp;
0x0000aa62 movs r1, 0x7f | r1 = 0x7f;
0x0000aa64 add r0, pc | r0 = 0x15508;
0x0000aa66 adds r0, 0xf8 | r0 += 0xf8;
0x0000aa68 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000aa6c ldr r2, [pc, 0x34] |
0x0000aa6e ldr r3, [pc, 0x2c] | r3 = *(0xaa9e);
0x0000aa70 ldr r0, [sp] | r0 = *(sp);
0x0000aa72 add r2, pc | r2 = 0x1551a;
0x0000aa74 ldr r3, [r2, r3] | r3 = *(0x1551a);
0x0000aa76 ldr r2, [r3] | r2 = *(0x1551a);
0x0000aa78 ldr r3, [sp, 4] | r3 = var_4h;
0x0000aa7a eors r2, r3 | r2 ^= r3;
0x0000aa7c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000aa80 bne 0xaa90 | goto label_1;
| }
0x0000aa82 add sp, 8 |
0x0000aa84 pop {r4, r5, r6, pc} |
0x0000aa86 mov r0, r4 | r0 = r4;
0x0000aa88 bl 0xa554 | fcn_0000a554 (r0);
0x0000aa8c str r0, [sp] | *(sp) = r0;
0x0000aa8e b 0xaa5c |
| }
| label_1:
0x0000aa90 blx 0x348c | r0 = fprintf_chk ()
0x0000aa94 lsls r4, r0, 0xd | r4 = r0 << 0xd;
0x0000aa96 movs r1, r0 | r1 = r0;
0x0000aa98 rsbs r2, r4, 0 | r2 = r4 - ;
0x0000aa9a movs r2, r0 | r2 = r0;
0x0000aa9c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000aa9e movs r0, r0 |
0x0000aaa0 lsls r4, r0, 0xc | r4 = r0 << 0xc;
0x0000aaa2 movs r1, r0 | r1 = r0;
0x0000aaa4 tst r6, r3 |
0x0000aaa6 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xaaa8 */
| #include <stdint.h>
|
; (fcn) fcn.0000aaa8 () | void fcn_0000aaa8 (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x0000aaa8 andhs r4, r3, 0xc400 | r4 = r3 & 0xc400;
| }
0x0000aaac push {r4, r5, r6, lr} |
0x0000aaae mov r5, r1 | r5 = r1;
0x0000aab0 ldr r1, [pc, 0xc0] |
0x0000aab2 mov r4, r0 | r4 = r0;
0x0000aab4 add r3, pc | r3 += pc;
0x0000aab6 sub sp, 0x28 |
0x0000aab8 add.w r0, r3, 0x114 | r0 = r3 + 0x114;
0x0000aabc ldr r3, [pc, 0xb8] | r3 = *(0xab78);
0x0000aabe add r1, pc | r1 = 0x15636;
0x0000aac0 movs r6, 0 | r6 = 0;
0x0000aac2 ldr r3, [r1, r3] |
0x0000aac4 movw r1, 0x291 | r1 = 0x291;
0x0000aac8 ldr r3, [r3] | r3 = *(0x15636);
0x0000aaca str r3, [sp, 0x24] | var_24h = r3;
0x0000aacc mov.w r3, 0 | r3 = 0;
0x0000aad0 str r6, [sp, 0x14] | var_14h = r6;
0x0000aad2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000aad4 pld [pc, -0x8d4] | __asm ("pld aav.0x00000068");
0x0000aad8 adds r0, 0x9c | r0 += 0x9c;
0x0000aada ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0000aadc cmp r3, 4 |
| if (r3 <= 4) {
0x0000aade ble 0xab4c | goto label_2;
| }
0x0000aae0 ldr r2, [pc, 0x98] |
0x0000aae2 ldr r1, [pc, 0x9c] |
0x0000aae4 add r2, pc | r2 = 0x15664;
0x0000aae6 add r1, pc | r1 = 0x1566c;
| label_0:
0x0000aae8 movs r3, 0xb | r3 = 0xb;
0x0000aaea add r5, sp, 0x18 | r5 += var_18h;
0x0000aaec strd r2, r0, [sp, 4] | __asm ("strd r2, r0, [sp, 4]");
0x0000aaf0 movs r2, 1 | r2 = 1;
0x0000aaf2 str r1, [sp] | *(sp) = r1;
0x0000aaf4 mov r0, r5 | r0 = r5;
0x0000aaf6 mov r1, r3 | r1 = r3;
0x0000aaf8 blx 0x3378 | r0 = shutdown ();
0x0000aafc cmp r0, 0xa |
| if (r0 > 0xa) {
0x0000aafe bgt 0xab56 | goto label_3;
| }
0x0000ab00 ldrd r0, r3, [r4, 0x80] | __asm ("ldrd r0, r3, [r4, 0x80]");
0x0000ab04 mov r1, r5 | r1 = r5;
0x0000ab06 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000ab08 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000ab0a str r0, [sp, 0x14] | var_14h = r0;
0x0000ab0c cbnz r0, 0xab3c |
| while (1) {
| label_1:
0x0000ab0e ldr r0, [pc, 0x74] |
0x0000ab10 movs r3, 3 | r3 = 3;
0x0000ab12 add r2, sp, 0x14 | r2 += var_14h;
0x0000ab14 movw r1, 0x29d | r1 = 0x29d;
0x0000ab16 movs r1, 0x9d | r1 = 0x9d;
0x0000ab18 add r0, pc |
0x0000ab1a add.w r0, r0, 0x114 | r0 = 0x157b6;
0x0000ab1e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000ab22 ldr r2, [pc, 0x64] |
0x0000ab24 ldr r3, [pc, 0x50] | r3 = *(0xab78);
0x0000ab26 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000ab28 add r2, pc | r2 = 0x156b6;
0x0000ab2a ldr r3, [r2, r3] | r3 = *(0x156b6);
0x0000ab2c ldr r2, [r3] | r2 = *(0x156b6);
0x0000ab2e ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000ab30 eors r2, r3 | r2 ^= r3;
0x0000ab32 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000ab36 bne 0xab6c | goto label_4;
| }
0x0000ab38 add sp, 0x28 |
0x0000ab3a pop {r4, r5, r6, pc} |
0x0000ab3c ldr r2, [pc, 0x4c] |
0x0000ab3e mov r3, r0 | r3 = r0;
0x0000ab40 movs r1, 0 | r1 = 0;
0x0000ab42 movs r0, 5 | r0 = 5;
0x0000ab44 add r2, pc | r2 = 0x156d4;
0x0000ab46 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000ab4a b 0xab0e |
| }
| label_2:
0x0000ab4c ldr r2, [pc, 0x40] |
0x0000ab4e ldr r1, [pc, 0x44] |
0x0000ab50 add r2, pc | r2 = 0x156e4;
0x0000ab52 add r1, pc | r1 = 0x156ec;
0x0000ab54 b 0xaae8 | goto label_0;
| label_3:
0x0000ab56 ldr r2, [pc, 0x40] |
0x0000ab58 mov r3, r0 | r3 = r0;
0x0000ab5a movs r1, 0 | r1 = 0;
0x0000ab5c movs r0, 5 | r0 = 5;
0x0000ab5e add r2, pc | r2 = 0x156fc;
0x0000ab60 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000ab64 mvn r3, 1 | r3 = ~1;
0x0000ab68 str r3, [sp, 0x14] | var_14h = r3;
0x0000ab6a b 0xab0e | goto label_1;
| label_4:
0x0000ab6c blx 0x348c | fprintf_chk ()
0x0000ab70 lsls r4, r6, 0xa | r4 = r6 << 0xa;
0x0000ab72 movs r1, r0 | r1 = r0;
0x0000ab74 rors r2, r2 | __asm ("rors r2, r2");
0x0000ab76 movs r2, r0 | r2 = r0;
0x0000ab78 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000ab7a movs r0, r0 |
0x0000ab7c lsls r4, r1, 7 | r4 = r1 << 7;
0x0000ab7e movs r1, r0 | r1 = r0;
0x0000ab80 lsls r6, r1, 7 | r6 = r1 << 7;
0x0000ab82 movs r1, r0 | r1 = r0;
0x0000ab84 lsls r0, r2, 9 | r0 = r2 << 9;
0x0000ab86 movs r1, r0 | r1 = r0;
0x0000ab88 adcs r0, r5 | __asm ("adcs r0, r5");
0x0000ab8a movs r2, r0 | r2 = r0;
0x0000ab8c lsls r4, r7, 5 | r4 = r7 << 5;
0x0000ab8e movs r1, r0 | r1 = r0;
0x0000ab90 lsls r4, r5, 5 | r4 = r5 << 5;
0x0000ab92 movs r1, r0 | r1 = r0;
0x0000ab94 lsls r2, r4, 5 | r2 = r4 << 5;
0x0000ab96 movs r1, r0 | r1 = r0;
0x0000ab98 lsls r6, r4, 3 | r6 = r4 << 3;
0x0000ab9a movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xab9c */
| #include <stdint.h>
|
; (fcn) fcn.0000ab9c () | void fcn_0000ab9c (int16_t arg1, int16_t arg2) {
| int16_t var_0h_3;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_28h;
| int16_t var_34h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x0000ab9c andhs r4, r3, 112, 22 | r4 = r3 & (112 22);
| }
0x0000aba0 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000aba4 mov r5, r0 | r5 = r0;
0x0000aba6 ldr r4, [pc, 0x1bc] |
0x0000aba8 sub sp, 0x84 |
0x0000abaa add r3, pc | r3 += pc;
0x0000abac mov r8, r1 | r8 = r1;
0x0000abae add.w r0, r3, 0x138 | r0 = r3 + 0x138;
0x0000abb2 ldr r3, [pc, 0x1b4] | r3 = *(0xad6a);
0x0000abb4 add r4, pc | r4 = 0x1591e;
0x0000abb6 mov.w r1, 0x2b0 | r1 = 0x2b0;
0x0000abba movs r6, 0 | r6 = 0;
0x0000abbc movs r7, 4 | r7 = 4;
0x0000abbe ldr r3, [r4, r3] |
0x0000abc0 ldr r3, [r3] | r3 = *(0x1591e);
0x0000abc2 str r3, [sp, 0x7c] | var_7ch = r3;
0x0000abc4 mov.w r3, 0 | r3 = 0;
0x0000abc8 str r6, [sp, 0x10] | var_10h = r6;
0x0000abca bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000abce ldr.w r4, [r8] | r4 = *(r8);
0x0000abd2 ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x0000abd6 str r7, [sp, 0x34] | var_34h = r7;
0x0000abd8 add.w r3, r4, 8 | r3 = r4 + 8;
0x0000abdc str r3, [sp, 0x58] | var_58h = r3;
0x0000abde ldr r3, [r4, 8] | r3 = *(0x15926);
0x0000abe0 strd r3, r7, [sp, 0x38] | __asm ("strd r3, r7, [sp, 0x38]");
0x0000abe4 ldr r3, [r4, 0xc] | r3 = *(0x1592a);
0x0000abe6 strd r7, r7, [sp, 0x40] | __asm ("strd r7, r7, [sp, 0x40]");
0x0000abea str r7, [sp, 0x48] | var_48h = r7;
0x0000abec str r3, [sp, 0x5c] | var_5ch = r3;
0x0000abee add.w r3, r4, 0x10 | r3 = r4 + 0x10;
0x0000abf2 str r3, [sp, 0x60] | var_60h = r3;
0x0000abf4 add.w r3, r4, 0x14 | r3 = r4 + 0x14;
0x0000abf8 str r3, [sp, 0x64] | var_64h = r3;
0x0000abfa add.w r3, r4, 0x18 | r3 = r4 + 0x18;
0x0000abfe str r3, [sp, 0x68] | var_68h = r3;
0x0000ac00 add.w r3, r4, 0x1c | r3 = r4 + 0x1c;
0x0000ac04 str r3, [sp, 0x6c] | var_6ch = r3;
0x0000ac06 str r0, [sp, 0x70] | var_70h = r0;
0x0000ac08 blx 0x3258 | unlink (r0);
0x0000ac0c add.w r3, r8, 8 | r3 = r8 + 8;
0x0000ac10 movw r2, 0x4240 |
0x0000ac14 str r3, [sp, 0x74] | var_74h = r3;
0x0000ac16 movt r2, 0xf | r2 = 0xf4240;
0x0000ac1a ldr r3, [r5, 0x7c] | r3 = *((r5 + 0x7c));
0x0000ac1c adds r0, 1 | r0++;
0x0000ac1e str r7, [sp, 0x50] | var_50h = r7;
0x0000ac20 str r0, [sp, 0x4c] | var_4ch = r0;
0x0000ac22 adds r3, 1 | r3++;
0x0000ac24 cmp r3, r2 |
0x0000ac26 it eq |
| if (r3 != r2) {
0x0000ac28 moveq r3, r6 | r3 = r6;
| }
0x0000ac2a ldr.w r2, [r5, 0x9c] | r2 = *((r5 + 0x9c));
0x0000ac2e str r3, [r5, 0x7c] | *((r5 + 0x7c)) = r3;
0x0000ac30 cmp r2, r7 |
| if (r2 <= r7) {
0x0000ac32 ble 0xad30 | goto label_2;
| }
0x0000ac34 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000ac36 add r1, sp, 0x18 | r1 += var_18h_2;
0x0000ac38 strd r6, r6, [r1, 4] | __asm ("strd r6, r6, [r1, 4]");
0x0000ac3c str r6, [r1, 0xc] | *((r1 + 0xc)) = r6;
0x0000ac3e cmp r3, r6 |
0x0000ac40 strd r6, r6, [sp, 0x14] | __asm ("strd r6, r6, [sp, 0x14]");
0x0000ac44 ite le |
| if (r3 > r6) {
0x0000ac46 movle r4, r1 | r4 = r1;
| }
| if (r3 <= r6) {
0x0000ac48 addgt r4, 0x20 | r4 += 0x20;
| }
0x0000ac4a mov r0, r4 | r0 = r4;
0x0000ac4c bl 0xda6c | r0 = fcn_0000da6c (r0);
0x0000ac50 mov r2, r0 | r2 = r0;
0x0000ac52 mov r6, r0 | r6 = r0;
0x0000ac54 ldr r0, [pc, 0x114] |
0x0000ac56 movw r1, 0x2d7 | r1 = 0x2d7;
0x0000ac5a add r0, pc | r0 = 0x159ca;
0x0000ac5c bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000ac60 str r0, [sp, 0x78] | var_78h = r0;
0x0000ac62 str r0, [sp, 0x14] | var_14h_2 = r0;
0x0000ac64 cmp r0, 0 |
| if (r0 == 0) {
0x0000ac66 beq 0xacfa | goto label_3;
| }
0x0000ac68 mov r1, r4 | r1 = r4;
0x0000ac6a add r0, sp, 0x14 | r0 += var_14h_2;
0x0000ac6c bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x0000ac70 ldr r3, [r5, 0x7c] | r3 = *((r5 + 0x7c));
0x0000ac72 add r4, sp, 0x28 | r4 += var_28h;
0x0000ac74 ldr r2, [pc, 0xf8] |
0x0000ac76 mov.w sb, 9 | sb = 9;
0x0000ac7a str r6, [sp, 0x54] | var_54h = r6;
0x0000ac7c movs r6, 8 | r6 = 8;
0x0000ac7e str r3, [sp, 8] | var_8h = r3;
0x0000ac80 ldr r3, [pc, 0xf0] |
0x0000ac82 add r2, pc | r2 = 0x159f6;
0x0000ac84 str r0, [sp, 0x10] | var_10h = r0;
0x0000ac86 mov r0, r4 | r0 = r4;
0x0000ac88 add r3, pc | r3 = 0x15a00;
0x0000ac8a strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x0000ac8e movs r3, 0xb | r3 = 0xb;
0x0000ac90 movs r2, 1 | r2 = 1;
0x0000ac92 mov r1, r3 | r1 = r3;
0x0000ac94 blx 0x3378 | r0 = shutdown ();
| do {
0x0000ac98 cmp r0, 0xa |
0x0000ac9a itt gt |
| if (r0 <= 0xa) {
0x0000ac9c mvngt r3, 1 | r3 = ~1;
| }
| if (r0 > 0xa) {
0x0000aca0 str r3, [sp, 0x10] | var_10h = r3;
| }
| if (r0 <= 0xa) {
0x0000aca2 bgt 0xace8 |
0x0000aca4 ldr.w r7, [r5, 0x88] | r7 = *((r5 + 0x88));
0x0000aca8 ldr r3, [r5, 0x7c] | r3 = *((r5 + 0x7c));
0x0000acaa str.w r3, [r8, 0xc] | __asm ("str.w r3, [r8, 0xc]");
0x0000acae cmp r7, 0 |
| if (r7 == 0) {
0x0000acb0 beq 0xad52 | goto label_4;
| }
0x0000acb2 ldr.w r0, [r5, 0x90] | r0 = *((r5 + 0x90));
0x0000acb6 add r3, sp, 0x34 | r3 += var_34h;
0x0000acb8 add r2, sp, 0x58 | r2 += var_58h;
0x0000acba mov r1, sb | r1 = sb;
0x0000acbc blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000acbe mov r7, r0 | r7 = r0;
0x0000acc0 str r0, [sp, 0x10] | var_10h = r0;
| if (r7 != 0) {
0x0000acc2 cbnz r7, 0xace8 | goto label_0;
| }
| label_1:
0x0000acc4 ldrd r0, r3, [r5, 0x80] | __asm ("ldrd r0, r3, [r5, 0x80]");
0x0000acc8 mov r1, r4 | r1 = r4;
0x0000acca add r4, sp, 0x34 | r4 += var_34h;
0x0000accc mov r2, sb | r2 = sb;
0x0000acce str r4, [sp] | *(sp) = r4;
0x0000acd0 ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0000acd2 add r3, sp, 0x58 | r3 += var_58h;
0x0000acd4 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000acd6 str r0, [sp, 0x10] | var_10h = r0;
| if (r0 == 0) {
0x0000acd8 cbz r0, 0xace8 | goto label_0;
| }
0x0000acda ldr r2, [pc, 0x9c] |
0x0000acdc mov r3, r0 | r3 = r0;
0x0000acde mov r1, r7 | r1 = r7;
0x0000ace0 movs r0, 5 | r0 = 5;
0x0000ace2 add r2, pc | r2 = 0x15a60;
0x0000ace4 bl 0x9a28 | fcn_00009a28 (r0, r1);
| }
| if (r6 != 0) {
| label_0:
0x0000ace8 cbz r6, 0xad00 |
0x0000acea ldr r0, [pc, 0x90] |
0x0000acec movw r1, 0x2f3 | r1 = 0x2f3;
0x0000acf0 ldr r2, [sp, 0x78] | r2 = var_78h;
0x0000acf2 add r0, pc | r0 = 0x15a74;
0x0000acf4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000acf8 b 0xad00 | goto label_5;
| label_3:
0x0000acfa mvn r3, 0x62 | r3 = ~0x62;
0x0000acfe str r3, [sp, 0x10] | var_10h = r3;
| }
| label_5:
0x0000ad00 ldr r0, [pc, 0x7c] |
0x0000ad02 movs r3, 3 | r3 = 3;
0x0000ad04 add r2, sp, 0x10 | r2 += var_10h;
0x0000ad06 movw r1, 0x2f6 | r1 = 0x2f6;
0x0000ad08 movs r1, 0xf6 | r1 = 0xf6;
0x0000ad0a add r0, pc |
0x0000ad0c add.w r0, r0, 0x138 | r0 = 0x15bc6;
0x0000ad10 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000ad14 ldr r2, [pc, 0x6c] |
0x0000ad16 ldr r3, [pc, 0x50] | r3 = *(0xad6a);
0x0000ad18 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000ad1a add r2, pc | r2 = 0x15aa2;
0x0000ad1c ldr r3, [r2, r3] | r3 = *(0x15aa2);
0x0000ad1e ldr r2, [r3] | r2 = *(0x15aa2);
0x0000ad20 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0000ad22 eors r2, r3 | r2 ^= r3;
0x0000ad24 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000ad28 bne 0xad5a | goto label_6;
| }
0x0000ad2a add sp, 0x84 |
0x0000ad2c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x0000ad30 str r3, [sp, 8] | var_8h = r3;
0x0000ad32 add r4, sp, 0x28 | r4 += var_28h;
0x0000ad34 ldr r3, [pc, 0x50] |
0x0000ad36 movs r2, 1 | r2 = 1;
0x0000ad38 mov r0, r4 | r0 = r4;
0x0000ad3a mov.w sb, 8 | sb = 8;
0x0000ad3e add r3, pc | r3 = 0x15aca;
0x0000ad40 str r3, [sp, 4] | var_4h_2 = r3;
0x0000ad42 ldr r3, [pc, 0x48] |
0x0000ad44 add r3, pc | r3 = 0x15ad6;
0x0000ad46 str r3, [sp] | *(sp) = r3;
0x0000ad48 movs r3, 0xb | r3 = 0xb;
0x0000ad4a mov r1, r3 | r1 = r3;
0x0000ad4c blx 0x3378 | shutdown ();
0x0000ad50 b 0xac98 |
| } while (1);
| label_4:
0x0000ad52 ldr r7, [sp, 0x10] | r7 = var_10h;
0x0000ad54 cmp r7, 0 |
| if (r7 != 0) {
0x0000ad56 bne 0xace8 | goto label_0;
| }
0x0000ad58 b 0xacc4 | goto label_1;
| label_6:
0x0000ad5a blx 0x348c | fprintf_chk ()
0x0000ad5e nop |
0x0000ad60 lsls r6, r7, 6 | r6 = r7 << 6;
0x0000ad62 movs r1, r0 | r1 = r0;
0x0000ad64 lsrs r4, r3 | r4 >>= r3;
0x0000ad66 movs r2, r0 | r2 = r0;
0x0000ad68 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000ad6a movs r0, r0 |
0x0000ad6c vaddl.u16 q0, d6, d0 | __asm ("vaddl.u16 q0, d6, d0");
0x0000ad70 movs r6, r5 | r6 = r5;
0x0000ad72 movs r1, r0 | r1 = r0;
0x0000ad74 movs r4, r5 | r4 = r5;
0x0000ad76 movs r1, r0 | r1 = r0;
0x0000ad78 movs r2, r1 | r2 = r1;
0x0000ad7a movs r1, r0 | r1 = r0;
0x0000ad7c cdp2 p0, 0xf, c0, c14, c0, 0 | __asm ("cdp2 p0, 0xf, c0, c14, c0, 0");
0x0000ad80 lsls r6, r3, 1 | r6 = r3 << 1;
0x0000ad82 movs r1, r0 | r1 = r0;
0x0000ad84 subs r7, 0x76 | r7 -= 0x76;
0x0000ad86 movs r2, r0 | r2 = r0;
0x0000ad88 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xad90 */
| #include <stdint.h>
|
; (fcn) fcn.0000ad90 () | void fcn_0000ad90 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| char * path;
| int16_t var_44h;
| r0 = arg1;
| if (? < ?) {
0x0000ad90 andhs r4, r3, 0x3dc00 | r4 = r3 & 0x3dc00;
| }
0x0000ad94 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000ad98 mov r6, r0 | r6 = r0;
0x0000ad9a ldr r5, [pc, 0x3d8] |
0x0000ad9c sub sp, 0x4c |
0x0000ad9e add r3, pc | r3 += pc;
0x0000ada0 movs r4, 0 | r4 = 0;
0x0000ada2 add.w r0, r3, 0x15c | r0 = r3 + 0x15c;
0x0000ada6 ldr r3, [pc, 0x3d0] | r3 = *(0xb17a);
0x0000ada8 add r5, pc | r5 = 0x15f22;
0x0000adaa mov.w r1, 0x360 | r1 = 0x360;
0x0000adae ldr r3, [r5, r3] |
0x0000adb0 ldr r3, [r3] | r3 = *(0x15f22);
0x0000adb2 str r3, [sp, 0x44] | var_44h = r3;
0x0000adb4 mov.w r3, 0 | r3 = 0;
0x0000adb8 str r4, [sp, 0x2c] | var_2ch = r4;
0x0000adba bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000adbe ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000adc2 cmp r3, 0 |
| if (r3 == 0) {
0x0000adc4 beq.w 0xafe4 | goto label_10;
| }
0x0000adc8 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0000adca add r2, sp, 0x34 | r2 += var_34h;
0x0000adcc ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000add0 add r1, sp, 0x30 | r1 += var_30h;
0x0000add2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000add4 mov fp, r0 |
0x0000add6 str r0, [sp, 0x2c] | var_2ch = r0;
0x0000add8 cmp r0, 0 |
| if (r0 != 0) {
0x0000adda bne.w 0xafe4 | goto label_10;
| }
0x0000adde ldr r3, [pc, 0x39c] |
0x0000ade0 mov r4, r0 | r4 = r0;
0x0000ade2 ldr r1, [pc, 0x39c] |
0x0000ade4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0000ade6 add r3, pc | r3 = 0x15f68;
0x0000ade8 str r0, [sp, 0x10] | var_10h = r0;
0x0000adea str r3, [sp, 0xc] | var_ch = r3;
0x0000adec add r1, pc | r1 = 0x15f72;
0x0000adee ldr r3, [pc, 0x394] |
0x0000adf0 mov sl, r1 | sl = r1;
0x0000adf2 add r3, pc |
0x0000adf4 add.w r3, r3, 0x180 | r3 = 0x160fc;
0x0000adf8 str r3, [sp, 0x14] | var_14h = r3;
0x0000adfa ldr r3, [pc, 0x38c] |
0x0000adfc add r3, pc |
0x0000adfe str r3, [sp, 0x20] | var_20h = r3;
0x0000ae00 add.w r3, r3, 0x180 | r3 = 0x1610a;
0x0000ae04 str r3, [sp, 0x24] | var_24h = r3;
| label_0:
0x0000ae06 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000ae08 cmp r3, r4 |
| if (r3 <= r4) {
0x0000ae0a ble.w 0xb084 | goto label_11;
| }
0x0000ae0e movs r3, 0 | r3 = 0;
0x0000ae10 lsls r7, r4, 2 | r7 = r4 << 2;
0x0000ae12 str r3, [sp, 0x38] | var_38h = r3;
0x0000ae14 ldr.w r1, [r2, r4, lsl 2] | offset_0 = r4 << 2;
| r1 = *((r2 + offset_0));
0x0000ae16 asrs r4, r4, 0x20 | r4 >>= 0x20;
0x0000ae18 ldrb r3, [r1] | r3 = *(r1);
0x0000ae1a cmp r3, 0x71 |
| if (r3 != 0x71) {
0x0000ae1c bne.w 0xb09e | goto label_12;
| }
0x0000ae20 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x0000ae22 cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x0000ae24 bne.w 0xb09e | goto label_12;
| }
| label_3:
0x0000ae28 ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
0x0000ae2c add.w sb, sp, 0x3c | sb += var_3ch;
0x0000ae30 add r5, sp, 0x38 | r5 += var_38h;
0x0000ae32 ldr.w r0, [r6, 0x80] | r0 = *((r6 + 0x80));
0x0000ae36 mov r2, r5 | r2 = r5;
0x0000ae38 ldr.w r8, [r3, 0x10] | r8 = *((r3 + 0x10));
0x0000ae3c mov r3, sb | r3 = sb;
0x0000ae3e blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0000ae40 str r0, [sp, 0x2c] | var_2ch = r0;
0x0000ae42 cmp r0, 0 |
| if (r0 != 0) {
0x0000ae44 bne.w 0xb074 | goto label_8;
| }
0x0000ae48 ldr.w r3, [r6, 0x8c] | r3 = *((r6 + 0x8c));
| if (r3 != 0) {
0x0000ae4c cbz r3, 0xae60 |
0x0000ae4e ldr.w r0, [r6, 0x94] | r0 = *((r6 + 0x94));
0x0000ae52 mov r2, sb | r2 = sb;
0x0000ae54 mov r1, r5 | r1 = r5;
0x0000ae56 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0000ae58 str r0, [sp, 0x2c] | var_2ch = r0;
0x0000ae5a cmp r0, 0 |
| if (r0 != 0) {
0x0000ae5c bne.w 0xb074 | goto label_8;
| }
| }
0x0000ae60 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0000ae62 ldr r3, [r3, r7] | r3 = *((r3 + r7));
0x0000ae64 ldrb r2, [r3] | r2 = *(r3);
0x0000ae66 cmp r2, 0x71 |
| if (r2 == 0x71) {
0x0000ae68 bne 0xae72 |
0x0000ae6a ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0000ae6c cmp r2, 0x35 |
| if (r2 == 0x35) {
0x0000ae6e beq.w 0xb0c2 | goto label_13;
| }
| }
| label_6:
0x0000ae72 mov.w fp, 4 |
| label_5:
0x0000ae76 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000ae78 movs r2, 3 | r2 = 3;
0x0000ae7a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000ae7c movw r1, 0x301 | r1 = 0x301;
0x0000ae80 str r3, [sp, 0x18] | var_18h = r3;
0x0000ae82 str r3, [sp, 0x40] | path = r3;
0x0000ae84 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000ae86 str r3, [sp, 0x1c] | var_1ch = r3;
0x0000ae88 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000ae8c movs r2, 0x10 | r2 = 0x10;
0x0000ae8e movw r1, 0x302 | r1 = 0x302;
0x0000ae92 mov r0, sl | r0 = sl;
0x0000ae94 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000ae98 mov r5, r0 | r5 = r0;
0x0000ae9a cmp r0, 0 |
| if (r0 == 0) {
0x0000ae9c beq.w 0xb0fc | goto label_14;
| }
0x0000aea0 mov.w r8, 0 | r8 = 0;
0x0000aea4 movs r2, 0x30 | r2 = 0x30;
0x0000aea6 str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x0000aeaa movw r1, 0x306 | r1 = 0x306;
0x0000aeae str.w r8, [r0, 4] | __asm ("str.w r8, [r0, 4]");
0x0000aeb2 str.w r8, [r0, 8] | __asm ("str.w r8, [r0, 8]");
0x0000aeb6 str.w r8, [r0, 0xc] | __asm ("str.w r8, [r0, 0xc]");
0x0000aeba mov r0, sl | r0 = sl;
0x0000aebc bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000aec0 str r0, [r5] | *(r5) = r0;
0x0000aec2 cmp r0, 0 |
| if (r0 == 0) {
0x0000aec4 beq.w 0xb10c | goto label_15;
| }
0x0000aec8 mov r1, r8 | r1 = r8;
0x0000aeca movs r2, 0x30 | r2 = 0x30;
0x0000aecc blx 0x30d8 | fcn_000030d8 ();
0x0000aed0 ldr.w r8, [r5] | r8 = *(r5);
0x0000aed4 movs r2, 1 | r2 = 1;
0x0000aed6 ldr r3, [sp, 0x40] | r3 = path;
0x0000aed8 mov.w r1, 0x314 | r1 = 0x314;
0x0000aedc mov r0, sl | r0 = sl;
0x0000aede str.w r2, [r8, 4] | __asm ("str.w r2, [r8, 4]");
0x0000aee2 ldr sb, [r3], 4 | sb = *(r3);
| r3 += 4;
0x0000aee6 str.w sb, [r8, 8] | __asm ("str.w sb, [r8, 8]");
0x0000aeea mov r2, sb | r2 = sb;
0x0000aeec str r3, [sp, 0x40] | path = r3;
0x0000aeee bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000aef2 str.w r0, [r8, 0xc] | __asm ("str.w r0, [r8, 0xc]");
0x0000aef6 cmp r0, 0 |
| if (r0 == 0) {
0x0000aef8 beq.w 0xb12c | goto label_16;
| }
0x0000aefc ldr r3, [r5] | r3 = *(r5);
0x0000aefe mov r2, sb | r2 = sb;
0x0000af00 ldr r1, [sp, 0x40] | r1 = path;
0x0000af02 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0000af04 blx 0x32a0 | pthread_cond_signal ();
0x0000af08 ldr r0, [sp, 0x40] | r0 = path;
0x0000af0a ldr r3, [r5] | r3 = *(r5);
0x0000af0c ldr.w r1, [r0, sb] | r1 = *((r0 + sb));
0x0000af10 add r0, sb | r0 += sb;
0x0000af12 adds r0, 0x10 | r0 += 0x10;
0x0000af14 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x0000af16 ldr r2, [r0, -0xc] | r2 = *((r0 - 0xc));
0x0000af1a str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0000af1c ldr r2, [r0, -0x8] | r2 = *((r0 - 0x8));
0x0000af20 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x0000af22 ldr r2, [r0, -0x4] | r2 = *((r0 - 0x4));
0x0000af26 str r2, [r3, 0x1c] | *((r3 + 0x1c)) = r2;
0x0000af28 str r0, [sp, 0x40] | path = r0;
0x0000af2a blx 0x3258 | r0 = unlink (r0);
0x0000af2e add.w r8, r0, 1 | r8 = r0 + 1;
0x0000af32 movw r1, 0x32b | r1 = 0x32b;
0x0000af36 mov r2, r8 | r2 = r8;
0x0000af38 mov r0, sl | r0 = sl;
0x0000af3a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000af3e str r0, [r5, 4] | *((r5 + 4)) = r0;
0x0000af40 cmp r0, 0 |
| if (r0 == 0) {
0x0000af42 beq.w 0xb144 | goto label_17;
| }
0x0000af46 ldr r1, [sp, 0x40] | r1 = path;
0x0000af48 blx 0x3300 | pthread_cond_destroy ();
0x0000af4c ldr r3, [sp, 0x40] | r3 = path;
0x0000af4e cmp.w fp, 5 |
0x0000af52 it ne |
| if (fp == 5) {
0x0000af54 addne sb, sp, 0x40 | sb += path;
| }
0x0000af58 ldr.w r2, [r3, r8] | r2 = *((r3 + r8));
0x0000af5c add r3, r8 | r3 += r8;
0x0000af5e add.w r3, r3, 4 | r3 += 4;
0x0000af62 str r2, [r5, 8] | *((r5 + 8)) = r2;
0x0000af64 str r3, [sp, 0x40] | path = r3;
| if (fp == 5) {
0x0000af66 beq.w 0xb0d2 | goto label_18;
| }
| label_7:
0x0000af6a movs r2, 0 | r2 = 0;
0x0000af6c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0000af6e movs r3, 3 | r3 = 3;
0x0000af70 movw r1, 0x33e | r1 = 0x33e;
0x0000af74 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000af78 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0000af7a movs r1, 0x2d | r1 = 0x2d;
0x0000af7c ldr r0, [r3, r7] | r0 = *((r3 + r7));
0x0000af7e blx 0x3074 | fcn_00003074 ();
0x0000af82 movs r2, 0xa | r2 = 0xa;
0x0000af84 movs r1, 0 | r1 = 0;
0x0000af86 adds r0, 1 | r0++;
0x0000af88 blx 0x32f4 | sem_init ();
0x0000af8c movs r3, 0 | r3 = 0;
0x0000af8e str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x0000af90 mov fp, r3 |
0x0000af92 str r3, [sp, 0x40] | path = r3;
0x0000af94 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000af96 movs r2, 3 | r2 = 3;
0x0000af98 mov.w r1, 0x348 | r1 = 0x348;
0x0000af9a strb r2, [r2, 5] | *((r2 + 5)) = r2;
0x0000af9c ldr.w r8, [r6, 0x78] | r8 = *((r6 + 0x78));
0x0000afa0 add.w r0, r3, 0x1a4 | r0 = r3 + 0x1a4;
0x0000afa4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000afa8 mov r3, fp | r3 = fp;
0x0000afaa mov fp, r4 |
0x0000afac mov r4, r3 | r4 = r3;
| label_2:
0x0000afae mov r1, sb | r1 = sb;
0x0000afb0 mov r0, r8 | r0 = r8;
0x0000afb2 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x0000afb6 subs r0, 0 |
0x0000afb8 it ne |
| if (r0 == 0) {
0x0000afba movne r0, 1 | r0 = 1;
| }
0x0000afbc cmp r4, 0 |
0x0000afbe it ne |
| if (r4 == 0) {
0x0000afc0 movne r0, 0 | r0 = 0;
| }
0x0000afc2 cmp r0, 0 |
| if (r0 == 0) {
0x0000afc4 beq 0xb02e | goto label_19;
| }
| do {
0x0000afc6 ldr r0, [sp, 0x40] | r0 = path;
0x0000afc8 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0000afca ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0000afcc ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x0000afce cmp r3, r2 |
| if (r3 <= r2) {
0x0000afd0 blo 0xb09a | goto label_20;
| }
0x0000afd2 mov r1, sb | r1 = sb;
0x0000afd4 mov r0, r8 | r0 = r8;
0x0000afd6 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x0000afda cmp r0, 0 |
0x0000afdc bne 0xafc6 |
| } while (r0 != 0);
0x0000afde mov r4, fp | r4 = fp;
0x0000afe0 mov fp, r0 |
0x0000afe2 b 0xb034 | goto label_21;
| label_10:
0x0000afe4 mov.w fp, 0 |
| label_1:
0x0000afe8 ldr r4, [r6] | r4 = *(r6);
0x0000afea mov r3, fp | r3 = fp;
0x0000afec ldr r2, [pc, 0x19c] |
0x0000afee mov.w r1, -1 | r1 = -1;
0x0000aff2 movs r0, 3 | r0 = 3;
0x0000aff4 str r4, [sp] | *(sp) = r4;
0x0000aff6 add r2, pc | r2 = 0x16186;
0x0000aff8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000affc ldr r0, [pc, 0x190] |
0x0000affe movs r3, 3 | r3 = 3;
0x0000b000 add r2, sp, 0x2c | r2 += var_2ch;
0x0000b002 mov.w r1, 0x388 | r1 = 0x388;
0x0000b006 add r0, pc |
0x0000b008 add.w r0, r0, 0x15c | r0 = 0x162f6;
0x0000b00c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b010 ldr r2, [pc, 0x180] |
0x0000b012 ldr r3, [pc, 0x164] | r3 = *(0xb17a);
0x0000b014 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0000b016 add r2, pc | r2 = 0x161ae;
0x0000b018 ldr r3, [r2, r3] | r3 = *(0x161ae);
0x0000b01a ldr r2, [r3] | r2 = *(0x161ae);
0x0000b01c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000b01e eors r2, r3 | r2 ^= r3;
0x0000b020 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000b024 bne.w 0xb16a | goto label_22;
| }
0x0000b028 add sp, 0x4c |
0x0000b02a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x0000b02e mov r3, r4 | r3 = r4;
0x0000b030 mov r4, fp | r4 = fp;
0x0000b032 mov fp, r3 |
| label_21:
0x0000b034 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000b036 mov r3, fp | r3 = fp;
0x0000b038 mov r1, r5 | r1 = r5;
0x0000b03a mov r0, r8 | r0 = r8;
0x0000b03c adds r2, 1 | r2++;
0x0000b03e str r2, [sp, 0x10] | var_10h = r2;
0x0000b040 movs r2, 0x10 | r2 = 0x10;
0x0000b042 bl 0xd638 | fcn_0000d638 (r0, r1, r2, r3);
0x0000b046 ldr r0, [pc, 0x150] |
0x0000b048 movs r3, 3 | r3 = 3;
0x0000b04a movs r2, 0 | r2 = 0;
0x0000b04c movw r1, 0x34f | r1 = 0x34f;
0x0000b050 add r0, pc |
0x0000b052 add.w r0, r0, 0x1a4 | r0 = 0x16392;
0x0000b056 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b05a ldr r0, [pc, 0x140] |
0x0000b05c movw r1, 0x379 | r1 = 0x379;
0x0000b060 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0000b062 add r0, pc | r0 = 0x16204;
0x0000b064 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b066 ldrb.w r6, [r6, 0x8ea] | r6 = *((r6 + 0x8ea));
0x0000b06a ldr r3, [r6, 0x7c] | r3 = *((r6 + 0x7c));
0x0000b06c cmp r3, r2 |
0x0000b06e it lo |
| if (r3 >= r2) {
0x0000b070 movlo r3, r2 | r3 = r2;
| }
0x0000b072 str r3, [r6, 0x7c] | *((r6 + 0x7c)) = r3;
| label_8:
0x0000b074 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0000b076 ldr r1, [r2, r7] | r1 = *((r2 + r7));
| if (r1 != 0) {
0x0000b078 cbnz r1, 0xb0b2 | goto label_23;
| }
| label_4:
0x0000b07a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0000b07c adds r4, 1 | r4++;
0x0000b07e cmp r3, 0 |
| if (r3 == 0) {
0x0000b080 beq.w 0xae06 | goto label_0;
| }
| label_11:
0x0000b084 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x0000b088 cmp r2, 0 |
| if (r2 == 0) {
0x0000b08a beq 0xafe8 | goto label_1;
| }
0x0000b08c ldr r0, [pc, 0x110] |
0x0000b08e movw r1, 0x385 | r1 = 0x385;
0x0000b092 add r0, pc | r0 = 0x16236;
0x0000b094 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b098 b 0xafe8 | goto label_1;
| label_20:
0x0000b09a mov r4, r0 | r4 = r0;
0x0000b09c b 0xafae | goto label_2;
| label_12:
0x0000b09e ldrb r3, [r1] | r3 = *(r1);
0x0000b0a0 cmp r3, 0x71 |
| if (r3 != 0x71) {
0x0000b0a2 bne 0xb0b2 | goto label_23;
| }
0x0000b0a4 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x0000b0a6 cmp r3, 0x35 |
| if (r3 != 0x35) {
0x0000b0a8 bne 0xb0b2 | goto label_23;
| }
0x0000b0aa ldrb r3, [r1, 2] | r3 = *((r1 + 2));
0x0000b0ac cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x0000b0ae beq.w 0xae28 | goto label_3;
| }
| label_23:
0x0000b0b2 mov r2, r1 | r2 = r1;
0x0000b0b4 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000b0b6 mov.w r1, 0x380 | r1 = 0x380;
0x0000b0ba bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b0be ldr r2, [sp, 0x30] | r2 = var_30h;
0x0000b0c0 b 0xb07a | goto label_4;
| label_13:
0x0000b0c2 ldrb r3, [r3, 2] | r3 = *((r3 + 2));
0x0000b0c4 cmp r3, 0x2d |
0x0000b0c6 it eq |
| if (r3 == 0x2d) {
0x0000b0c8 moveq fp, 5 | goto label_24;
| }
| if (r3 == 0x2d) {
| label_24:
0x0000b0cc beq.w 0xae76 | goto label_5;
| }
0x0000b0d0 b 0xae72 | goto label_6;
| label_18:
0x0000b0d2 ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
0x0000b0d6 add.w sb, sp, 0x40 | sb += path;
0x0000b0da ldr r0, [r5] | r0 = *(r5);
0x0000b0dc mov r1, sb | r1 = sb;
0x0000b0de add r2, r3 | r2 += r3;
0x0000b0e0 adds r0, 0x20 | r0 += 0x20;
0x0000b0e2 bl 0xde98 | r0 = fcn_0000de98 (r0, r1, r2);
0x0000b0e6 cmp r0, 1 |
| if (r0 == 1) {
0x0000b0e8 beq.w 0xaf6a | goto label_7;
| }
0x0000b0ec ldr r2, [pc, 0xb4] |
0x0000b0ee mov r0, fp | r0 = fp;
0x0000b0f0 mov.w r1, -1 | r1 = -1;
0x0000b0f4 add r2, pc | r2 = 0x1629c;
0x0000b0f6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000b0fa b 0xaf6a | goto label_7;
| label_14:
0x0000b0fc mov r2, r0 | r2 = r0;
0x0000b0fe movs r3, 3 | r3 = 3;
0x0000b100 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000b102 movw r1, 0x33e | r1 = 0x33e;
0x0000b106 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b10a b 0xb074 | goto label_8;
| label_15:
0x0000b10c str r0, [sp, 0x18] | var_18h = r0;
0x0000b10e mov r2, r5 | r2 = r5;
0x0000b110 mov r0, sl | r0 = sl;
0x0000b112 mov.w r1, 0x308 | r1 = 0x308;
| do {
| label_9:
0x0000b116 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b11a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000b11c movw r1, 0x33e | r1 = 0x33e;
0x0000b120 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000b122 mov r2, r3 | r2 = r3;
0x0000b124 movs r3, 3 | r3 = 3;
0x0000b126 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b12a b 0xb074 | goto label_8;
| label_16:
0x0000b12c ldr r2, [r5] | r2 = *(r5);
0x0000b12e movw r1, 0x316 | r1 = 0x316;
0x0000b132 str r0, [sp, 0x18] | var_18h = r0;
0x0000b134 mov r0, sl | r0 = sl;
0x0000b136 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b13a mov r2, r5 | r2 = r5;
0x0000b13c mov r0, sl | r0 = sl;
0x0000b13e movw r1, 0x317 | r1 = 0x317;
0x0000b142 b 0xb116 |
| } while (1);
| label_17:
0x0000b144 ldr r2, [r5] | r2 = *(r5);
0x0000b146 movw r1, 0x32d | r1 = 0x32d;
0x0000b14a str r0, [sp, 0x18] | var_18h = r0;
0x0000b14c mov r0, sl | r0 = sl;
0x0000b14e ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x0000b150 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b154 ldr r2, [r5] | r2 = *(r5);
0x0000b156 mov r0, sl | r0 = sl;
0x0000b158 movw r1, 0x32e | r1 = 0x32e;
0x0000b15c bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b160 mov r2, r5 | r2 = r5;
0x0000b162 mov r0, sl | r0 = sl;
0x0000b164 movw r1, 0x32f | r1 = 0x32f;
0x0000b168 b 0xb116 | goto label_9;
| label_22:
0x0000b16a blx 0x348c | fprintf_chk ()
0x0000b16e nop |
0x0000b170 vaddl.u8 q8, d10, d0 | __asm ("vaddl.u8 q8, d10, d0");
0x0000b174 subs r6, 0xe8 | r6 -= 0xe8;
0x0000b176 movs r2, r0 | r2 = r0;
0x0000b178 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000b17a movs r0, r0 |
0x0000b17c cdp2 p0, 0, c0, c10, c0, 0 | __asm ("cdp2 p0, 0, c0, c10, c0, 0");
0x0000b180 cdp2 p0, 0, c0, c4, c0, 0 | __asm ("cdp2 p0, 0, c0, c4, c0, 0");
0x0000b184 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xb5d4 */
| #include <stdint.h>
|
; (fcn) fcn.0000b5d4 () | void fcn_0000b5d4 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x0000b5d4 invalid |
0x0000b5d8 ldr r6, [pc, 0x6c] |
0x0000b5da sub sp, 8 |
0x0000b5dc movs r2, 3 | r2 = 3;
0x0000b5de mov.w r1, 0x18c | r1 = 0x18c;
0x0000b5e2 ldr r0, [pc, 0x68] | r0 = *(0xb64e);
0x0000b5e4 movs r3, 0 | r3 = 0;
0x0000b5e6 ldr r4, [pc, 0x68] |
0x0000b5e8 add r6, pc | r6 = 0x16c34;
0x0000b5ea ldr r0, [r6, r0] |
0x0000b5ec add.w r6, r5, 0x30 | r6 = r5 + 0x30;
0x0000b5f0 add r4, pc | r4 = 0x16c46;
0x0000b5f2 adds r4, 0x98 | r4 += 0x98;
0x0000b5f4 ldr r0, [r0] | r0 = *(0x16c34);
0x0000b5f6 str r0, [sp, 4] | var_4h = r0;
0x0000b5f8 mov.w r0, 0 | r0 = 0;
0x0000b5fc mov r0, r4 | r0 = r4;
0x0000b5fe str r3, [sp] | *(sp) = r3;
0x0000b600 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000b604 mov r0, r6 | r0 = r6;
0x0000b606 blx 0x324c | fcn_0000324c ();
0x0000b60a mov r0, r5 | r0 = r5;
0x0000b60c blx 0x32b8 | r0 = BIO_s_mem ();
0x0000b610 mov r3, r0 | r3 = r0;
0x0000b612 mov r0, r6 | r0 = r6;
0x0000b614 str r3, [sp] | *(sp) = r3;
0x0000b616 blx 0x31dc | fcn_000031dc ();
0x0000b61a movs r3, 3 | r3 = 3;
0x0000b61c mov r2, sp | r2 = sp;
0x0000b61e mov r0, r4 | r0 = r4;
0x0000b620 movw r1, 0x191 | r1 = 0x191;
0x0000b624 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b628 ldr r2, [pc, 0x28] |
0x0000b62a ldr r3, [pc, 0x20] | r3 = *(0xb64e);
0x0000b62c ldr r0, [sp] | r0 = *(sp);
0x0000b62e add r2, pc | r2 = 0x16c86;
0x0000b630 ldr r3, [r2, r3] | r3 = *(0x16c86);
0x0000b632 ldr r2, [r3] | r2 = *(0x16c86);
0x0000b634 ldr r3, [sp, 4] | r3 = var_4h;
0x0000b636 eors r2, r3 | r2 ^= r3;
0x0000b638 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000b63c bne 0xb642 |
0x0000b63e add sp, 8 |
0x0000b640 pop {r4, r5, r6, pc} |
| }
0x0000b642 blx 0x348c | fprintf_chk ()
0x0000b646 nop |
0x0000b648 adds r6, 0xa8 | r6 += 0xa8;
0x0000b64a movs r2, r0 | r2 = r0;
0x0000b64c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000b64e movs r0, r0 |
0x0000b650 vst4.8 {d16, d17, d18, d19}, [r0], r0 | __asm ("vst4.8 {d16, d17, d18, d19}, [r0], r0");
0x0000b654 adds r6, 0x62 | r6 += 0x62;
0x0000b656 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xb658 */
| #include <stdint.h>
|
; (fcn) fcn.0000b658 () | void fcn_0000b658 (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0000b658 invalid |
0x0000b65c ldr r1, [pc, 0x80] |
0x0000b65e sub sp, 0x14 |
0x0000b660 movs r2, 3 | r2 = 3;
0x0000b662 movs r6, 0 | r6 = 0;
0x0000b664 ldr r4, [pc, 0x7c] |
0x0000b666 mov r5, r0 | r5 = r0;
0x0000b668 ldr r3, [pc, 0x7c] | r3 = *(0xb6e8);
0x0000b66a add r1, pc | r1 = 0x16d4e;
0x0000b66c add r4, pc | r4 = 0x16d54;
0x0000b66e ldr r3, [r1, r3] |
0x0000b670 adds r4, 0xac | r4 += 0xac;
0x0000b672 mov.w r1, 0x19e | r1 = 0x19e;
0x0000b676 mov r0, r4 | r0 = r4;
0x0000b678 ldr r3, [r3] | r3 = *(0x16d4e);
0x0000b67a str r3, [sp, 0xc] | var_ch = r3;
0x0000b67c mov.w r3, 0 | r3 = 0;
0x0000b680 str r6, [sp] | *(sp) = r6;
0x0000b682 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000b686 mov r0, r6 | r0 = r6;
0x0000b688 add r6, sp, 4 | r6 += var_4h_2;
0x0000b68a mov r1, r6 | r1 = r6;
0x0000b68c blx 0x2fc8 | fcn_00002fc8 ();
0x0000b690 ldr r3, [sp, 4] | r3 = var_4h_2;
0x0000b692 add r3, r7 | r3 += r7;
0x0000b694 add.w r7, r5, 0x30 | r7 = r5 + 0x30;
0x0000b696 lsls r0, r6, 0x1c | r0 = r6 << 0x1c;
0x0000b698 mov r0, r7 | r0 = r7;
0x0000b69a str r3, [sp, 4] | var_4h_2 = r3;
0x0000b69c blx 0x324c | fcn_0000324c ();
0x0000b6a0 mov r2, r6 | r2 = r6;
0x0000b6a2 mov r1, r7 | r1 = r7;
0x0000b6a4 mov r0, r5 | r0 = r5;
0x0000b6a6 blx 0x30f0 | r0 = freeaddrinfo ();
0x0000b6aa mov r3, r0 | r3 = r0;
0x0000b6ac mov r0, r7 | r0 = r7;
0x0000b6ae str r3, [sp] | *(sp) = r3;
0x0000b6b0 blx 0x31dc | fcn_000031dc ();
0x0000b6b4 movs r3, 3 | r3 = 3;
0x0000b6b6 mov r2, sp | r2 = sp;
0x0000b6b8 mov r0, r4 | r0 = r4;
0x0000b6ba movw r1, 0x1ad | r1 = 0x1ad;
0x0000b6be bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b6c2 ldr r2, [pc, 0x28] |
0x0000b6c4 ldr r3, [pc, 0x20] | r3 = *(0xb6e8);
0x0000b6c6 ldr r0, [sp] | r0 = *(sp);
0x0000b6c8 add r2, pc | r2 = 0x16dba;
0x0000b6ca ldr r3, [r2, r3] | r3 = *(0x16dba);
0x0000b6cc ldr r2, [r3] | r2 = *(0x16dba);
0x0000b6ce ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000b6d0 eors r2, r3 | r2 ^= r3;
0x0000b6d2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000b6d6 bne 0xb6dc |
0x0000b6d8 add sp, 0x14 |
0x0000b6da pop {r4, r5, r6, r7, pc} |
| }
0x0000b6dc blx 0x348c | fprintf_chk ()
0x0000b6e0 adds r6, 0x26 | r6 += 0x26;
0x0000b6e2 movs r2, r0 | r2 = r0;
0x0000b6e4 str.w r0, [r4] | __asm ("str.w r0, [r4]");
0x0000b6e8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000b6ea movs r0, r0 |
0x0000b6ec adds r5, 0xc8 | r5 += 0xc8;
0x0000b6ee movs r2, r0 | r2 = r0;
0x0000b6f0 push {r3, r4, r5, lr} |
0x0000b6f2 mov r4, r0 | r4 = r0;
0x0000b6f4 adds r0, 0x30 | r0 += 0x30;
0x0000b6f6 blx 0x333c | raise (r0);
0x0000b6fa mov r0, r4 | r0 = r4;
0x0000b6fc blx 0x3318 | r0 = vsnprintf_chk ();
0x0000b700 mov r5, r0 | r5 = r0;
0x0000b702 mov r0, r4 | r0 = r4;
0x0000b704 blx 0x31a8 | fcn_000031a8 ();
0x0000b708 mov r0, r5 | r0 = r5;
0x0000b70a pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xb798 */
| #include <stdint.h>
|
; (fcn) fcn.0000b798 () | void fcn_0000b798 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_28h;
| int16_t var_1h;
| int16_t var_2h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000b798 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x0000b79c mov r5, r1 | r5 = r1;
0x0000b79e ldr r4, [pc, 0xa0] |
0x0000b7a0 sub sp, 8 |
0x0000b7a2 ldrb r3, [r1] | r3 = *(r1);
0x0000b7a4 ldr r1, [pc, 0x9c] | r1 = *(0xb844);
0x0000b7a6 add r4, pc | r4 = 0x16fec;
0x0000b7a8 cmp r3, 0x40 |
0x0000b7aa ldr r1, [r4, r1] |
0x0000b7ac mov r4, r0 | r4 = r0;
0x0000b7ae ldr r1, [r1] | r1 = *(0x16fec);
0x0000b7b0 str r1, [sp, 4] | var_4h = r1;
0x0000b7b2 mov.w r1, 0 | r1 = 0;
| if (r3 == 0x40) {
0x0000b7b6 beq 0xb81e | goto label_2;
| }
0x0000b7b8 mov r6, r2 | r6 = r2;
0x0000b7ba mov.w r8, 0 | r8 = 0;
0x0000b7be mov r7, sp | r7 = sp;
0x0000b7c0 b 0xb7d2 |
| while (r3 != 0x25) {
0x0000b7c2 mov r0, r4 | r0 = r4;
0x0000b7c4 adds r5, 1 | r5++;
0x0000b7c6 strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x0000b7ca mov r4, r0 | r4 = r0;
| label_0:
0x0000b7cc ldrb r3, [r5] | r3 = *(r5);
0x0000b7ce cmp r3, 0x40 |
| if (r3 == 0x40) {
0x0000b7d0 beq 0xb81e | goto label_2;
| }
| label_1:
0x0000b7d2 cmp r3, 0x25 |
0x0000b7d4 bne 0xb7c2 |
| }
0x0000b7d6 blx 0x3444 | SSL_CTX_set_info_callback ();
0x0000b7da ldrb r2, [r5, 1] | r2 = *((r5 + 1));
0x0000b7dc ldr r3, [r0] | r3 = *(r0);
0x0000b7de ldrh.w r1, [r3, r2, lsl 1] | offset_0 = r2 << 1;
| r1 = *((r3 + offset_0));
0x0000b7e2 lsls r1, r1, 0x13 | r1 <<= 0x13;
| if (r1 >= r1) {
0x0000b7e4 bpl 0xb7cc | goto label_0;
| }
0x0000b7e6 ldrb r1, [r5, 2] | r1 = *((r5 + 2));
0x0000b7e8 ldrh.w r3, [r3, r1, lsl 1] | offset_1 = r1 << 1;
| r3 = *((r3 + offset_1));
0x0000b7ec lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 >= r3) {
0x0000b7ee bpl 0xb7cc | goto label_0;
| }
0x0000b7f0 strb.w r2, [sp] | *(sp) = r2;
0x0000b7f4 mov r0, r7 | r0 = r7;
0x0000b7f6 strb.w r1, [sp, 1] | var_1h = r1;
0x0000b7fa movs r2, 0x10 | r2 = 0x10;
0x0000b7fc movs r1, 0 | r1 = 0;
0x0000b7fe strb.w r8, [sp, 2] | var_2h = r8;
0x0000b802 blx 0x32f4 | r0 = sem_init ();
0x0000b806 mov r3, r0 | r3 = r0;
0x0000b808 mov r0, r4 | r0 = r4;
0x0000b80a strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x0000b80e adds r5, 3 | r5 += 3;
0x0000b810 ldr r3, [r6] | r3 = *(r6);
0x0000b812 mov r4, r0 | r4 = r0;
0x0000b814 subs r3, 2 | r3 -= 2;
0x0000b816 str r3, [r6] | *(r6) = r3;
0x0000b818 ldrb r3, [r5] | r3 = *(r5);
0x0000b81a cmp r3, 0x40 |
| if (r3 != 0x40) {
0x0000b81c bne 0xb7d2 | goto label_1;
| }
| label_2:
0x0000b81e movs r3, 0 | r3 = 0;
0x0000b820 ldr r2, [pc, 0x24] |
0x0000b822 strb r3, [r4] | *(r4) = r3;
0x0000b824 ldr r3, [pc, 0x1c] | r3 = *(0xb844);
0x0000b826 add r2, pc | r2 = 0x17072;
0x0000b828 ldr r3, [r2, r3] | r3 = *(0x17072);
0x0000b82a ldr r2, [r3] | r2 = *(0x17072);
0x0000b82c ldr r3, [sp, 4] | r3 = var_4h;
0x0000b82e eors r2, r3 | r2 ^= r3;
0x0000b830 mov.w r3, 0 | r3 = 0;
0x0000b832 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x0000b834 bne 0xb83c |
0x0000b836 add sp, 8 |
0x0000b838 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x0000b83c blx 0x348c | fprintf_chk ()
0x0000b840 adds r4, 0xea | r4 += 0xea;
0x0000b842 movs r2, r0 | r2 = r0;
0x0000b844 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000b846 movs r0, r0 |
0x0000b848 adds r4, 0x6a | r4 += 0x6a;
0x0000b84a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xb84c */
| #include <stdint.h>
|
; (fcn) fcn.0000b84c () | void fcn_0000b84c (int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_28h;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000b84c mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x0000b850 mov r4, r1 | r4 = r1;
0x0000b852 ldr r1, [pc, 0xd8] |
0x0000b854 mov r7, r2 | r7 = r2;
0x0000b856 mov r5, r3 | r5 = r3;
0x0000b858 sub sp, 0xc |
0x0000b85a ldr r2, [pc, 0xd4] | r2 = *(0xb932);
0x0000b85c add r1, pc | r1 = 0x1718e;
0x0000b85e ldr r3, [r3] | r3 = *(r3);
0x0000b860 ldr r6, [sp, 0x28] | r6 = var_28h;
0x0000b862 ldr r2, [r1, r2] |
0x0000b864 ldr r2, [r2] | r2 = *(0x1718e);
0x0000b866 str r2, [sp, 4] | var_4h_2 = r2;
0x0000b868 mov.w r2, 0 | r2 = 0;
| if (r3 != 0) {
0x0000b86c cbz r3, 0xb87e |
0x0000b86e ldr r0, [pc, 0xc4] |
0x0000b870 mov r2, r3 | r2 = r3;
0x0000b872 movs r1, 0x90 | r1 = 0x90;
0x0000b874 add r0, pc | r0 = 0x171ae;
0x0000b876 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b87a movs r3, 0 | r3 = 0;
0x0000b87c str r3, [r5] | *(r5) = r3;
| }
| if (r4 == 0) {
0x0000b87e cbz r4, 0xb8a8 | goto label_1;
| }
0x0000b880 mov r1, r6 | r1 = r6;
0x0000b882 mov r0, r4 | r0 = r4;
0x0000b884 blx 0x339c | r0 = select ();
| if (r0 != 0) {
0x0000b888 cbz r0, 0xb892 |
0x0000b88a mov r0, r6 | r0 = r6;
0x0000b88c blx 0x3258 | r0 = unlink (r0);
0x0000b890 add r4, r0 | r4 += r0;
| }
0x0000b892 movs r1, 0x40 | r1 = 0x40;
0x0000b894 mov r0, r4 | r0 = r4;
0x0000b896 str r4, [r7] | *(r7) = r4;
0x0000b898 blx 0x3074 | r0 = fcn_00003074 ();
| if (r0 == 0) {
0x0000b89c cbz r0, 0xb8a8 | goto label_1;
| }
0x0000b89e adds r3, r0, 1 | r3 = r0 + 1;
0x0000b8a0 subs r0, r0, r4 | r0 -= r4;
0x0000b8a2 str r3, [r7] | *(r7) = r3;
0x0000b8a4 str r0, [sp] | *(sp) = r0;
0x0000b8a6 cbnz r0, 0xb8c4 |
| while (1) {
| label_1:
0x0000b8a8 movs r0, 0 | r0 = 0;
| label_0:
0x0000b8aa ldr r2, [pc, 0x8c] |
0x0000b8ac ldr r3, [pc, 0x80] | r3 = *(0xb930);
0x0000b8ae add r2, pc | r2 = 0x171ec;
0x0000b8b0 ldr r3, [r2, r3] | r3 = *(0x171ec);
0x0000b8b2 ldr r2, [r3] | r2 = *(0x171ec);
0x0000b8b4 ldr r3, [sp, 4] | r3 = var_4h_2;
0x0000b8b6 eors r2, r3 | r2 ^= r3;
0x0000b8b8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000b8bc bne 0xb928 | goto label_2;
| }
0x0000b8be add sp, 0xc |
0x0000b8c0 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0000b8c4 ldr.w r8, [pc, 0x74] |
0x0000b8c8 adds r2, r0, 1 | r2 = r0 + 1;
0x0000b8ca movs r1, 0xa2 | r1 = 0xa2;
0x0000b8cc add r8, pc | r8 = 0x1720c;
0x0000b8ce mov r0, r8 | r0 = r8;
0x0000b8d0 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000b8d4 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x0000b8d6 cbz r0, 0xb912 | goto label_3;
| }
0x0000b8d8 mov r2, sp | r2 = sp;
0x0000b8da mov r1, r4 | r1 = r4;
0x0000b8dc bl 0xb798 | fcn_0000b798 (r0, r1, r2);
0x0000b8e0 ldr.w sb, [sp] | sb = *(sp);
0x0000b8e4 mov r0, r6 | r0 = r6;
0x0000b8e6 mov r1, sb | r1 = sb;
0x0000b8e8 bl 0xe2e4 | r0 = fcn_0000e2e4 (r0);
0x0000b8ec adds r7, r0, 1 | r7 = r0 + 1;
0x0000b8ee movs r1, 0xaa | r1 = 0xaa;
0x0000b8f0 mov r2, r7 | r2 = r7;
0x0000b8f2 mov r0, r8 | r0 = r8;
0x0000b8f4 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000b8f8 str r0, [r5] | *(r5) = r0;
| if (r0 == 0) {
0x0000b8fa cbz r0, 0xb918 | goto label_4;
| }
0x0000b8fc mov r1, r7 | r1 = r7;
0x0000b8fe mov r2, r6 | r2 = r6;
0x0000b900 mov r3, sb | r3 = sb;
0x0000b902 bl 0xe280 | fcn_0000e280 (r0);
0x0000b906 mov r2, r6 | r2 = r6;
0x0000b908 movs r1, 0xb1 | r1 = 0xb1;
0x0000b90a mov r0, r8 | r0 = r8;
0x0000b90c bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b910 b 0xb8a8 |
| }
| label_3:
0x0000b912 mvn r0, 0x62 | r0 = ~0x62;
0x0000b916 b 0xb8aa | goto label_0;
| label_4:
0x0000b918 mov r0, r8 | r0 = r8;
0x0000b91a mov r2, r6 | r2 = r6;
0x0000b91c movs r1, 0xac | r1 = 0xac;
0x0000b91e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000b922 mvn r0, 0x62 | r0 = ~0x62;
0x0000b926 b 0xb8aa | goto label_0;
| label_2:
0x0000b928 blx 0x348c | fprintf_chk ()
0x0000b92c adds r4, 0x34 | r4 += 0x34;
0x0000b92e movs r2, r0 | r2 = r0;
0x0000b930 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000b932 movs r0, r0 |
0x0000b934 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xb940 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000b940 () | void fcn_0000b940 (int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_4ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000b940 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000b944 mov r5, r2 | r5 = r2;
0x0000b946 ldr r2, [pc, 0x2ec] |
0x0000b948 mov r6, r3 | r6 = r3;
0x0000b94a mov r7, r0 | r7 = r0;
0x0000b94c sub sp, 0x1c |
0x0000b94e ldr r3, [pc, 0x2e8] | r3 = *(0xbc3a);
0x0000b950 mov r4, r1 | r4 = r1;
0x0000b952 add r2, pc | r2 = 0x1758c;
0x0000b954 ldr r0, [pc, 0x2e4] |
0x0000b956 movs r1, 0xda | r1 = 0xda;
0x0000b958 ldr.w r8, [sp, 0x44] | r8 = *(arg_44h);
0x0000b95c ldr r3, [r2, r3] |
0x0000b95e movs r2, 3 | r2 = 3;
0x0000b960 add r0, pc | r0 = 0x175a0;
0x0000b962 ldr.w sb, [sp, 0x48] | sb = *(arg_48h);
0x0000b966 adds r0, 0x1c | r0 += 0x1c;
0x0000b968 ldr r3, [r3] | r3 = *(0x1758c);
0x0000b96a str r3, [sp, 0x14] | var_14h = r3;
0x0000b96c mov.w r3, 0 | r3 = 0;
0x0000b970 movs r3, 0 | r3 = 0;
0x0000b972 str r3, [sp, 0xc] | var_ch = r3;
0x0000b974 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000b978 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000b97a ldr.w r1, [r4, 0xa4] | r1 = *((r4 + 0xa4));
0x0000b97e orr r3, r3, 8 | r3 |= 8;
0x0000b982 strb r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000b984 cmp r1, 0 |
| if (r1 == 0) {
0x0000b986 beq 0xba36 | goto label_8;
| }
| label_0:
0x0000b988 ldr r3, [pc, 0x2b4] |
0x0000b98a add.w r2, r4, 0x48 | r2 = r4 + 0x48;
0x0000b98e mov r0, r4 | r0 = r4;
0x0000b990 add r3, pc | r3 = 0x175d4;
0x0000b992 str r3, [sp] | *(sp) = r3;
0x0000b994 add.w r3, r4, 0x4c | r3 = r4 + 0x4c;
0x0000b998 bl 0xb84c | fcn_0000b84c (r0, r1, r2);
0x0000b99c str r0, [sp, 0xc] | var_ch = r0;
0x0000b99e cbz r0, 0xb9d0 |
| while (r0 != 0) {
| label_2:
0x0000b9a0 ldr r0, [pc, 0x2a0] |
0x0000b9a2 movs r3, 3 | r3 = 3;
0x0000b9a4 add r2, sp, 0xc | r2 += var_ch;
0x0000b9a6 mov.w r1, 0x154 | r1 = 0x154;
0x0000b9aa add r0, pc | r0 = 0x175f2;
0x0000b9ac adds r0, 0x1c | r0 += 0x1c;
0x0000b9ae bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b9b2 ldr r2, [pc, 0x294] |
0x0000b9b4 ldr r3, [pc, 0x280] | r3 = *(0xbc38);
0x0000b9b6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000b9b8 add r2, pc | r2 = 0x17606;
0x0000b9ba ldr r3, [r2, r3] | r3 = *(0x17606);
0x0000b9bc ldr r2, [r3] | r2 = *(0x17606);
0x0000b9be ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000b9c0 eors r2, r3 | r2 ^= r3;
0x0000b9c2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000b9c6 bne.w 0xbc2e | goto label_9;
| }
0x0000b9ca add sp, 0x1c |
0x0000b9cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0000b9d0 ldr r2, [pc, 0x278] |
0x0000b9d2 mov.w r1, -1 | r1 = -1;
0x0000b9d6 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0000b9d8 movs r0, 4 | r0 = 4;
0x0000b9da add r2, pc | r2 = 0x1762a;
0x0000b9dc bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000b9e0 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
| if (r3 != 0) {
0x0000b9e2 cbz r3, 0xb9f2 |
0x0000b9e4 ldr r2, [pc, 0x268] |
0x0000b9e6 mov.w r1, -1 | r1 = -1;
0x0000b9ea movs r0, 4 | r0 = 4;
0x0000b9ec add r2, pc | r2 = 0x17640;
0x0000b9ee bl 0x9a28 | fcn_00009a28 (r0, r1);
| }
0x0000b9f2 ldr.w r1, [r4, 0xa8] | r1 = *((r4 + 0xa8));
| if (r1 == 0) {
0x0000b9f6 cbz r1, 0xba4c | goto label_10;
| }
| label_1:
0x0000b9f8 ldr r3, [pc, 0x258] |
0x0000b9fa add.w r2, r4, 0x40 | r2 = r4 + 0x40;
0x0000b9fe mov r0, r4 | r0 = r4;
0x0000ba00 add r3, pc | r3 = 0x17658;
0x0000ba02 str r3, [sp] | *(sp) = r3;
0x0000ba04 add.w r3, r4, 0x44 | r3 = r4 + 0x44;
0x0000ba08 bl 0xb84c | fcn_0000b84c (r0, r1, r2);
0x0000ba0c str r0, [sp, 0xc] | var_ch = r0;
0x0000ba0e cmp r0, 0 |
0x0000ba10 bne 0xb9a0 |
| }
0x0000ba12 ldr r2, [pc, 0x244] |
0x0000ba14 mov.w r1, -1 | r1 = -1;
0x0000ba16 adds r1, 0xff | r1 += 0xff;
0x0000ba18 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0000ba1a movs r0, 4 | r0 = 4;
0x0000ba1c add r2, pc | r2 = 0x1767a;
0x0000ba1e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000ba22 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
| if (r3 == 0) {
0x0000ba24 cbz r3, 0xba5a | goto label_11;
| }
0x0000ba26 ldr r2, [pc, 0x234] |
0x0000ba28 mov.w r1, -1 | r1 = -1;
0x0000ba2c movs r0, 4 | r0 = 4;
0x0000ba2e add r2, pc | r2 = 0x17690;
0x0000ba30 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000ba34 b 0xba5a | goto label_11;
| label_8:
0x0000ba36 ldr r0, [pc, 0x228] |
0x0000ba38 add r0, pc | r0 = 0x1769e;
0x0000ba3a blx 0x305c | r0 = fcn_0000305c ();
0x0000ba3e mov r1, r0 | r1 = r0;
0x0000ba40 cmp r0, 0 |
| if (r0 != 0) {
0x0000ba42 bne 0xb988 | goto label_0;
| }
0x0000ba44 ldr.w r1, [r4, 0xa8] | r1 = *((r4 + 0xa8));
0x0000ba48 cmp r1, 0 |
| if (r1 != 0) {
0x0000ba4a bne 0xb9f8 | goto label_1;
| }
| label_10:
0x0000ba4c ldr r0, [pc, 0x214] |
0x0000ba4e add r0, pc | r0 = 0x176b6;
0x0000ba50 blx 0x305c | r0 = fcn_0000305c ();
0x0000ba54 mov r1, r0 | r1 = r0;
0x0000ba56 cmp r0, 0 |
| if (r0 != 0) {
0x0000ba58 bne 0xb9f8 | goto label_1;
| }
| label_11:
0x0000ba5a subs r3, r6, 0 | r3 = r6 - 0;
0x0000ba5c it ne |
| if (r3 == r6) {
0x0000ba5e movne r3, 1 | r3 = 1;
| }
0x0000ba60 cmp r5, 0 |
0x0000ba62 ite ne |
| if (r5 == 0) {
0x0000ba64 movne r2, 0 | r2 = 0;
| }
| if (r5 != 0) {
0x0000ba66 andeq r2, r3, 1 | r2 = r3 & 1;
| }
| if (r2 != 0) {
0x0000ba6a cbz r2, 0xbaae |
0x0000ba6c ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0000ba6e cmp r0, 0 |
| if (r0 == 0) {
0x0000ba70 beq 0xbada | goto label_12;
| }
0x0000ba72 movs r3, 0x50 | r3 = 0x50;
0x0000ba74 movs r2, 0 | r2 = 0;
0x0000ba76 add r1, sp, 0x10 | r1 += var_10h;
0x0000ba78 bl 0xb70c | fcn_0000b70c (r0, r1, r2, r3);
0x0000ba7c ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x0000ba7e mov sl, r0 | sl = r0;
0x0000ba80 cmp r3, 0 |
| if (r3 < 0) {
0x0000ba82 blt 0xbad2 | goto label_13;
| }
0x0000ba84 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x0000ba86 add.w fp, r4, 0x1c |
0x0000ba8a ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000ba8c mov r1, sl | r1 = sl;
0x0000ba8e str r3, [sp] | *(sp) = r3;
0x0000ba90 mov r3, fp | r3 = fp;
0x0000ba92 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0000ba94 bl 0x8b48 | r0 = fcn_00008b48 (r0, r1, r2, r3, r4, r5);
0x0000ba98 cmp r0, 0xb |
0x0000ba9a it ne |
| if (r0 != 0xb) {
0x0000ba9c cmpne r0, 0x73 | __asm ("cmpne r0, 0x73");
| }
0x0000ba9e str r0, [sp, 0xc] | var_ch = r0;
| if (r0 != 0xb) {
0x0000baa0 bne 0xbb0c | goto label_14;
| }
| label_3:
0x0000baa2 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000baa4 movs r2, 1 | r2 = 1;
0x0000baa6 bfi r3, r2, 6, 4 | value_0 = BIT_MASK (6, 4);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x0000baaa strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000baac b 0xb9a0 | goto label_2;
| }
0x0000baae cmp r5, 0 |
0x0000bab0 ite eq |
| if (r5 != 0) {
0x0000bab2 moveq r3, 0 | r3 = 0;
| }
| if (r5 == 0) {
0x0000bab4 andne r3, r3, 1 | r3 &= 1;
| }
0x0000bab8 cmp r3, 0 |
| if (r3 == 0) {
0x0000baba beq 0xbb86 | goto label_15;
| }
0x0000babc ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0000babe cmp r0, 0 |
| if (r0 == 0) {
0x0000bac0 beq 0xbb96 | goto label_16;
| }
0x0000bac2 movs r3, 0x50 | r3 = 0x50;
0x0000bac4 add r1, sp, 0x10 | r1 += var_10h;
0x0000bac6 bl 0xb70c | fcn_0000b70c (r0, r1, r2, r3);
0x0000baca ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x0000bacc mov sl, r0 | sl = r0;
0x0000bace cmp r3, 0 |
| if (r3 >= 0) {
0x0000bad0 bge 0xbbca | goto label_17;
| }
| do {
| label_13:
0x0000bad2 mov.w r3, -1 | r3 = -1;
0x0000bad6 str r3, [sp, 0xc] | var_ch = r3;
0x0000bad8 b 0xb9a0 | goto label_2;
| label_12:
0x0000bada movw r3, 0x75b | r3 = 0x75b;
| label_4:
0x0000bade movs r2, 0 | r2 = 0;
0x0000bae0 add r1, sp, 0x10 | r1 += var_10h;
0x0000bae2 mov r0, r7 | r0 = r7;
0x0000bae4 bl 0xb70c | fcn_0000b70c (r0, r1, r2, r3);
0x0000bae8 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x0000baea mov sl, r0 | sl = r0;
0x0000baec cmp r3, 0 |
0x0000baee blt 0xbad2 |
| } while (r3 < 0);
0x0000baf0 add.w fp, r4, 0x1c |
0x0000baf4 mov r1, r0 | r1 = r0;
0x0000baf6 str r3, [sp] | *(sp) = r3;
0x0000baf8 mov r0, r7 | r0 = r7;
0x0000bafa ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000bafc mov r3, fp | r3 = fp;
0x0000bafe bl 0x8b48 | r0 = fcn_00008b48 (r0, r1, r2, r3, r4, r5);
0x0000bb02 cmp r0, 0xb |
0x0000bb04 it ne |
| if (r0 != 0xb) {
0x0000bb06 cmpne r0, 0x73 | __asm ("cmpne r0, 0x73");
| }
0x0000bb08 str r0, [sp, 0xc] | var_ch = r0;
| if (r0 == 0xb) {
0x0000bb0a beq 0xbaa2 | goto label_3;
| }
| label_14:
0x0000bb0c cmp r0, 0 |
| if (r0 != 0) {
0x0000bb0e bne.w 0xb9a0 | goto label_2;
| }
0x0000bb12 cmp r5, 0 |
| if (r5 == 0) {
0x0000bb14 beq 0xbb9c | goto label_18;
| }
| if (r6 != 0) {
0x0000bb16 cbz r6, 0xbb34 |
0x0000bb18 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
| if (r3 == 0) {
0x0000bb1a cbz r3, 0xbb34 | goto label_19;
| }
0x0000bb1c ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000bb1e movs r2, 5 | r2 = 5;
0x0000bb20 movs r1, 1 | r1 = 1;
0x0000bb22 mov r0, fp | r0 = fp;
0x0000bb24 bfi r3, r2, 6, 4 | value_2 = BIT_MASK (6, 4);
| value_3 = r2 & value_2;
| value_2 = ~value_2;
| r3 &= value_2;
| r3 |= value_3;
0x0000bb28 mov r2, r7 | r2 = r7;
0x0000bb2a strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000bb2c bl 0xf86c | fcn_0000f86c (r0, r1, r2, r3, r4);
0x0000bb30 str r0, [sp, 0xc] | var_ch = r0;
| if (r0 != 0) {
0x0000bb32 cbnz r0, 0xbb46 | goto label_20;
| }
| }
| label_19:
0x0000bb34 ldr.w r1, [r4, 0xac] | r1 = *((r4 + 0xac));
0x0000bb38 mov r3, sl | r3 = sl;
0x0000bb3a mov r2, r7 | r2 = r7;
0x0000bb3c mov r0, fp | r0 = fp;
0x0000bb3e bl 0x185a4 | r0 = fcn_000185a4 (r0, r1, r2, r3);
0x0000bb42 cmp r0, 1 |
| if (r0 == 1) {
0x0000bb44 beq 0xbbe8 | goto label_21;
| }
| label_20:
0x0000bb46 mov.w r3, -1 | r3 = -1;
0x0000bb4a str r3, [sp, 0xc] | var_ch = r3;
| label_7:
0x0000bb4c cmp r6, 0 |
| if (r6 == 0) {
0x0000bb4e beq.w 0xb9a0 | goto label_2;
| }
| label_5:
0x0000bb52 mov r1, r7 | r1 = r7;
0x0000bb54 mov r0, fp | r0 = fp;
0x0000bb56 bl 0xe808 | r0 = fcn_0000e808 (r0, r1);
0x0000bb5a cmn.w r0, 0x16 |
0x0000bb5e str r0, [sp, 0xc] | var_ch = r0;
| if (r0 == 0x16) {
0x0000bb60 beq 0xbbbe | goto label_22;
| }
0x0000bb62 cmp r0, 0 |
| if (r0 != 0) {
0x0000bb64 bne.w 0xb9a0 | goto label_2;
| }
| do {
| label_6:
0x0000bb68 ldr r1, [sp, 0x40] | r1 = *(arg_40h);
0x0000bb6a mov r3, sb | r3 = sb;
0x0000bb6c mov r2, r8 | r2 = r8;
0x0000bb6e mov r0, r4 | r0 = r4;
0x0000bb70 bl 0x69f8 | fcn_000069f8 (r0, r1, r2, r3);
0x0000bb74 str r0, [sp, 0xc] | var_ch = r0;
0x0000bb76 cmp r0, 0 |
| if (r0 != 0) {
0x0000bb78 bne 0xbbde | goto label_23;
| }
0x0000bb7a ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000bb7c movs r2, 4 | r2 = 4;
0x0000bb7e bfi r3, r2, 6, 4 | value_4 = BIT_MASK (6, 4);
| value_5 = r2 & value_4;
| value_4 = ~value_4;
| r3 &= value_4;
| r3 |= value_5;
0x0000bb82 strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000bb84 b 0xb9a0 | goto label_2;
| label_15:
0x0000bb86 movw r3, 0x22b3 | r3 = 0x22b3;
0x0000bb8a movw r2, 0x75b | r2 = 0x75b;
0x0000bb8e cmp r5, 0 |
0x0000bb90 it eq |
| if (r5 != 0) {
0x0000bb92 moveq r3, r2 | r3 = r2;
| }
0x0000bb94 b 0xbade | goto label_4;
| label_16:
0x0000bb96 movw r3, 0x22b3 | r3 = 0x22b3;
0x0000bb9a b 0xbade | goto label_4;
| label_18:
0x0000bb9c cmp r6, 0 |
0x0000bb9e beq 0xbb68 |
| } while (r6 == 0);
0x0000bba0 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0000bba2 cmp r3, 0 |
| if (r3 == 0) {
0x0000bba4 beq 0xbb52 | goto label_5;
| }
0x0000bba6 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000bba8 movs r2, 5 | r2 = 5;
0x0000bbaa mov r1, r5 | r1 = r5;
0x0000bbac mov r0, fp | r0 = fp;
0x0000bbae bfi r3, r2, 6, 4 | value_6 = BIT_MASK (6, 4);
| value_7 = r2 & value_6;
| value_6 = ~value_6;
| r3 &= value_6;
| r3 |= value_7;
0x0000bbb2 mov r2, r7 | r2 = r7;
0x0000bbb4 strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000bbb6 bl 0xf86c | fcn_0000f86c (r0, r1, r2, r3, r4);
0x0000bbba str r0, [sp, 0xc] | var_ch = r0;
0x0000bbbc b 0xbb52 | goto label_5;
| label_22:
0x0000bbbe ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000bbc0 movs r2, 3 | r2 = 3;
0x0000bbc2 bfi r3, r2, 6, 4 | value_8 = BIT_MASK (6, 4);
| value_9 = r2 & value_8;
| value_8 = ~value_8;
| r3 &= value_8;
| r3 |= value_9;
0x0000bbc6 strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000bbc8 b 0xb9a0 | goto label_2;
| label_17:
0x0000bbca add.w fp, r4, 0x1c |
0x0000bbce str r3, [sp] | *(sp) = r3;
0x0000bbd0 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000bbd2 mov r3, fp | r3 = fp;
0x0000bbd4 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0000bbd6 mov r1, sl | r1 = sl;
0x0000bbd8 bl 0x8b48 | fcn_00008b48 (r0, r1, r2, r3, r4, r5);
0x0000bbda vqshl.u32 q7, q6, 0x16 | __asm ("vqshl.u32 q7, q6, 0x16");
| label_23:
0x0000bbde ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000bbe0 bfc r3, 6, 4 | value_10 = BIT_MASK (4, );
| value_10 = ~value_10;
| r3 &= value_10;
0x0000bbe4 strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000bbe6 b 0xb9a0 | goto label_2;
| label_21:
0x0000bbe8 ldr.w r5, [r4, 0xac] | r5 = *((r4 + 0xac));
0x0000bbec ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x0000bbee ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x0000bbf0 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0000bbf2 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x0000bbf4 cmp r2, 2 |
0x0000bbf6 iteet gt |
| if (r2 <= 2) {
0x0000bbf8 ldrgt r2, [r5, 0x30] | r2 = *((r5 + 0x30));
| }
| if (r2 > 2) {
0x0000bbfa movle r2, 0 | r2 = 0;
| }
| if (r2 <= 2) {
0x0000bbfc strdle r2, r2, [sp] | __asm ("strdle r2, r2, [sp]");
| }
| if (r2 > 2) {
0x0000bc00 str r2, [sp, 4] | var_4h = r2;
| }
0x0000bc02 itt gt |
| if (r2 <= 2) {
0x0000bc04 ldrgt r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
| }
| if (r2 <= 2) {
0x0000bc06 strgt r2, [sp] | *(sp) = r2;
| }
0x0000bc08 mov r2, r7 | r2 = r7;
0x0000bc0a bl 0x18764 | r0 = fcn_00018764 (r0, r1, r2, r3, r4, r5);
0x0000bc0e cmn.w r0, 0x16 |
0x0000bc12 str r0, [sp, 0xc] | var_ch = r0;
| if (r0 == 0x16) {
0x0000bc14 beq 0xbc22 | goto label_24;
| }
0x0000bc16 cmp r6, 0 |
| if (r6 != 0) {
0x0000bc18 bne 0xbb52 | goto label_5;
| }
0x0000bc1a cmp r0, 0 |
| if (r0 != 0) {
0x0000bc1c bne.w 0xb9a0 | goto label_2;
| }
0x0000bc20 b 0xbb68 | goto label_6;
| label_24:
0x0000bc22 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0000bc24 movs r2, 2 | r2 = 2;
0x0000bc26 bfi r3, r2, 6, 4 | value_11 = BIT_MASK (6, 4);
| value_12 = r2 & value_11;
| value_11 = ~value_11;
| r3 &= value_11;
| r3 |= value_12;
0x0000bc2a strh r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0000bc2c b 0xbb4c | goto label_7;
| label_9:
0x0000bc2e blx 0x348c | fprintf_chk ()
0x0000bc32 nop |
0x0000bc34 adds r3, 0x3e | r3 += 0x3e;
0x0000bc36 movs r2, r0 | r2 = r0;
0x0000bc38 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000bc3a movs r0, r0 |
0x0000bc3c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xbc68 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000bc68 () | void fcn_0000bc68 (int16_t arg2) {
| int16_t var_0h_3;
| int16_t var_4h;
| int16_t var_ch_2;
| int16_t var_10h_3;
| int16_t var_14h_3;
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r1 = arg2;
| if (? < ?) {
0x0000bc68 andhs r4, r3, 0x210000 | r4 = r3 & 0x210000;
| }
0x0000bc6c push {r4, r5, r6, lr} |
0x0000bc6e sub sp, 0x18 |
0x0000bc70 ldr r4, [pc, 0x80] |
0x0000bc72 movs r6, 0 | r6 = 0;
0x0000bc74 add r0, pc | r0 += pc;
0x0000bc76 ldr r3, [pc, 0x80] |
0x0000bc78 str r1, [sp, 0xc] | var_ch = r1;
0x0000bc7a add r4, pc | r4 = 0x17972;
0x0000bc7c adds r4, 0x34 | r4 += 0x34;
0x0000bc7e mov.w r1, 0x164 | r1 = 0x164;
0x0000bc82 ldr r3, [r0, r3] | r3 = *((r0 + r3));
0x0000bc84 mov r0, r4 | r0 = r4;
0x0000bc86 ldr r5, [pc, 0x74] |
0x0000bc88 ldr r3, [r3] | r3 = *(0xbcfa);
0x0000bc8a str r3, [sp, 0x14] | var_14h = r3;
0x0000bc8c mov.w r3, 0 | r3 = 0;
0x0000bc90 str r6, [sp, 0x10] | var_10h = r6;
0x0000bc92 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000bc96 ldr r2, [pc, 0x68] | r2 = *(0xbd02);
0x0000bc98 add r5, pc | r5 = 0x1799a;
0x0000bc9a ldr r3, [pc, 0x68] | r3 = *(0xbd06);
0x0000bc9c ldr r1, [r5, r2] | r1 = *(0x1799a);
0x0000bc9e ldr r2, [r5, r3] | r2 = *(0x1799a);
0x0000bca0 ldr r3, [r1] | r3 = *(0x1799a);
0x0000bca2 add r1, sp, 0xc | r1 += var_ch;
0x0000bca4 ldr r0, [r3, 4] | r0 = *(0x1799e);
0x0000bca6 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000bcaa ldr r5, [r0, 8] | r5 = *(0x179a6);
0x0000bcac mov r2, r6 | r2 = r6;
0x0000bcae ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000bcb0 movs r0, 4 | r0 = 4;
0x0000bcb2 ldr r1, [r5] | r1 = *(0x179a6);
0x0000bcb4 str r1, [sp] | *(sp) = r1;
0x0000bcb6 movs r1, 0x15 | r1 = 0x15;
0x0000bcb8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000bcbc ldrb r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0000bcbe movs r3, 3 | r3 = 3;
0x0000bcc0 mov r0, r4 | r0 = r4;
0x0000bcc2 mov.w r1, 0x168 | r1 = 0x168;
0x0000bcc6 bfi r2, r6, 4, 1 | value_0 = BIT_MASK (4, 1);
| value_1 = r6 & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x0000bcca strb r2, [r5, 0x10] | *((r5 + 0x10)) = r2;
0x0000bccc add r2, sp, 0x10 | r2 += var_10h;
0x0000bcce bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000bcd2 ldr r2, [pc, 0x34] |
0x0000bcd4 ldr r3, [pc, 0x20] | r3 = *(0xbcf8);
0x0000bcd6 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000bcd8 add r2, pc | r2 = 0x179e6;
0x0000bcda ldr r3, [r2, r3] | r3 = *(0x179e6);
0x0000bcdc ldr r2, [r3] | r2 = *(0x179e6);
0x0000bcde ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000bce0 eors r2, r3 | r2 ^= r3;
0x0000bce2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000bce6 bne 0xbcec |
0x0000bce8 add sp, 0x18 |
0x0000bcea pop {r4, r5, r6, pc} |
| }
0x0000bcec blx 0x348c | fprintf_chk ()
0x0000bcf0 adds r0, 0x1c | r0 += 0x1c;
0x0000bcf2 movs r2, r0 | r2 = r0;
0x0000bcf4 orrs r0, sl, 0x800000 | r0 = sl | 0x800000;
0x0000bcf8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000bcfa movs r0, r0 |
0x0000bcfc cmp r7, 0xf8 |
0x0000bcfe movs r2, r0 | r2 = r0;
0x0000bd00 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x0000bd02 movs r0, r0 |
0x0000bd04 lsls r0, r7, 0xc | r0 = r7 << 0xc;
0x0000bd06 movs r0, r0 |
0x0000bd08 cmp r7, 0xb8 |
0x0000bd0a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xbd0c */
| #include <stdint.h>
|
; (fcn) fcn.0000bd0c () | void fcn_0000bd0c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_0h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000bd0c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000bd10 mov r6, r2 | r6 = r2;
0x0000bd12 ldr r2, [pc, 0x7c] |
0x0000bd14 mov r7, r3 | r7 = r3;
0x0000bd16 sub sp, 0x1c |
0x0000bd18 mov r5, r1 | r5 = r1;
0x0000bd1a ldr r3, [pc, 0x78] | r3 = *(0xbd96);
0x0000bd1c mov r8, r0 | r8 = r0;
0x0000bd1e ldr r4, [pc, 0x78] |
0x0000bd20 add r2, pc | r2 = 0x17ab6;
0x0000bd22 ldr.w sl, [sp, 0x40] | sl = var_0h;
0x0000bd26 mov.w sb, 0 | sb = 0;
0x0000bd2a ldr r3, [r2, r3] |
0x0000bd2c movw r1, 0x17b | r1 = 0x17b;
0x0000bd30 ldr.w fp, [sp, 0x44] | fp = var_44h;
0x0000bd34 add r4, pc | r4 = 0x17ad2;
0x0000bd36 adds r4, 0x54 | r4 += 0x54;
0x0000bd38 movs r2, 3 | r2 = 3;
0x0000bd3a mov r0, r4 | r0 = r4;
0x0000bd3c ldr r3, [r3] | r3 = *(0x17ab6);
0x0000bd3e str r3, [sp, 0x14] | var_14h_2 = r3;
0x0000bd40 mov.w r3, 0 | r3 = 0;
0x0000bd44 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h_2]");
0x0000bd48 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000bd4c mov r3, fp | r3 = fp;
0x0000bd4e mov r2, sl | r2 = sl;
0x0000bd50 mov r1, r6 | r1 = r6;
0x0000bd52 mov r0, r5 | r0 = r5;
0x0000bd54 strd sb, r8, [sp, 4] | __asm ("strd sb, r8, [sp, 4]");
0x0000bd58 str r7, [sp] | *(sp) = r7;
0x0000bd5a bl 0x6ea0 | fcn_00006ea0 (r0, r1, r2, r3);
0x0000bd5e movs r3, 3 | r3 = 3;
0x0000bd60 mov r5, r0 | r5 = r0;
0x0000bd62 add r2, sp, 0x10 | r2 += var_10h_2;
0x0000bd64 mov r0, r4 | r0 = r4;
0x0000bd66 movw r1, 0x17d | r1 = 0x17d;
0x0000bd6a str r5, [sp, 0x10] | var_10h_2 = r5;
0x0000bd6c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000bd70 ldr r2, [pc, 0x28] |
0x0000bd72 ldr r3, [pc, 0x20] | r3 = *(0xbd96);
0x0000bd74 ldr r0, [sp, 0x10] | r0 = var_10h_2;
0x0000bd76 add r2, pc | r2 = 0x17b16;
0x0000bd78 ldr r3, [r2, r3] | r3 = *(0x17b16);
0x0000bd7a ldr r2, [r3] | r2 = *(0x17b16);
0x0000bd7c ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0000bd7e eors r2, r3 | r2 ^= r3;
0x0000bd80 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000bd84 bne 0xbd8c |
0x0000bd86 add sp, 0x1c |
0x0000bd88 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0000bd8c blx 0x348c | fprintf_chk ()
0x0000bd90 cmp r7, 0x70 |
0x0000bd92 movs r2, r0 | r2 = r0;
0x0000bd94 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000bd96 movs r0, r0 |
0x0000bd98 usat16 r0, 0, r0 | __asm ("usat16 r0, 0, r0");
0x0000bd9c cmp r7, 0x1a |
0x0000bd9e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xbda0 */
| #include <stdint.h>
|
; (fcn) fcn.0000bda0 () | void fcn_0000bda0 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x0000bda0 strdlt fp, ip, [r7], r0 | __asm ("strdlt fp, ip, [r7], r0");
0x0000bda4 str r1, [sp, 0xc] | var_ch = r1;
0x0000bda6 mov r6, r0 | r6 = r0;
0x0000bda8 movs r7, 0 | r7 = 0;
0x0000bdaa movs r2, 3 | r2 = 3;
0x0000bdac ldr r1, [pc, 0x7c] |
0x0000bdae ldr r4, [pc, 0x80] |
0x0000bdb0 ldr r3, [pc, 0x80] | r3 = *(0xbe34);
0x0000bdb2 add r1, pc | r1 = 0x17be2;
0x0000bdb4 ldr r5, [pc, 0x80] |
0x0000bdb6 add r4, pc | r4 = 0x17bec;
0x0000bdb8 ldr r3, [r1, r3] |
0x0000bdba adds r4, 0x6c | r4 += 0x6c;
0x0000bdbc mov.w r1, 0x18e | r1 = 0x18e;
0x0000bdc0 mov r0, r4 | r0 = r4;
0x0000bdc2 add r5, pc | r5 = 0x17bfe;
0x0000bdc4 ldr r3, [r3] | r3 = *(0x17be2);
0x0000bdc6 str r3, [sp, 0x14] | var_14h = r3;
0x0000bdc8 mov.w r3, 0 | r3 = 0;
0x0000bdca lsls r0, r0, 0xc | r0 <<= 0xc;
0x0000bdcc str r7, [sp, 0x10] | var_10h = r7;
0x0000bdce bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000bdd2 ldr r3, [pc, 0x68] | r3 = *(0xbe3e);
0x0000bdd4 add r1, sp, 0xc | r1 += var_ch;
0x0000bdd6 ldr r2, [r5, r3] | r2 = *(0x17bfe);
0x0000bdd8 ldr r3, [pc, 0x64] | r3 = *(0xbe40);
0x0000bdda ldr r3, [r5, r3] |
0x0000bddc ldr r3, [r3] | r3 = *(0x17bfe);
0x0000bdde ldr r0, [r3, 4] | r0 = *(0x17c02);
0x0000bde0 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000bde4 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0000bde6 mov r2, r7 | r2 = r7;
0x0000bde8 str r3, [sp, 4] | var_4h = r3;
0x0000bdea ldr r1, [r0, 8] |
0x0000bdec movs r0, 4 | r0 = 4;
0x0000bdee ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000bdf0 ldr r1, [r1] | r1 = *(0x17c0a);
0x0000bdf2 str r1, [sp] | *(sp) = r1;
0x0000bdf4 movs r1, 0x17 | r1 = 0x17;
0x0000bdf6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000bdfa mov r0, r6 | r0 = r6;
0x0000bdfc bl 0x6228 | fcn_00006228 (r0);
0x0000be00 movs r3, 3 | r3 = 3;
0x0000be02 add r2, sp, 0x10 | r2 += var_10h;
0x0000be04 mov r0, r4 | r0 = r4;
0x0000be06 mov.w r1, 0x192 | r1 = 0x192;
0x0000be0a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000be0e ldr r2, [pc, 0x34] |
0x0000be10 ldr r3, [pc, 0x20] | r3 = *(0xbe34);
0x0000be12 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000be14 add r2, pc | r2 = 0x17c5e;
0x0000be16 ldr r3, [r2, r3] | r3 = *(0x17c5e);
0x0000be18 ldr r2, [r3] | r2 = *(0x17c5e);
0x0000be1a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000be1c eors r2, r3 | r2 ^= r3;
0x0000be1e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000be22 bne 0xbe28 |
0x0000be24 add sp, 0x1c |
0x0000be26 pop {r4, r5, r6, r7, pc} |
| }
0x0000be28 blx 0x348c | fprintf_chk ()
0x0000be2c cmp r6, 0xde |
0x0000be2e movs r2, r0 | r2 = r0;
0x0000be30 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xbe48 */
| #include <stdint.h>
|
; (fcn) fcn.0000be48 () | void fcn_0000be48 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000be48 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x0000be4c mov r8, r2 | r8 = r2;
0x0000be4e ldr r2, [pc, 0x70] |
0x0000be50 mov r6, r3 | r6 = r3;
0x0000be52 sub sp, 0x14 |
0x0000be54 mov r5, r1 | r5 = r1;
0x0000be56 ldr r3, [pc, 0x6c] | r3 = *(0xbec6);
0x0000be58 mov sb, r0 | sb = r0;
0x0000be5a ldr r4, [pc, 0x6c] |
0x0000be5c add r2, pc | r2 = 0x17d22;
0x0000be5e movs r7, 0 | r7 = 0;
0x0000be60 movw r1, 0x1a1 | r1 = 0x1a1;
0x0000be64 ldr r3, [r2, r3] |
0x0000be66 movs r2, 3 | r2 = 3;
0x0000be68 add r4, pc | r4 = 0x17d36;
0x0000be6a adds r4, 0x88 | r4 += 0x88;
0x0000be6c mov r0, r4 | r0 = r4;
0x0000be6e ldr r3, [r3] | r3 = *(0x17d22);
0x0000be70 str r3, [sp, 0xc] | var_ch = r3;
0x0000be72 mov.w r3, 0 | r3 = 0;
0x0000be76 str r7, [sp, 8] | var_8h = r7;
0x0000be78 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000be7c mov r3, r7 | r3 = r7;
0x0000be7e mov r2, r8 | r2 = r8;
0x0000be80 mov r1, r6 | r1 = r6;
0x0000be82 mov r0, r5 | r0 = r5;
0x0000be84 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0000be88 bl 0x7200 | fcn_00007200 (r0, r1, r2, r3);
0x0000be8c movs r3, 3 | r3 = 3;
0x0000be8e mov r5, r0 | r5 = r0;
0x0000be90 add r2, sp, 8 | r2 += var_8h;
0x0000be92 mov r0, r4 | r0 = r4;
0x0000be94 movw r1, 0x1a3 | r1 = 0x1a3;
0x0000be98 str r5, [sp, 8] | var_8h = r5;
0x0000be9a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000be9e ldr r2, [pc, 0x2c] |
0x0000bea0 ldr r3, [pc, 0x20] | r3 = *(0xbec4);
0x0000bea2 ldr r0, [sp, 8] | r0 = var_8h;
0x0000bea4 add r2, pc | r2 = 0x17d76;
0x0000bea6 ldr r3, [r2, r3] | r3 = *(0x17d76);
0x0000bea8 ldr r2, [r3] | r2 = *(0x17d76);
0x0000beaa ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000beac eors r2, r3 | r2 ^= r3;
0x0000beae mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000beb2 bne 0xbeba |
0x0000beb4 add sp, 0x14 |
0x0000beb6 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x0000beba blx 0x348c | fprintf_chk ()
0x0000bebe nop |
0x0000bec0 cmp r6, 0x34 |
0x0000bec2 movs r2, r0 | r2 = r0;
0x0000bec4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000bec6 movs r0, r0 |
0x0000bec8 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xbed0 */
| #include <stdint.h>
|
; (fcn) fcn.0000bed0 () | void fcn_0000bed0 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x0000bed0 strdlt fp, ip, [r7], r0 | __asm ("strdlt fp, ip, [r7], r0");
0x0000bed4 str r1, [sp, 0xc] | var_ch = r1;
0x0000bed6 mov r6, r0 | r6 = r0;
0x0000bed8 movs r7, 0 | r7 = 0;
0x0000beda movs r2, 3 | r2 = 3;
0x0000bedc ldr r1, [pc, 0x7c] |
0x0000bede ldr r4, [pc, 0x80] |
0x0000bee0 ldr r3, [pc, 0x80] | r3 = *(0xbf64);
0x0000bee2 add r1, pc | r1 = 0x17e42;
0x0000bee4 ldr r5, [pc, 0x80] |
0x0000bee6 add r4, pc | r4 = 0x17e4c;
0x0000bee8 ldr r3, [r1, r3] |
0x0000beea adds r4, 0xa4 | r4 += 0xa4;
0x0000beec mov.w r1, 0x1b4 | r1 = 0x1b4;
0x0000bef0 mov r0, r4 | r0 = r4;
0x0000bef2 add r5, pc | r5 = 0x17e5e;
0x0000bef4 ldr r3, [r3] | r3 = *(0x17e42);
0x0000bef6 str r3, [sp, 0x14] | var_14h = r3;
0x0000bef8 mov.w r3, 0 | r3 = 0;
0x0000befc str r7, [sp, 0x10] | var_10h = r7;
0x0000befe bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000bf02 ldr r3, [pc, 0x68] | r3 = *(0xbf6e);
0x0000bf04 add r1, sp, 0xc | r1 += var_ch;
0x0000bf06 ldr r2, [r5, r3] | r2 = *(0x17e5e);
0x0000bf08 ldr r3, [pc, 0x64] | r3 = *(0xbf70);
0x0000bf0a ldr r3, [r5, r3] |
0x0000bf0c ldr r3, [r3] | r3 = *(0x17e5e);
0x0000bf0e ldr r0, [r3, 4] | r0 = *(0x17e62);
0x0000bf10 bl 0xd6c0 | fcn_0000d6c0 (r0, r1, r2);
0x0000bf14 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0000bf16 mov r2, r7 | r2 = r7;
0x0000bf18 str r3, [sp, 4] | var_4h = r3;
0x0000bf1a ldr r1, [r0, 8] |
0x0000bf1c movs r0, 4 | r0 = 4;
0x0000bf1e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000bf20 ldr r1, [r1] | r1 = *(0x17e6a);
0x0000bf22 str r1, [sp] | *(sp) = r1;
0x0000bf24 movs r1, 0x18 | r1 = 0x18;
0x0000bf26 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000bf2a mov r0, r6 | r0 = r6;
0x0000bf2c bl 0x6288 | fcn_00006288 (r0);
0x0000bf30 movs r3, 3 | r3 = 3;
0x0000bf32 add r2, sp, 0x10 | r2 += var_10h;
0x0000bf34 mov r0, r4 | r0 = r4;
0x0000bf36 mov.w r1, 0x1b8 | r1 = 0x1b8;
0x0000bf3a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000bf3e ldr r2, [pc, 0x34] |
0x0000bf40 ldr r3, [pc, 0x20] | r3 = *(0xbf64);
0x0000bf42 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000bf44 add r2, pc | r2 = 0x17ebe;
0x0000bf46 ldr r3, [r2, r3] | r3 = *(0x17ebe);
0x0000bf48 ldr r2, [r3] | r2 = *(0x17ebe);
0x0000bf4a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000bf4c eors r2, r3 | r2 ^= r3;
0x0000bf4e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000bf52 bne 0xbf58 |
0x0000bf54 add sp, 0x1c |
0x0000bf56 pop {r4, r5, r6, r7, pc} |
| }
0x0000bf58 blx 0x348c | fprintf_chk ()
0x0000bf5c cmp r5, 0xae |
0x0000bf5e movs r2, r0 | r2 = r0;
0x0000bf60 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xbf78 */
| #include <stdint.h>
|
; (fcn) fcn.0000bf78 () | void fcn_0000bf78 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x0000bf78 invalid |
0x0000bf7c ldr.w lr, [pc, 0x70] |
0x0000bf80 sub sp, 8 |
0x0000bf82 movs r1, 0xa9 | r1 = 0xa9;
0x0000bf84 movs r3, 0 | r3 = 0;
0x0000bf86 ldr.w ip, [pc, 0x6c] |
0x0000bf8a movs r2, 3 | r2 = 3;
0x0000bf8c add lr, pc | lr += pc;
0x0000bf8e ldr r0, [pc, 0x68] |
0x0000bf90 ldr.w ip, [lr, ip] | ip = *((lr + ip));
0x0000bf94 add r0, pc | r0 = 0x17f92;
0x0000bf96 ldr.w ip, [ip] | ip = *(0xbff6);
0x0000bf9a str.w ip, [sp, 4] | __asm ("str.w ip, [var_4h]");
0x0000bf9e mov.w ip, 0 |
0x0000bfa2 str r3, [sp] | *(sp) = r3;
0x0000bfa4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000bfa8 mov.w r1, 0x1e0 | r1 = 0x1e0;
0x0000bfac mov r0, r4 | r0 = r4;
0x0000bfae blx 0x2f34 | r0 = mkdir ();
| if (r0 != 0) {
0x0000bfb2 cbz r0, 0xbfc4 |
0x0000bfb4 blx 0x3738 | r0 = fdelt_chk ();
0x0000bfb8 ldr r3, [r0] | r3 = *(r0);
0x0000bfba cmp r3, 0x11 |
0x0000bfbc itt ne |
| if (r3 == 0x11) {
0x0000bfbe mvnne r3, 1 | r3 = ~1;
| }
| if (r3 == 0x11) {
0x0000bfc2 str r3, [sp] | *(sp) = r3;
| goto label_0;
| }
| }
| label_0:
0x0000bfc4 ldr r0, [pc, 0x34] |
0x0000bfc6 movs r3, 3 | r3 = 3;
0x0000bfc8 mov r2, sp | r2 = sp;
0x0000bfca movs r1, 0xba | r1 = 0xba;
0x0000bfcc add r0, pc | r0 = 0x17fcc;
0x0000bfce bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000bfd2 ldr r2, [pc, 0x2c] |
0x0000bfd4 ldr r3, [pc, 0x1c] | r3 = *(0xbff4);
0x0000bfd6 ldr r0, [sp] | r0 = *(sp);
0x0000bfd8 add r2, pc | r2 = 0x17fde;
0x0000bfda ldr r3, [r2, r3] | r3 = *(0x17fde);
0x0000bfdc ldr r2, [r3] | r2 = *(0x17fde);
0x0000bfde ldr r3, [sp, 4] | r3 = var_4h;
0x0000bfe0 eors r2, r3 | r2 ^= r3;
0x0000bfe2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000bfe6 bne 0xbfec |
0x0000bfe8 add sp, 8 |
0x0000bfea pop {r4, pc} |
| }
0x0000bfec blx 0x348c | fprintf_chk ()
0x0000bff0 cmp r5, 4 |
0x0000bff2 movs r2, r0 | r2 = r0;
0x0000bff4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000bff6 movs r0, r0 |
0x0000bff8 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xc404 */
| #include <stdint.h>
|
; (fcn) fcn.0000c404 () | void fcn_0000c404 (int16_t arg1, char * arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_0h_3;
| int32_t var_4h_3;
| int32_t var_4h_4;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_28h;
| int16_t var_74h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_0h_4;
| int32_t var_4h_5;
| int32_t var_4h_6;
| int16_t var_ch;
| char * path;
| int16_t var_14h_3;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_48h;
| int32_t var_0h_5;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x0000c404 andhs r4, r3, 0xdc00 | r4 = r3 & 0xdc00;
| }
0x0000c408 push {r4, r5, r6, r7, lr} |
0x0000c40a mov r6, r1 | r6 = r1;
0x0000c40c ldr r1, [pc, 0xd8] |
0x0000c40e mov r5, r0 | r5 = r0;
0x0000c410 add r3, pc | r3 += pc;
0x0000c412 sub sp, 0x1c |
0x0000c414 add.w r0, r3, 0x1c | r0 = r3 + 0x1c;
0x0000c416 movs r4, r3 | r4 = r3;
0x0000c418 ldr r3, [pc, 0xd0] | r3 = *(0xc4ec);
0x0000c41a add r1, pc | r1 = 0x18906;
0x0000c41c movs r4, 0 | r4 = 0;
0x0000c41e ldr r3, [r1, r3] |
0x0000c420 movw r1, 0x149 | r1 = 0x149;
0x0000c424 ldr r3, [r3] | r3 = *(0x18906);
0x0000c426 str r3, [sp, 0x14] | var_14h = r3;
0x0000c428 mov.w r3, 0 | r3 = 0;
0x0000c42c str r4, [sp, 0x10] | var_10h = r4;
0x0000c42e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000c430 invalid |
| if (r4 == 0) {
0x0000c434 beq 0xc4c2 | goto label_8;
| }
0x0000c436 mov r0, r5 | r0 = r5;
0x0000c438 blx 0x3258 | r0 = unlink (r0);
0x0000c43c mov r4, r0 | r4 = r0;
0x0000c43e mov r0, r6 | r0 = r6;
0x0000c440 blx 0x3258 | r0 = unlink (r0);
0x0000c444 add r4, r0 | r4 += r0;
0x0000c446 ldr r0, [pc, 0xa8] |
0x0000c448 adds r4, 6 | r4 += 6;
0x0000c44a movw r1, 0x153 | r1 = 0x153;
0x0000c44e mov r2, r4 | r2 = r4;
0x0000c450 add r0, pc | r0 = 0x18946;
0x0000c452 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000c456 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x0000c458 cbz r0, 0xc4ba | goto label_9;
| }
0x0000c45a ldr r3, [pc, 0x98] |
0x0000c45c movs r2, 1 | r2 = 1;
0x0000c45e ldr r1, [pc, 0x98] |
0x0000c460 str r6, [sp, 8] | var_8h = r6;
0x0000c462 add r3, pc | r3 = 0x1895c;
0x0000c464 add r1, pc | r1 = 0x18962;
0x0000c466 strd r3, r5, [sp] | __asm ("strd r3, r5, [sp]");
0x0000c46a str r1, [sp, 0xc] | var_ch_2 = r1;
0x0000c46c mov.w r3, -1 | r3 = -1;
0x0000c470 mov r1, r4 | r1 = r4;
0x0000c472 blx 0x3378 | r0 = shutdown ();
0x0000c476 cmp r0, r4 |
| if (r0 <= r4) {
0x0000c478 blo 0xc4ca | goto label_10;
| }
| label_2:
0x0000c47a mvn r3, 1 | r3 = ~1;
0x0000c47e str r3, [sp, 0x10] | var_10h = r3;
| label_1:
0x0000c480 ldr r0, [pc, 0x78] |
0x0000c482 mov r2, r7 | r2 = r7;
0x0000c484 movw r1, 0x169 | r1 = 0x169;
0x0000c488 add r0, pc | r0 = 0x18988;
0x0000c48a bl 0x10194 | fcn_00010194 (r0, r1, r2);
| do {
| label_0:
0x0000c48e ldr r0, [pc, 0x70] |
0x0000c490 movs r3, 3 | r3 = 3;
0x0000c492 add r2, sp, 0x10 | r2 += var_10h;
0x0000c494 movw r1, 0x16b | r1 = 0x16b;
0x0000c498 add r0, pc | r0 = 0x1899e;
0x0000c49a adds r0, 0x1c | r0 += 0x1c;
0x0000c49c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000c4a0 ldr r2, [pc, 0x60] |
0x0000c4a2 ldr r3, [pc, 0x48] | r3 = *(0xc4ee);
0x0000c4a4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000c4a6 add r2, pc | r2 = 0x189ae;
0x0000c4a8 ldr r3, [r2, r3] | r3 = *(0x189ae);
0x0000c4aa ldr r2, [r3] | r2 = *(0x189ae);
0x0000c4ac ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000c4ae eors r2, r3 | r2 ^= r3;
0x0000c4b0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000c4b4 bne 0xc4e0 | goto label_11;
| }
0x0000c4b6 add sp, 0x1c |
0x0000c4b8 pop {r4, r5, r6, r7, pc} |
| label_9:
0x0000c4ba mvn r3, 0x62 | r3 = ~0x62;
0x0000c4be str r3, [sp, 0x10] | var_10h = r3;
0x0000c4c0 b 0xc48e |
| } while (1);
| label_8:
0x0000c4c2 mvn r3, 1 | r3 = ~1;
0x0000c4c6 str r3, [sp, 0x10] | var_10h = r3;
0x0000c4c8 b 0xc48e | goto label_0;
| label_10:
0x0000c4ca mov r0, r7 | r0 = r7;
0x0000c4cc blx 0x3270 | r0 = SHA1_Update ();
0x0000c4d0 cmp r0, 0 |
| if (r0 == 0) {
0x0000c4d2 beq 0xc480 | goto label_1;
| }
0x0000c4d4 blx 0x3738 | r0 = fdelt_chk ();
0x0000c4d8 ldr r3, [r0] | r3 = *(r0);
0x0000c4da cmp r3, 2 |
| if (r3 != 2) {
0x0000c4dc bne 0xc47a | goto label_2;
| }
0x0000c4de b 0xc480 | goto label_1;
| label_11:
0x0000c4e0 blx 0x348c | fprintf_chk ()
0x0000c4e4 cdp p0, 0, c0, c0, c0, 0 | __asm ("cdp p0, 0, c0, c0, c0, 0");
0x0000c4e8 cmp r0, 0x76 |
0x0000c4ea movs r2, r0 | r2 = r0;
0x0000c4ec lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000c4ee movs r0, r0 |
0x0000c4f0 stcl p0, c0, [r8, -0] | __asm ("stcl p0, c0, [r8, -0]");
0x0000c4f4 ldc p0, c0, [r6] | __asm ("ldc p0, c0, [r6]");
0x0000c4f8 stc p0, c0, [ip] | __asm ("stc p0, c0, [ip]");
0x0000c4fc ldc p0, c0, [r0, -0] | __asm ("ldc p0, c0, [r0, -0]");
0x0000c500 ldcl p0, c0, [r8, -0]! | __asm ("ldcl p0, c0, [r8, -0]!");
0x0000c504 movs r7, 0xea | r7 = 0xea;
0x0000c506 movs r2, r0 | r2 = r0;
0x0000c508 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000c50c mov r8, r2 | r8 = r2;
0x0000c50e ldr r2, [pc, 0x118] |
0x0000c510 mov r5, r3 | r5 = r3;
0x0000c512 mov r6, r0 | r6 = r0;
0x0000c514 sub sp, 0x24 |
0x0000c516 ldr r3, [pc, 0x114] | r3 = *(0xc62e);
0x0000c518 movs r4, 0 | r4 = 0;
0x0000c51a ldr r0, [pc, 0x114] |
0x0000c51c add r2, pc | r2 = 0x18b4a;
0x0000c51e str r1, [sp, 0x10] | path = r1;
0x0000c520 movs r1, 0xce | r1 = 0xce;
0x0000c522 ldr r3, [r2, r3] |
0x0000c524 movs r2, 3 | r2 = 3;
0x0000c526 add r0, pc | r0 = 0x18b5c;
0x0000c528 ldr r7, [sp, 0x48] | r7 = var_48h;
0x0000c52a adds r0, 0x28 | r0 += 0x28;
0x0000c52c ldr r3, [r3] | r3 = *(0x18b4a);
0x0000c52e str r3, [sp, 0x1c] | var_1ch = r3;
0x0000c530 mov.w r3, 0 | r3 = 0;
0x0000c534 str r4, [sp, 0x18] | var_18h = r4;
0x0000c536 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000c53a cmp r6, 0 |
| if (r6 == 0) {
0x0000c53c beq 0xc614 | goto label_12;
| }
0x0000c53e mov r0, r6 | r0 = r6;
0x0000c540 blx 0x3258 | r0 = unlink (r0);
0x0000c544 mov sl, r0 | sl = r0;
0x0000c546 ldr r0, [sp, 0x10] | r0 = path;
0x0000c548 blx 0x3258 | r0 = unlink (r0);
0x0000c54c add sl, r0 | sl += r0;
0x0000c54e ldr r0, [pc, 0xe4] |
0x0000c550 add.w sl, sl, 6 | sl += 6;
0x0000c554 movs r1, 0xd7 | r1 = 0xd7;
0x0000c556 mov r2, sl | r2 = sl;
0x0000c558 add r0, pc | r0 = 0x18b92;
0x0000c55a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000c55e str r0, [sp, 0x14] | var_14h_3 = r0;
0x0000c560 cmp r0, 0 |
| if (r0 == 0) {
0x0000c562 beq 0xc5e2 | goto label_13;
| }
0x0000c564 ldr r3, [sp, 0x10] | r3 = path;
0x0000c566 movs r2, 1 | r2 = 1;
0x0000c568 mov r1, sl | r1 = sl;
0x0000c56a strd r6, r3, [sp, 4] | __asm ("strd r6, r3, [var_4h_5]");
0x0000c56e ldr r3, [pc, 0xc8] |
0x0000c570 add r3, pc | r3 = 0x18bae;
0x0000c572 str r3, [sp, 0xc] | var_ch = r3;
0x0000c574 ldr r3, [pc, 0xc4] |
0x0000c576 add r3, pc | r3 = 0x18bb6;
0x0000c578 str r3, [sp] | *(sp) = r3;
0x0000c57a mov.w r3, -1 | r3 = -1;
0x0000c57e blx 0x3378 | r0 = shutdown ();
0x0000c582 cmp r0, sl |
| if (r0 >= sl) {
0x0000c584 bhs 0xc5ce | goto label_14;
| }
0x0000c586 ldr r1, [pc, 0xb8] |
0x0000c588 ldr r0, [sp, 0x14] | r0 = var_14h_3;
0x0000c58a add r1, pc | r1 = 0x18bd0;
0x0000c58c blx 0x30c0 | r0 = sem_getvalue ();
0x0000c590 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0000c592 cbz r0, 0xc5ce | goto label_14;
| }
0x0000c594 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0000c598 ble 0xc61c | goto label_15;
| }
0x0000c59a subs r7, 4 | r7 -= 4;
0x0000c59c subs r5, 4 | r5 -= 4;
0x0000c59e mov fp, r4 |
0x0000c5a0 mov sl, r4 | sl = r4;
| do {
0x0000c5a2 ldr r2, [r7, 4]! | r2 = *((r7 += 4));
0x0000c5a6 adds r4, 1 | r4++;
0x0000c5a8 ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x0000c5ac mov r3, sb | r3 = sb;
0x0000c5ae movs r1, 1 | r1 = 1;
0x0000c5b0 add fp, r2 |
0x0000c5b2 blx 0x33e4 | closedir ();
0x0000c5b6 cmp r8, r4 |
0x0000c5b8 add sl, r0 | sl += r0;
0x0000c5ba bne 0xc5a2 |
| } while (r8 != r4);
0x0000c5bc mov r0, sb | r0 = sb;
0x0000c5be blx 0x3038 | fcn_00003038 ();
0x0000c5c2 cmp fp, sl |
| if (fp != sl) {
0x0000c5c4 beq 0xc5d4 |
0x0000c5c6 ldr r1, [sp, 0x10] | r1 = path;
0x0000c5c8 mov r0, r6 | r0 = r6;
0x0000c5ca bl 0xc404 | fcn_0000c404 (r0, r1);
0x0000c5cc invalid |
| label_14:
0x0000c5ce mvn r3, 1 | r3 = ~1;
0x0000c5d2 str r3, [sp, 0x18] | var_18h = r3;
| }
| label_3:
0x0000c5d4 ldr r0, [pc, 0x6c] |
0x0000c5d6 movs r1, 0xf7 | r1 = 0xf7;
0x0000c5d8 ldr r2, [sp, 0x14] | r2 = var_14h_3;
0x0000c5da add r0, pc | r0 = 0x18c22;
0x0000c5dc bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000c5e0 b 0xc5e8 | goto label_16;
| label_13:
0x0000c5e2 mvn r3, 0x62 | r3 = ~0x62;
0x0000c5e6 str r3, [sp, 0x18] | var_18h = r3;
| do {
| label_16:
0x0000c5e8 ldr r0, [pc, 0x5c] |
0x0000c5ea movs r3, 3 | r3 = 3;
0x0000c5ec add r2, sp, 0x18 | r2 += var_18h;
0x0000c5ee movs r1, 0xf9 | r1 = 0xf9;
0x0000c5f0 add r0, pc | r0 = 0x18c3c;
0x0000c5f2 adds r0, 0x28 | r0 += 0x28;
0x0000c5f4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000c5f8 ldr r2, [pc, 0x50] |
0x0000c5fa ldr r3, [pc, 0x30] | r3 = *(0xc62e);
0x0000c5fc ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000c5fe add r2, pc | r2 = 0x18c4e;
0x0000c600 ldr r3, [r2, r3] | r3 = *(0x18c4e);
0x0000c602 ldr r2, [r3] | r2 = *(0x18c4e);
0x0000c604 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000c606 eors r2, r3 | r2 ^= r3;
0x0000c608 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000c60c bne 0xc622 | goto label_17;
| }
0x0000c60e add sp, 0x24 |
0x0000c610 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x0000c614 mvn r3, 1 | r3 = ~1;
0x0000c618 str r3, [sp, 0x18] | var_18h = r3;
0x0000c61a b 0xc5e8 |
| } while (1);
| label_15:
0x0000c61c blx 0x3038 | fcn_00003038 ();
0x0000c620 b 0xc5d4 | goto label_3;
| label_17:
0x0000c622 blx 0x348c | fprintf_chk ()
0x0000c626 nop |
0x0000c628 movs r7, 0x74 | r7 = 0x74;
0x0000c62a movs r2, r0 | r2 = r0;
0x0000c62c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000c62e movs r0, r0 |
0x0000c630 stcl p0, c0, [sl], 0 | __asm ("stcl p0, c0, [sl], 0");
0x0000c634 mcrr p0, 0, r0, r0, c0 | __asm ("mcrr p0, 0, r0, r0, c0");
0x0000c638 stc p0, c0, [r0], {0} | __asm ("stc p0, c0, [r0], {0}");
0x0000c63c stc p0, c0, [r2], {0} | __asm ("stc p0, c0, [r2], {0}");
0x0000c640 ldcl p0, c0, [sl], -0 | __asm ("ldcl p0, c0, [sl], -0");
0x0000c644 subs.w r0, lr, r0 | r0 = lr - r0;
0x0000c648 stc p0, c0, [r0], -0 | __asm ("stc p0, c0, [r0], -0");
0x0000c64c movs r6, 0x92 | r6 = 0x92;
0x0000c64e movs r2, r0 | r2 = r0;
0x0000c650 ldr r3, [pc, 0x94] |
0x0000c652 movs r2, 3 | r2 = 3;
0x0000c654 ldr.w ip, [pc, 0x94] | ip = *(0x0000c6ec);
0x0000c658 mov.w r1, 0x178 | r1 = 0x178;
0x0000c65c push {r4, r5, lr} |
0x0000c65e mov r4, r0 | r4 = r0;
0x0000c660 add r3, pc | r3 = 0x18d4c;
0x0000c662 sub sp, 0xc |
0x0000c664 add.w r0, r3, 0x30 | r0 = r3 + 0x30;
0x0000c668 add ip, pc |
0x0000c66a ldr r3, [pc, 0x84] |
0x0000c66c movs r5, 0 | r5 = 0;
0x0000c66e ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x0000c672 ldr r3, [r3] | r3 = *(0xc6f2);
0x0000c674 str r3, [sp, 4] | var_4h = r3;
0x0000c676 mov.w r3, 0 | r3 = 0;
0x0000c67a str r5, [sp] | *(sp) = r5;
0x0000c67c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
| if (r4 == 0) {
0x0000c680 cbz r4, 0xc6da | goto label_18;
| }
0x0000c682 mov r0, r4 | r0 = r4;
0x0000c684 blx 0x3504 | fcn_00003504 ();
0x0000c686 invalid |
| do {
0x0000c68a ldr r0, [pc, 0x68] |
0x0000c68c mov r2, r4 | r2 = r4;
0x0000c68e mov.w r1, 0x18a | r1 = 0x18a;
0x0000c692 add r0, pc | r0 = 0x18d8c;
0x0000c694 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_4:
0x0000c698 ldr r0, [pc, 0x5c] |
0x0000c69a movs r3, 3 | r3 = 3;
0x0000c69c mov r2, sp | r2 = sp;
0x0000c69e movw r1, 0x18d | r1 = 0x18d;
0x0000c6a2 add r0, pc | r0 = 0x18d9e;
0x0000c6a4 adds r0, 0x30 | r0 += 0x30;
0x0000c6a6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000c6aa ldr r2, [pc, 0x50] |
0x0000c6ac ldr r3, [pc, 0x40] | r3 = *(0xc6f0);
0x0000c6ae ldr r0, [sp] | r0 = *(sp);
0x0000c6b0 add r2, pc | r2 = 0x18db2;
0x0000c6b2 ldr r3, [r2, r3] | r3 = *(0x18db2);
0x0000c6b4 ldr r2, [r3] | r2 = *(0x18db2);
0x0000c6b6 ldr r3, [sp, 4] | r3 = var_4h;
0x0000c6b8 eors r2, r3 | r2 ^= r3;
0x0000c6ba mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000c6be bne 0xc6e2 | goto label_19;
| }
0x0000c6c0 add sp, 0xc |
0x0000c6c2 pop {r4, r5, pc} |
0x0000c6c4 blx 0x3738 | r0 = fdelt_chk ();
0x0000c6c8 ldr r3, [r0] | r3 = *(r0);
0x0000c6ca cmp r3, 2 |
0x0000c6cc it ne |
| if (r3 != 2) {
0x0000c6ce cmpne r3, 0x27 | __asm ("cmpne r3, 0x27");
| }
0x0000c6d0 itt ne |
| if (r3 == 2) {
0x0000c6d2 mvnne r3, 1 | r3 = ~1;
| }
| if (r3 != 2) {
0x0000c6d6 str r3, [sp] | *(sp) = r3;
| }
0x0000c6d8 b 0xc68a |
| } while (1);
| label_18:
0x0000c6da mvn r3, 1 | r3 = ~1;
0x0000c6de str r3, [sp] | *(sp) = r3;
0x0000c6e0 b 0xc698 | goto label_4;
| label_19:
0x0000c6e2 blx 0x348c | fprintf_chk ()
0x0000c6e6 nop |
0x0000c6e8 subs.w r0, r0, r0 | r0 -= r0;
0x0000c6ec movs r6, 0x28 | r6 = 0x28;
0x0000c6ee movs r2, r0 | r2 = r0;
0x0000c6f0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000c6f2 movs r0, r0 |
0x0000c6f4 add.w r0, r6, r0 | r0 = r6 + r0;
0x0000c6f8 sbc.w r0, lr, r0 | __asm ("sbc.w r0, lr, r0");
0x0000c6fc movs r5, 0xe0 | r5 = 0xe0;
0x0000c6fe movs r2, r0 | r2 = r0;
0x0000c700 ldr r3, [pc, 0x154] |
0x0000c702 movs r2, 3 | r2 = 3;
0x0000c704 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000c708 mov r5, r0 | r5 = r0;
0x0000c70a sub sp, 0x7c |
0x0000c70c mvn r0, 1 | r0 = ~1;
0x0000c710 add r3, pc | r3 = 0x18f6c;
0x0000c712 mov sb, r1 | sb = r1;
0x0000c714 ldr r4, [pc, 0x144] |
0x0000c716 mov.w r1, 0x1ec | r1 = 0x1ec;
0x0000c71a str r0, [sp, 0x14] | var_14h_2 = r0;
0x0000c71c add.w r0, r3, 0x3c | r0 = r3 + 0x3c;
0x0000c720 ldr r3, [pc, 0x13c] | r3 = *(0xc860);
0x0000c722 add r4, pc | r4 = 0x18f82;
0x0000c724 ldr r3, [r4, r3] |
0x0000c726 ldr r3, [r3] | r3 = *(0x18f82);
0x0000c728 str r3, [sp, 0x74] | var_74h = r3;
0x0000c72a mov.w r3, 0 | r3 = 0;
0x0000c72c lsls r0, r0, 0xc | r0 <<= 0xc;
0x0000c72e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000c732 mov r0, r5 | r0 = r5;
0x0000c734 blx 0x2f98 | r0 = fcn_00002f98 ();
0x0000c738 cmp r0, 0 |
| if (r0 == 0) {
0x0000c73a beq 0xc7c0 | goto label_20;
| }
0x0000c73c ldr r6, [pc, 0x124] |
0x0000c73e mov r7, r0 | r7 = r0;
0x0000c740 ldr.w r8, [pc, 0x124] |
0x0000c744 add r6, pc | r6 = 0x18fac;
0x0000c746 add r8, pc | r8 = 0x18fb2;
0x0000c748 b 0xc7ae |
| while (r0 != 0) {
0x0000c74a ldr r2, [sp, 0x14] | r2 = var_14h_2;
| if (r2 == 0) {
0x0000c74c cbz r2, 0xc7ba | goto label_5;
| }
0x0000c74e add.w sl, r3, 0xb | sl = r3 + 0xb;
0x0000c752 mov r0, r5 | r0 = r5;
0x0000c754 blx 0x3258 | r0 = unlink (r0);
0x0000c758 mov r4, r0 | r4 = r0;
0x0000c75a mov r0, sl | r0 = sl;
0x0000c75c blx 0x3258 | r0 = unlink (r0);
0x0000c760 add r4, r0 | r4 += r0;
0x0000c762 mov.w r1, 0x1f2 | r1 = 0x1f2;
0x0000c766 adds r4, 2 | r4 += 2;
0x0000c768 mov r0, r6 | r0 = r6;
0x0000c76a mov r2, r4 | r2 = r4;
0x0000c76c bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000c770 mov fp, r0 |
0x0000c772 cmp r0, 0 |
| if (r0 == 0) {
0x0000c774 beq 0xc7ee | goto label_6;
| }
0x0000c776 mov.w r3, -1 | r3 = -1;
0x0000c77a movs r2, 1 | r2 = 1;
0x0000c77c mov r1, r4 | r1 = r4;
0x0000c77e strd r5, sl, [sp, 4] | __asm ("strd r5, sl, [var_4h_3]");
0x0000c782 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000c786 blx 0x3378 | r0 = shutdown ();
0x0000c78a cmp r0, r4 |
| if (r0 >= r4) {
0x0000c78c bhs 0xc7f6 | goto label_21;
| }
0x0000c78e add r1, sp, 0x18 | r1 += var_18h_2;
0x0000c790 mov r0, fp | r0 = fp;
0x0000c792 blx 0x365c | fcn_0000365c ();
0x0000c796 mov r2, fp | r2 = fp;
0x0000c798 mov.w r1, 0x200 | r1 = 0x200;
0x0000c79c mov r0, r6 | r0 = r6;
0x0000c79e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000c7a2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000c7a4 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0000c7a8 cmp.w r3, 0x8000 |
| if (r3 == 0x8000) {
0x0000c7ac beq 0xc80a | goto label_22;
| }
| label_7:
0x0000c7ae mov r0, r7 | r0 = r7;
0x0000c7b0 blx 0x36ec | r0 = fcn_000036ec ();
0x0000c7b4 mov r3, r0 | r3 = r0;
0x0000c7b6 cmp r0, 0 |
0x0000c7b8 bne 0xc74a |
| }
| do {
| label_5:
0x0000c7ba mov r0, r7 | r0 = r7;
0x0000c7bc blx 0x33fc | sem_post ();
| label_20:
0x0000c7c0 ldr r0, [pc, 0xa8] |
0x0000c7c2 movs r3, 3 | r3 = 3;
0x0000c7c4 add r2, sp, 0x14 | r2 += var_14h_2;
0x0000c7c6 movw r1, 0x216 | r1 = 0x216;
0x0000c7ca add r0, pc | r0 = 0x1903a;
0x0000c7cc adds r0, 0x3c | r0 += 0x3c;
0x0000c7ce bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000c7d2 ldr r2, [pc, 0x9c] |
0x0000c7d4 ldr r3, [pc, 0x88] | r3 = *(0xc860);
0x0000c7d6 ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x0000c7d8 add r2, pc | r2 = 0x1904e;
0x0000c7da ldr r3, [r2, r3] | r3 = *(0x1904e);
0x0000c7dc ldr r2, [r3] | r2 = *(0x1904e);
0x0000c7de ldr r3, [sp, 0x74] | r3 = var_74h;
0x0000c7e0 eors r2, r3 | r2 ^= r3;
0x0000c7e2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000c7e6 bne 0xc854 | goto label_23;
| }
0x0000c7e8 add sp, 0x7c |
0x0000c7ea pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x0000c7ee mvn r3, 0x62 | r3 = ~0x62;
0x0000c7f2 str r3, [sp, 0x14] | var_14h_2 = r3;
0x0000c7f4 b 0xc7ba |
| } while (1);
| label_21:
0x0000c7f6 mov r2, fp | r2 = fp;
0x0000c7f8 movw r1, 0x1fb | r1 = 0x1fb;
0x0000c7fc mov r0, r6 | r0 = r6;
0x0000c7fe bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000c802 mvn r3, 1 | r3 = ~1;
0x0000c806 str r3, [sp, 0x14] | var_14h_2 = r3;
0x0000c808 b 0xc7ba | goto label_5;
| label_22:
0x0000c80a mov r0, sl | r0 = sl;
0x0000c80c blx 0x3258 | unlink (r0);
0x0000c810 movw r1, 0x203 | r1 = 0x203;
0x0000c814 adds r2, r0, 1 | r2 = r0 + 1;
0x0000c816 mov r0, r6 | r0 = r6;
0x0000c818 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000c81c mov r4, r0 | r4 = r0;
0x0000c81e cmp r0, 0 |
| if (r0 == 0) {
0x0000c820 beq 0xc7ee | goto label_6;
| }
0x0000c822 mov r1, sl | r1 = sl;
0x0000c824 blx 0x3300 | pthread_cond_destroy ();
0x0000c828 ldr r1, [pc, 0x48] |
0x0000c82a mov r0, r4 | r0 = r4;
0x0000c82c add r1, pc | r1 = 0x190a4;
0x0000c82e blx 0x339c | r0 = select ();
| if (r0 != 0) {
0x0000c832 cbz r0, 0xc838 |
0x0000c834 movs r3, 0 | r3 = 0;
0x0000c836 strb r3, [r0] | *(r0) = r3;
| }
0x0000c838 mov r1, sb | r1 = sb;
0x0000c83a mov r0, r4 | r0 = r4;
0x0000c83c blx 0x372c | r0 = cxa_finalize ();
| if (r0 == 0) {
0x0000c840 cbnz r0, 0xc844 |
0x0000c842 str r0, [sp, 0x14] | var_14h_2 = r0;
| }
0x0000c844 ldr r0, [pc, 0x30] |
0x0000c846 mov r2, r4 | r2 = r4;
0x0000c848 movw r1, 0x20e | r1 = 0x20e;
0x0000c84c add r0, pc | r0 = 0x190c8;
0x0000c84e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000c852 b 0xc7ae | goto label_7;
| label_23:
0x0000c854 blx 0x348c | r0 = fprintf_chk ()
0x0000c858 add.w r0, r0, r0 | r0 += r0;
0x0000c85c movs r5, 0x6e | r5 = 0x6e;
0x0000c85e movs r2, r0 | r2 = r0;
0x0000c860 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000c862 movs r0, r0 |
0x0000c864 orrs.w r0, r4, r0 | r0 = r4 | r0;
0x0000c868 pkhbt r0, r2, r0 | __asm ("pkhbt r0, r2, r0");
0x0000c86c orr.w r0, r6, r0 | r0 = r6 | r0;
0x0000c870 movs r4, 0xb8 | r4 = 0xb8;
0x0000c872 movs r2, r0 | r2 = r0;
0x0000c874 strd r0, r0, [r4] | __asm ("strd r0, r0, [r4]");
0x0000c878 strd r0, r0, [ip, -0x0] | __asm ("strd r0, r0, [ip, -0x0]");
0x0000c87c ldr r3, [pc, 0x70] |
0x0000c87e movs r2, 3 | r2 = 3;
0x0000c880 push {r4, r5, r6, lr} |
0x0000c882 mov r5, r1 | r5 = r1;
0x0000c884 ldr r1, [pc, 0x6c] |
0x0000c886 mov r4, r0 | r4 = r0;
0x0000c888 add r3, pc | r3 = 0x1917c;
0x0000c88a sub sp, 8 |
0x0000c88c add.w r0, r3, 0x4c | r0 = r3 + 0x4c;
0x0000c890 ldr r3, [pc, 0x64] | r3 = *(0xc8f8);
0x0000c892 add r1, pc | r1 = 0x1918a;
0x0000c894 movs r6, 0 | r6 = 0;
0x0000c896 ldr r3, [r1, r3] |
0x0000c898 mov.w r1, 0x19a | r1 = 0x19a;
0x0000c89c ldr r3, [r3] | r3 = *(0x1918a);
0x0000c89e str r3, [sp, 4] | var_4h_2 = r3;
0x0000c8a0 mov.w r3, 0 | r3 = 0;
0x0000c8a4 str r6, [sp] | *(sp) = r6;
0x0000c8a6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
| if (r4 == 0) {
0x0000c8aa cbz r4, 0xc8e4 | goto label_24;
| }
0x0000c8ac mov r0, r4 | r0 = r4;
0x0000c8ae mov r1, r5 | r1 = r5;
0x0000c8b0 bl 0xc700 | r0 = void (*0xc700)(uint32_t, uint32_t) (r0, r1);
0x0000c8b4 mov r4, r0 | r4 = r0;
| do {
0x0000c8b6 ldr r0, [pc, 0x44] |
0x0000c8b8 movs r3, 3 | r3 = 3;
0x0000c8ba mov r2, sp | r2 = sp;
0x0000c8bc mov.w r1, 0x1a8 | r1 = 0x1a8;
0x0000c8c0 str r4, [sp] | *(sp) = r4;
0x0000c8c2 add r0, pc | r0 = 0x191c4;
0x0000c8c4 adds r0, 0x4c | r0 += 0x4c;
0x0000c8c6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000c8ca ldr r2, [pc, 0x34] |
0x0000c8cc ldr r3, [pc, 0x28] | r3 = *(0xc8f8);
0x0000c8ce ldr r0, [sp] | r0 = *(sp);
0x0000c8d0 add r2, pc | r2 = 0x191d6;
0x0000c8d2 ldr r3, [r2, r3] | r3 = *(0x191d6);
0x0000c8d4 ldr r2, [r3] | r2 = *(0x191d6);
0x0000c8d6 ldr r3, [sp, 4] | r3 = var_4h_2;
0x0000c8d8 eors r2, r3 | r2 ^= r3;
0x0000c8da mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000c8de bne 0xc8ea | goto label_25;
| }
0x0000c8e0 add sp, 8 |
0x0000c8e2 pop {r4, r5, r6, pc} |
| label_24:
0x0000c8e4 mvn r4, 1 | r4 = ~1;
0x0000c8e8 b 0xc8b6 |
| } while (1);
| label_25:
0x0000c8ea blx 0x348c | fprintf_chk ()
0x0000c8ee nop |
0x0000c8f0 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xca64 */
| #include <stdint.h>
|
; (fcn) fcn.0000ca64 () | void fcn_0000ca64 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_40h;
| int16_t var_8ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000ca64 push {r5, r7, r8, sb, fp, lr} |
0x0000ca68 ldr r7, [pc, 0x3c0] | r7 = *(0xce2c);
0x0000ca6a mov r5, r2 | r5 = r2;
0x0000ca6c sub sp, 0x94 |
0x0000ca6e mov r6, r1 | r6 = r1;
0x0000ca70 add r3, pc | r3 += pc;
0x0000ca72 mov r7, r0 | r7 = r0;
0x0000ca74 strd r6, r5, [sp, 0x18] | __asm ("strd r6, r5, [var_1ch]");
0x0000ca78 add.w r0, r3, 0x74 | r0 = r3 + 0x74;
0x0000ca7c ldr r5, [pc, 0x26c] |
0x0000ca7e movw r1, 0x313 | r1 = 0x313;
0x0000ca82 ldr r3, [pc, 0x26c] | r3 = *(0xccf2);
0x0000ca84 movs r2, 3 | r2 = 3;
0x0000ca86 movs r4, 0 | r4 = 0;
0x0000ca88 add r5, pc | r5 = 0x19778;
0x0000ca8a ldr r3, [r5, r3] |
0x0000ca8c ldr r3, [r3] | r3 = *(0x19778);
0x0000ca8e str r3, [sp, 0x8c] | var_8ch = r3;
0x0000ca90 mov.w r3, 0 | r3 = 0;
0x0000ca94 str r4, [sp, 0x2c] | var_2ch = r4;
0x0000ca96 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000ca9a mov r0, r7 | r0 = r7;
0x0000ca9c blx 0x2f98 | r0 = fcn_00002f98 ();
0x0000caa0 cmp r0, 0 |
| if (r0 == 0) {
0x0000caa2 beq.w 0xcc84 | goto label_5;
| }
0x0000caa6 ldr.w sb, [pc, 0x24c] |
0x0000caaa mov r8, r0 | r8 = r0;
0x0000caac ldr.w sl, [pc, 0x248] |
0x0000cab0 ldr.w fp, [pc, 0x248] |
0x0000cab4 add sb, pc | sb = 0x197ae;
0x0000cab6 str r4, [sp, 0x14] | var_14h = r4;
0x0000cab8 add sl, pc | sl = 0x197b4;
0x0000caba add fp, pc | fp = 0x197ba;
0x0000cabc b 0xcb22 |
| while (r0 != 0) {
0x0000cabe mov r0, r7 | r0 = r7;
0x0000cac0 adds r5, 0xb | r5 += 0xb;
0x0000cac2 blx 0x3258 | r0 = unlink (r0);
0x0000cac6 mov r4, r0 | r4 = r0;
0x0000cac8 mov r0, r5 | r0 = r5;
0x0000caca blx 0x3258 | r0 = unlink (r0);
0x0000cace add r4, r0 | r4 += r0;
0x0000cad0 movw r1, 0x31a | r1 = 0x31a;
0x0000cad4 adds r4, 2 | r4 += 2;
0x0000cad6 mov r0, sb | r0 = sb;
0x0000cad8 mov r2, r4 | r2 = r4;
0x0000cada bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000cade mov r6, r0 | r6 = r0;
0x0000cae0 cmp r0, 0 |
| if (r0 == 0) {
0x0000cae2 beq 0xcb52 | goto label_6;
| }
0x0000cae4 mov.w r3, -1 | r3 = -1;
0x0000cae8 movs r2, 1 | r2 = 1;
0x0000caea mov r1, r4 | r1 = r4;
0x0000caec str r5, [sp, 8] | var_8h = r5;
0x0000caee strd sl, r7, [sp] | __asm ("strd sl, r7, [sp]");
0x0000caf2 blx 0x3378 | r0 = shutdown ();
0x0000caf6 cmp r0, r4 |
| if (r0 >= r4) {
0x0000caf8 bhs 0xcb8e | goto label_7;
| }
0x0000cafa add r1, sp, 0x30 | r1 += var_30h;
0x0000cafc mov r0, r6 | r0 = r6;
0x0000cafe blx 0x365c | r0 = fcn_0000365c ();
| if (r0 == 0) {
0x0000cb02 cbnz r0, 0xcb16 |
0x0000cb04 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0000cb06 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0000cb0a cmp.w r3, 0x8000 |
0x0000cb0e ittt eq |
| if (r3 != 0x8000) {
0x0000cb10 ldreq r3, [sp, 0x14] | r3 = var_14h;
| }
| if (r3 != 0x8000) {
0x0000cb12 addeq r3, 1 | r3++;
| }
| if (r3 == 0x8000) {
0x0000cb14 streq r3, [sp, 0x14] | var_14h = r3;
| goto label_8;
| }
| }
| label_8:
0x0000cb16 mov r2, r6 | r2 = r6;
0x0000cb18 movw r1, 0x329 | r1 = 0x329;
0x0000cb1c mov r0, fp | r0 = fp;
0x0000cb1e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000cb22 mov r0, r8 | r0 = r8;
0x0000cb24 blx 0x36ec | r0 = fcn_000036ec ();
0x0000cb28 mov r5, r0 | r5 = r0;
0x0000cb2a cmp r0, 0 |
0x0000cb2c bne 0xcabe |
| }
0x0000cb2e mov r0, r8 | r0 = r8;
0x0000cb30 blx 0x33fc | sem_post ();
0x0000cb34 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000cb36 cmp r3, 0 |
| if (r3 != 0) {
0x0000cb38 bne 0xcba2 | goto label_9;
| }
0x0000cb3a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0000cb3c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000cb3e str r3, [r2] | *(r2) = r3;
0x0000cb40 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0000cb42 str r3, [r2] | *(r2) = r3;
0x0000cb44 b 0xcb5e | goto label_2;
| label_0:
0x0000cb46 mov r2, fp | r2 = fp;
0x0000cb48 movw r1, 0x346 | r1 = 0x346;
0x0000cb4c mov r0, sb | r0 = sb;
0x0000cb4e bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_6:
0x0000cb52 mvn r3, 0x62 | r3 = ~0x62;
0x0000cb56 str r3, [sp, 0x2c] | var_2ch = r3;
| do {
| label_3:
0x0000cb58 mov r0, r8 | r0 = r8;
0x0000cb5a blx 0x33fc | sem_post ();
| label_2:
0x0000cb5e ldr r0, [pc, 0x1a0] |
0x0000cb60 movs r3, 3 | r3 = 3;
0x0000cb62 add r2, sp, 0x2c | r2 += var_2ch;
0x0000cb64 mov.w r1, 0x370 | r1 = 0x370;
0x0000cb68 add r0, pc | r0 = 0x1986e;
0x0000cb6a adds r0, 0x74 | r0 += 0x74;
0x0000cb6c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000cb70 ldr r2, [pc, 0x190] |
0x0000cb72 ldr r3, [pc, 0x17c] | r3 = *(0xccf2);
0x0000cb74 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0000cb76 add r2, pc | r2 = 0x1987e;
0x0000cb78 ldr r3, [r2, r3] | r3 = *(0x1987e);
0x0000cb7a ldr r2, [r3] | r2 = *(0x1987e);
0x0000cb7c ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0000cb7e eors r2, r3 | r2 ^= r3;
0x0000cb80 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000cb84 bne.w 0xcce2 | goto label_10;
| }
0x0000cb88 add sp, 0x94 |
0x0000cb8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0000cb8e mov r2, r6 | r2 = r6;
0x0000cb90 movw r1, 0x323 | r1 = 0x323;
0x0000cb94 mov r0, sb | r0 = sb;
0x0000cb96 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000cb9a mvn r3, 1 | r3 = ~1;
0x0000cb9e str r3, [sp, 0x2c] | var_2ch = r3;
0x0000cba0 b 0xcb58 |
| } while (1);
| label_9:
0x0000cba2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000cba4 movw r1, 0x335 | r1 = 0x335;
0x0000cba8 ldr r0, [pc, 0x15c] |
0x0000cbaa lsls r2, r3, 2 | r2 = r3 << 2;
0x0000cbac add r0, pc | r0 = 0x198b8;
0x0000cbae bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000cbb2 mov fp, r0 |
0x0000cbb4 cmp r0, 0 |
| if (r0 == 0) {
0x0000cbb6 beq 0xcc8c | goto label_11;
| }
0x0000cbb8 mov r0, r7 | r0 = r7;
0x0000cbba blx 0x2f98 | r0 = fcn_00002f98 ();
0x0000cbbe mov r8, r0 | r8 = r0;
0x0000cbc0 cmp r0, 0 |
| if (r0 == 0) {
0x0000cbc2 beq 0xcc84 | goto label_5;
| }
0x0000cbc4 ldr r3, [pc, 0x144] |
0x0000cbc6 ldr.w sb, [pc, 0x148] |
0x0000cbca ldr.w sl, [pc, 0x148] |
0x0000cbce add r3, pc | r3 = 0x198de;
0x0000cbd0 str r5, [sp, 0x20] | var_20h = r5;
0x0000cbd2 add sb, pc | sb = "MQTTProtocol_createMessage";
0x0000cbd4 str r3, [sp, 0x24] | var_24h = r3;
0x0000cbd6 add sl, pc | sl = 0x198f0;
0x0000cbd8 b 0xcbe8 | goto label_12;
| label_1:
0x0000cbda ldr r0, [pc, 0x13c] |
0x0000cbdc mov r2, r6 | r2 = r6;
0x0000cbde mov.w r1, 0x360 | r1 = 0x360;
0x0000cbe2 add r0, pc | r0 = 0x19900;
0x0000cbe4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_12:
0x0000cbe8 mov r0, r8 | r0 = r8;
0x0000cbea blx 0x36ec | r0 = fcn_000036ec ();
0x0000cbee cmp r0, 0 |
| if (r0 == 0) {
0x0000cbf0 beq 0xcc94 | goto label_13;
| }
0x0000cbf2 add.w r5, r0, 0xb | r5 = r0 + 0xb;
0x0000cbf6 mov r0, r7 | r0 = r7;
0x0000cbf8 blx 0x3258 | r0 = unlink (r0);
0x0000cbfc mov r4, r0 | r4 = r0;
0x0000cbfe mov r0, r5 | r0 = r5;
0x0000cc00 blx 0x3258 | unlink (r0);
0x0000cc02 invalid |
0x0000cc06 movw r1, 0x342 | r1 = 0x342;
0x0000cc0a adds r4, 2 | r4 += 2;
0x0000cc0c mov r0, sb | r0 = sb;
0x0000cc0e mov r2, r4 | r2 = r4;
0x0000cc10 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000cc14 mov r6, r0 | r6 = r0;
0x0000cc16 cmp r0, 0 |
| if (r0 == 0) {
0x0000cc18 beq 0xcb46 | goto label_0;
| }
0x0000cc1a mov.w r3, -1 | r3 = -1;
0x0000cc1e movs r2, 1 | r2 = 1;
0x0000cc20 mov r1, r4 | r1 = r4;
0x0000cc22 strd r7, r5, [sp, 4] | __asm ("strd r7, r5, [var_8h]");
0x0000cc26 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0000cc2a blx 0x3378 | r0 = shutdown ();
| label_4:
0x0000cc2c sub.w r2, r6, r0, asr 18 | r2 = r6 - (r0 >> 18);
| if (r2 >= 1) {
0x0000cc30 bhs 0xcca2 | goto label_14;
| }
0x0000cc32 add r1, sp, 0x30 | r1 += var_30h;
0x0000cc34 mov r0, r6 | r0 = r6;
0x0000cc36 blx 0x365c | r0 = fcn_0000365c ();
0x0000cc3a mov r4, r0 | r4 = r0;
0x0000cc3c cmp r0, 0 |
| if (r0 != 0) {
0x0000cc3e bne 0xcbda | goto label_1;
| }
0x0000cc40 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0000cc42 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0000cc46 cmp.w r3, 0x8000 |
| if (r3 != 0x8000) {
0x0000cc4a bne 0xcbda | goto label_1;
| }
0x0000cc4c mov r0, r5 | r0 = r5;
0x0000cc4e blx 0x3258 | unlink (r0);
0x0000cc52 movw r1, 0x353 | r1 = 0x353;
0x0000cc54 adds r1, 0x53 | r1 += 0x53;
0x0000cc56 adds r2, r0, 1 | r2 = r0 + 1;
0x0000cc58 mov r0, sb | r0 = sb;
0x0000cc5a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000cc5e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0000cc60 str.w r0, [fp, r2, lsl 2] | __asm ("str.w r0, [fp, r2, lsl 2]");
| if (r0 != 0) {
0x0000cc64 cbz r0, 0xccc2 |
0x0000cc66 mov r1, r5 | r1 = r5;
0x0000cc68 blx 0x3300 | pthread_cond_destroy ();
0x0000cc6c ldrd r3, r1, [sp, 0x20] | __asm ("ldrd r3, r1, [var_20h]");
0x0000cc70 ldr.w r0, [fp, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((fp + offset_0));
0x0000cc74 blx 0x339c | r0 = select ();
| if (r0 != 0) {
0x0000cc78 cbz r0, 0xcc7c |
0x0000cc7a strb r4, [r0] | *(r0) = r4;
| }
0x0000cc7c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0000cc7e adds r3, 1 | r3++;
0x0000cc80 str r3, [sp, 0x20] | var_20h = r3;
0x0000cc82 b 0xcbda | goto label_1;
| label_5:
0x0000cc84 mvn r3, 1 | r3 = ~1;
0x0000cc88 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000cc8a b 0xcb5e | goto label_2;
| label_11:
0x0000cc8c mvn r3, 0x62 | r3 = ~0x62;
0x0000cc90 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000cc92 b 0xcb5e | goto label_2;
| label_13:
0x0000cc94 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000cc96 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000cc98 str r2, [r3] | *(r3) = r2;
0x0000cc9a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000cc9c str.w fp, [r3] | __asm ("str.w fp, [r3]");
0x0000cca0 b 0xcb58 | goto label_3;
| label_14:
0x0000cca2 mov.w r1, 0x34c | r1 = 0x34c;
0x0000cca6 mov r2, r6 | r2 = r6;
0x0000cca8 mov r0, sb | r0 = sb;
0x0000ccaa bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ccae mov r2, fp | r2 = fp;
0x0000ccb0 movw r1, 0x34d | r1 = 0x34d;
0x0000ccb4 mov r0, sb | r0 = sb;
0x0000ccb6 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ccba mvn r3, 1 | r3 = ~1;
0x0000ccbe str r3, [sp, 0x2c] | var_2ch = r3;
0x0000ccc0 b 0xcb58 | goto label_3;
| }
0x0000ccc2 movw r1, 0x355 | r1 = 0x355;
0x0000ccc6 mov r2, r6 | r2 = r6;
0x0000ccc8 mov r0, sb | r0 = sb;
0x0000ccca bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ccce mov r2, fp | r2 = fp;
0x0000ccd0 movw r1, 0x356 | r1 = 0x356;
0x0000ccd4 mov r0, sb | r0 = sb;
0x0000ccd6 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ccda mvn r3, 0x62 | r3 = ~0x62;
0x0000ccde str r3, [sp, 0x2c] | var_2ch = r3;
0x0000cce0 b 0xcb58 | goto label_3;
| label_10:
0x0000cce2 blx 0x348c | fprintf_chk ()
0x0000cce6 nop |
0x0000cce8 b 0xcc2c | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xce18 */
| #include <stdint.h>
|
; (fcn) fcn.0000ce18 () | void fcn_0000ce18 (int16_t arg_18h, int16_t arg_64h) {
| int16_t var_0h;
| int16_t var_4h;
| do {
| label_0:
0x0000c942 mov r0, r5 | r0 = r5;
0x0000c944 blx 0x36ec | r0 = fcn_000036ec ();
| if (r0 == 0) {
0x0000c948 cbz r0, 0xc98a | goto label_4;
| }
| label_1:
0x0000c94a ldr r3, [sp, 4] | r3 = var_4h;
| if (r3 != 0) {
0x0000c94c cbnz r3, 0xc98a | goto label_4;
| }
0x0000c94e add.w r4, r0, 0xb | r4 = r0 + 0xb;
0x0000c952 mov r1, r6 | r1 = r6;
0x0000c954 mov r0, r4 | r0 = r4;
0x0000c956 blx 0x365c | r0 = fcn_0000365c ();
0x0000c95a cmp r0, 0 |
| label_3:
0x0000c95c bne 0xc942 |
| } while (r0 != 0);
0x0000c95e ldr r3, [sp, 0x18] | r3 = *(arg_18h);
0x0000c960 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0000c964 cmp.w r3, 0x8000 |
| if (r3 != 0x8000) {
0x0000c968 bne 0xc942 | goto label_0;
| }
0x0000c96a mov r0, r4 | r0 = r4;
0x0000c96c blx 0x3420 | r0 = time (r0);
0x0000c970 cmp r0, 0 |
| if (r0 == 0) {
0x0000c972 beq 0xc942 | goto label_0;
| }
0x0000c974 blx 0x3738 | r0 = fdelt_chk ();
0x0000c978 ldr r3, [r0] | r3 = *(r0);
0x0000c97a mov r0, r5 | r0 = r5;
0x0000c97c cmp r3, 2 |
0x0000c97e it ne |
| if (r3 == 2) {
0x0000c980 strne r7, [sp, 4] | var_4h = r7;
| }
0x0000c982 blx 0x36ec | r0 = fcn_000036ec ();
0x0000c986 cmp r0, 0 |
| if (r0 != 0) {
0x0000c988 bne 0xc94a | goto label_1;
| }
| label_4:
0x0000c98a mov r0, r5 | r0 = r5;
0x0000c98c blx 0x33fc | sem_post ();
0x0000c990 ldr r0, [pc, 0x40] |
0x0000c992 movs r3, 3 | r3 = 3;
0x0000c994 add r2, sp, 4 | r2 += var_4h;
0x0000c996 movw r1, 0x28a | r1 = 0x28a;
0x0000c99a add r0, pc | r0 = 0x19372;
0x0000c99c adds r0, 0x5c | r0 += 0x5c;
0x0000c99e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000c9a2 ldr r2, [pc, 0x34] |
0x0000c9a4 ldr r3, [pc, 0x28] | r3 = *(0xc9d0);
0x0000c9a6 ldr r0, [sp, 4] | r0 = var_4h;
0x0000c9a8 add r2, pc | r2 = 0x19386;
0x0000c9aa ldr r3, [r2, r3] | r3 = *(0x19386);
0x0000c9ac ldr r2, [r3] | r2 = *(0x19386);
0x0000c9ae ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0000c9b0 eors r2, r3 | r2 ^= r3;
0x0000c9b2 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000c9b6 bne 0xc9c4 |
0x0000c9b8 add sp, 0x6c |
0x0000c9ba pop {r4, r5, r6, r7, pc} |
| }
0x0000c9c4 blx 0x348c | fprintf_chk ()
0x0000c9c8 invalid |
0x0000ce18 push {lr} |
0x0000ce1a movs r3, 0 | r3 = 0;
0x0000ce1c ldr.w lr, [pc, 0x7c] |
0x0000ce20 sub sp, 0xc |
0x0000ce22 movs r2, 3 | r2 = 3;
0x0000ce24 movs r1, 0x6a | r1 = 0x6a;
0x0000ce26 ldr.w ip, [pc, 0x78] |
0x0000ce2a add lr, pc | lr += pc;
0x0000ce2c ldr r0, [pc, 0x74] |
0x0000ce2e ldr.w ip, [lr, ip] | ip = *((lr + ip));
0x0000ce32 add r0, pc | r0 = 0x19cda;
0x0000ce34 ldr.w ip, [ip] | ip = *(0xcea2);
0x0000ce38 str.w ip, [sp, 4] | __asm ("str.w ip, [var_4h]");
0x0000ce3c mov.w ip, 0 |
0x0000ce40 str r3, [sp] | *(sp) = r3;
0x0000ce42 bl 0xfb54 | r0 = fcn_0000fb54 (r0, r1, r2);
0x0000ce46 bl 0xcdc8 | fcn_0000cdc8 ();
0x0000ce4a str r0, [sp] | *(sp) = r0;
0x0000ce4c cbz r0, 0xce82 |
| while (r0 != 0) {
| label_2:
0x0000ce4e ldr r0, [pc, 0x58] |
0x0000ce50 add r0, pc | r0 = 0x19cfe;
0x0000ce52 adds r0, 8 | r0 += 8;
0x0000ce54 bl 0xd59c | fcn_0000d59c (r0);
0x0000ce58 ldr r0, [pc, 0x50] |
0x0000ce5a movs r3, 3 | r3 = 3;
0x0000ce5c mov r2, sp | r2 = sp;
0x0000ce5e movs r1, 0x72 | r1 = 0x72;
0x0000ce60 add r0, pc | r0 = 0x19d10;
0x0000ce62 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000ce66 ldr r2, [pc, 0x48] |
0x0000ce68 ldr r3, [pc, 0x34] | r3 = *(0xcea0);
0x0000ce6a ldr r0, [sp] | r0 = *(sp);
0x0000ce6c add r2, pc | r2 = 0x19d22;
0x0000ce6e ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x0000ce70 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x0000ce72 ldr r3, [sp, 4] | r3 = var_4h;
0x0000ce74 eors r2, r3 | r2 ^= r3;
0x0000ce76 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000ce7a bne 0xce98 | goto label_5;
| }
0x0000ce7c add sp, 0xc |
0x0000ce7e ldr pc, [sp], 4 | pc = *(sp);
| sp += 4;
0x0000ce82 bl 0xd5ac | fcn_0000d5ac ();
0x0000ce86 ldr r3, [pc, 0x2c] |
0x0000ce88 add r3, pc | r3 = 0x19d42;
0x0000ce8a str r0, [r3, 4] | *((r3 + 4)) = r0;
0x0000ce8c cmp r0, 0 |
0x0000ce8e bne 0xce4e |
| }
0x0000ce90 mvn r3, 0x62 | r3 = ~0x62;
0x0000ce94 str r3, [sp] | *(sp) = r3;
0x0000ce96 b 0xce4e | goto label_2;
| label_5:
0x0000ce98 blx 0x348c | fprintf_chk ()
0x0000ce9c subs r6, r4, 1 | r6 = r4 - 1;
0x0000ce9e movs r2, r0 | r2 = r0;
0x0000cea0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000cea2 movs r0, r0 |
0x0000cea4 b 0xc95c | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xcee8 */
| #include <stdint.h>
|
; (fcn) fcn.0000cee8 () | void fcn_0000cee8 () {
| int16_t var_0h;
| int16_t var_4h;
0x0000cee8 ldr r1, [pc, 0xa0] |
0x0000ceea movs r3, 0 | r3 = 0;
0x0000ceec ldr r2, [pc, 0xa0] | r2 = *(0xcf90);
0x0000ceee push {r4, r5, r6, r7, lr} |
0x0000cef0 sub sp, 0xc |
0x0000cef2 ldr r5, [pc, 0xa0] |
0x0000cef4 add r1, pc | r1 = 0x19e84;
0x0000cef6 mov r6, sp | r6 = sp;
0x0000cef8 ldr r2, [r1, r2] |
0x0000cefa add r5, pc | r5 = 0x19e94;
0x0000cefc ldr r7, [pc, 0x98] |
0x0000cefe add.w r0, r5, 8 | r0 = r5 + 8;
0x0000cf02 ldr r2, [r2] | r2 = *(0x19e84);
0x0000cf04 str r2, [sp, 4] | var_4h = r2;
0x0000cf06 mov.w r2, 0 | r2 = 0;
0x0000cf0a str r3, [sp] | *(sp) = r3;
0x0000cf0c bl 0xd94c | fcn_0000d94c (r0);
0x0000cf10 ldr r0, [pc, 0x88] |
0x0000cf12 movs r2, 3 | r2 = 3;
0x0000cf14 movs r1, 0x8a | r1 = 0x8a;
0x0000cf16 add r7, pc | r7 = 0x19eb2;
0x0000cf18 add r0, pc | r0 = 0x19eb8;
0x0000cf1a adds r0, 0x18 | r0 += 0x18;
0x0000cf1c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000cf20 b 0xcf30 |
| while (r0 != 0) {
0x0000cf22 ldr r3, [sp] | r3 = *(sp);
0x0000cf24 movs r1, 0x8c | r1 = 0x8c;
0x0000cf26 mov r0, r7 | r0 = r7;
0x0000cf28 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000cf2a ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0000cf2c bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000cf30 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0000cf32 mov r1, r6 | r1 = r6;
0x0000cf34 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x0000cf38 mov r4, r0 | r4 = r0;
0x0000cf3a cmp r0, 0 |
0x0000cf3c bne 0xcf22 |
| }
0x0000cf3e ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0000cf40 ldr r6, [pc, 0x5c] |
0x0000cf42 bl 0xd99c | fcn_0000d99c (r0);
0x0000cf46 ldr r3, [r5] | r3 = *(r5);
0x0000cf48 movs r1, 0x7c | r1 = 0x7c;
0x0000cf4a add r6, pc | r6 = 0x19eee;
0x0000cf4c mov r0, r6 | r0 = r6;
0x0000cf4e ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0000cf50 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000cf54 ldr r2, [r5] | r2 = *(r5);
0x0000cf56 movs r1, 0x7d | r1 = 0x7d;
0x0000cf58 mov r0, r6 | r0 = r6;
0x0000cf5a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000cf5e ldr r0, [pc, 0x44] |
0x0000cf60 movs r3, 3 | r3 = 3;
0x0000cf62 mov r2, r4 | r2 = r4;
0x0000cf64 movs r1, 0x8f | r1 = 0x8f;
0x0000cf66 str r4, [r5] | *(r5) = r4;
0x0000cf68 add r0, pc | r0 = 0x19f12;
0x0000cf6a adds r0, 0x18 | r0 += 0x18;
0x0000cf6c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000cf70 ldr r2, [pc, 0x34] |
0x0000cf72 ldr r3, [pc, 0x1c] | r3 = *(0xcf92);
0x0000cf74 add r2, pc | r2 = 0x19f20;
0x0000cf76 ldr r3, [r2, r3] | r3 = *(0x19f20);
0x0000cf78 ldr r2, [r3] | r2 = *(0x19f20);
0x0000cf7a ldr r3, [sp, 4] | r3 = var_4h;
0x0000cf7c eors r2, r3 | r2 ^= r3;
0x0000cf7e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000cf82 bne 0xcf88 |
0x0000cf84 add sp, 0xc |
0x0000cf86 pop {r4, r5, r6, r7, pc} |
| }
0x0000cf88 blx 0x348c | fprintf_chk ()
0x0000cf8c adds r4, r3, 6 | r4 = r3 + 6;
0x0000cf8e movs r2, r0 | r2 = r0;
0x0000cf90 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000cf92 movs r0, r0 |
0x0000cf94 movs r7, 0xca | r7 = 0xca;
0x0000cf96 movs r2, r0 | r2 = r0;
0x0000cf98 b 0xd6a0 |
0x0000d6a0 cmp r1, r3 |
0x0000d6a2 it ne |
| if (r1 == r3) {
0x0000d6a4 movne r0, 0 | r0 = 0;
| }
| if (r1 == r3) {
0x0000d6a6 beq 0xd6b6 | goto label_1;
| }
| do {
| if (r0 == 0) {
0x0000d6a8 cbz r0, 0xd6b8 | goto label_2;
| }
0x0000d6aa ldr r0, [r0, 4] | r0 = *((r0 + 4));
| if (r0 == 0) {
0x0000d6ac cbz r0, 0xd6be | goto label_3;
| }
| label_0:
0x0000d6ae ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0000d6b0 cmp r1, r3 |
0x0000d6b2 bne 0xd6a8 |
| } while (r1 != r3);
0x0000d6b4 str r0, [r2, 8] | *((r2 + 8)) = r0;
| label_1:
0x0000d6b6 bx lr | return r0;
| label_2:
0x0000d6b8 ldr r0, [r2] | r0 = *(r2);
0x0000d6ba cmp r0, 0 |
| if (r0 != 0) {
0x0000d6bc bne 0xd6ae | goto label_0;
| }
| label_3:
0x0000d6be bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xcfac */
| #include <stdint.h>
|
; (fcn) fcn.0000cfac () | void fcn_0000cfac (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
0x0000cfac push {r4, lr} |
0x0000cfae sub sp, 0x10 |
0x0000cfb0 ldr.w ip, [pc, 0xa8] | ip = *(0x0000d05c);
0x0000cfb4 movs r2, 3 | r2 = 3;
0x0000cfb6 movs r1, 0x99 | r1 = 0x99;
0x0000cfb8 str r0, [sp, 4] | var_4h = r0;
0x0000cfba ldr r0, [pc, 0xa4] |
0x0000cfbc add ip, pc |
0x0000cfbe ldr r3, [pc, 0xa4] |
0x0000cfc0 ldr r4, [pc, 0xa4] |
0x0000cfc2 ldr.w r0, [ip, r0] | r0 = *((ip + r0));
0x0000cfc6 add r3, pc | r3 = 0x1a030;
0x0000cfc8 add r4, pc | r4 = 0x1a034;
0x0000cfca ldr r0, [r0] | r0 = *(0xd062);
0x0000cfcc str r0, [sp, 0xc] | var_ch = r0;
0x0000cfce mov.w r0, 0 | r0 = 0;
0x0000cfd2 add.w r0, r3, 0x30 | r0 = r3 + 0x30;
0x0000cfd6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000cfda ldr r2, [pc, 0x90] |
0x0000cfdc add r1, sp, 8 | r1 += var_8h;
0x0000cfde ldr r3, [sp, 4] | r3 = var_4h;
0x0000cfe0 add.w r0, r4, 8 | r0 = r4 + 8;
0x0000cfe4 add r2, pc | r2 = 0x1a056;
0x0000cfe6 str r3, [sp, 8] | var_8h = r3;
0x0000cfe8 bl 0xd948 | fcn_0000d948 (r0, r1, r2);
0x0000cfec ldr r2, [pc, 0x80] |
0x0000cfee add r1, sp, 4 | r1 += var_4h;
0x0000cff0 ldr r0, [r4, 4] | r0 = *(0x1a038);
0x0000cff2 add r2, pc | r2 = 0x1a066;
0x0000cff4 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
| if (r0 != 0) {
0x0000cff8 cbz r0, 0xd016 |
0x0000cffa ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000cffc movs r1, 0x9d | r1 = 0x9d;
0x0000cffe ldr r0, [pc, 0x74] |
0x0000d000 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000d002 add r0, pc | r0 = 0x1a07c;
0x0000d004 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000d006 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0000d008 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000d00c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000d00e ldr r3, [r0, 8] | r3 = *(0x1a084);
0x0000d010 ldr r1, [r3, 8] | r1 = *(0x1a08c);
0x0000d012 bl 0xd800 | fcn_0000d800 (r0, r1);
| }
0x0000d016 ldr r3, [pc, 0x60] |
0x0000d018 ldr r2, [sp, 4] | r2 = var_4h;
0x0000d01a ldr r0, [pc, 0x60] |
0x0000d01c add r3, pc |
0x0000d01e ldr r3, [r3] | r3 = *(0x1a09a);
0x0000d020 add r0, pc | r0 = 0x1a0a2;
0x0000d022 adds r0, 0x30 | r0 += 0x30;
0x0000d024 ldr r1, [r3] | r1 = *(0x1a09a);
0x0000d026 cmp r1, r2 |
0x0000d028 mov.w r1, 0xa5 | r1 = 0xa5;
0x0000d02c itttt eq |
| if (r1 != r2) {
0x0000d02e moveq r2, 0 | r2 = 0;
| }
| if (r1 == r2) {
0x0000d030 strdeq r2, r2, [r3] | __asm ("strdeq r2, r2, [r3]");
| }
| if (r1 != r2) {
0x0000d034 streq r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| }
| if (r1 == r2) {
0x0000d036 str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
0x0000d038 movs r3, 3 | r3 = 3;
0x0000d03a movs r2, 0 | r2 = 0;
0x0000d03c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000d040 ldr r2, [pc, 0x3c] |
0x0000d042 ldr r3, [pc, 0x1c] | r3 = *(0xd062);
0x0000d044 add r2, pc | r2 = 0x1a0c8;
0x0000d046 ldr r3, [r2, r3] | r3 = *(0x1a0c8);
0x0000d048 ldr r2, [r3] | r2 = *(0x1a0c8);
0x0000d04a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000d04c eors r2, r3 | r2 ^= r3;
0x0000d04e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000d052 bne 0xd058 |
0x0000d054 add sp, 0x10 |
0x0000d056 pop {r4, pc} |
| }
0x0000d058 blx 0x348c | fprintf_chk ()
0x0000d05c adds r4, r2, 3 | r4 = r2 + 3;
0x0000d05e movs r2, r0 | r2 = r0;
0x0000d060 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000d062 movs r0, r0 |
0x0000d064 b 0xd7f4 | return void (*0xd7f4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xd130 */
| #include <stdint.h>
|
; (fcn) fcn.0000d130 () | void fcn_0000d130 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x0000d130 ldr r3, [pc, 0xb8] |
0x0000d132 movs r2, 3 | r2 = 3;
0x0000d134 push {r4, r5, r6, lr} |
0x0000d136 mov r6, r1 | r6 = r1;
0x0000d138 sub sp, 0x18 |
0x0000d13a ldr r1, [pc, 0xb4] |
0x0000d13c add r3, pc | r3 = 0x1a32c;
0x0000d13e mvn r5, 0x15 | r5 = ~0x15;
0x0000d142 str r0, [sp, 0xc] | var_ch = r0;
0x0000d144 add.w r0, r3, 0x64 | r0 = r3 + 0x64;
0x0000d148 ldr r3, [pc, 0xa8] | r3 = *(0xd1f4);
0x0000d14a add r1, pc | r1 = "%d %s <- PUBREL msgid %d";
0x0000d14c ldr r4, [pc, 0xa8] |
0x0000d14e ldr r3, [r1, r3] |
0x0000d150 movs r1, 0xdf | r1 = 0xdf;
0x0000d152 add r4, pc | r4 = 0x1a34e;
0x0000d154 ldr r3, [r3] | r3 = "%d %s <- PUBREL msgid %d";
0x0000d156 str r3, [sp, 0x14] | var_14h = r3;
0x0000d158 mov.w r3, 0 | r3 = 0;
0x0000d15c str r5, [sp, 0x10] | var_10h = r5;
0x0000d15e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000d162 ldr r2, [pc, 0x98] |
0x0000d164 add r1, sp, 0xc | r1 += var_ch;
0x0000d166 ldr r0, [r4, 4] | r0 = *(0x1a352);
0x0000d168 add r2, pc | r2 = 0x1a36a;
0x0000d16a bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
| if (r0 == 0) {
0x0000d16e cbz r0, 0xd182 | goto label_0;
| }
0x0000d170 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000d172 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000d174 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0000d176 ldrd r3, r2, [r0, 4] | __asm ("ldrd r3, r2, [r0, 4]");
0x0000d17a cmp r3, r2 |
| if (r3 <= r2) {
0x0000d17c blo 0xd1c2 | goto label_1;
| }
0x0000d17e cmp r3, 4 |
0x0000d180 bhi 0xd1ac |
| while (1) {
| label_0:
0x0000d182 ldr r0, [pc, 0x7c] |
0x0000d184 movs r3, 3 | r3 = 3;
0x0000d186 add r2, sp, 0x10 | r2 += var_10h;
0x0000d188 movs r1, 0xf2 | r1 = 0xf2;
0x0000d18a add r0, pc | r0 = 0x1a390;
0x0000d18c adds r0, 0x64 | r0 += 0x64;
0x0000d18e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000d192 ldr r2, [pc, 0x70] |
0x0000d194 ldr r3, [pc, 0x5c] | r3 = *(0xd1f4);
0x0000d196 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000d198 add r2, pc | r2 = 0x1a3a2;
0x0000d19a ldr r3, [r2, r3] | r3 = *(0x1a3a2);
0x0000d19c ldr r2, [r3] | r2 = *(0x1a3a2);
0x0000d19e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000d1a0 eors r2, r3 | r2 ^= r3;
0x0000d1a2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000d1a6 bne 0xd1e6 | goto label_2;
| }
0x0000d1a8 add sp, 0x18 |
0x0000d1aa pop {r4, r5, r6, pc} |
0x0000d1ac ldr r2, [pc, 0x58] |
0x0000d1ae mov.w r1, -1 | r1 = -1;
0x0000d1b2 movs r0, 7 | r0 = 7;
0x0000d1b4 add r2, pc | r2 = 0x1a3c0;
0x0000d1b6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000d1ba mov.w r3, -1 | r3 = -1;
0x0000d1be str r3, [sp, 0x10] | var_10h = r3;
0x0000d1c0 b 0xd182 |
| }
| label_1:
0x0000d1c2 adds r2, r3, 1 | r2 = r3 + 1;
0x0000d1c4 add r3, r0 | r3 += r0;
0x0000d1c6 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0000d1c8 mov.w r1, -1 | r1 = -1;
0x0000d1cc ldrb r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0000d1ce ldr r2, [pc, 0x3c] |
0x0000d1d0 strb r3, [r6] | *(r6) = r3;
0x0000d1d2 ldrd r3, r0, [r0, 4] | __asm ("ldrd r3, r0, [r0, 4]");
0x0000d1d6 add r2, pc | r2 = "%d %s <- SUBACK msgid: %d";
0x0000d1d8 str r0, [sp] | *(sp) = r0;
0x0000d1da movs r0, 1 | r0 = 1;
0x0000d1dc bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000d1e0 movs r3, 0 | r3 = 0;
0x0000d1e2 str r3, [sp, 0x10] | var_10h = r3;
0x0000d1e4 b 0xd182 | goto label_0;
| label_2:
0x0000d1e6 blx 0x348c | fprintf_chk ()
0x0000d1ea nop |
0x0000d1ec b 0xd690 | return void (*0xd690)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xd3ec */
| #include <stdint.h>
|
; (fcn) fcn.0000d3ec () | void fcn_0000d3ec (int16_t arg_28h, int16_t arg_2ch, int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, char * arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000d3ec push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000d3f0 mov r6, r2 | r6 = r2;
0x0000d3f2 ldr r2, [pc, 0xd0] |
0x0000d3f4 mov r8, r3 | r8 = r3;
0x0000d3f6 mov sb, r0 | sb = r0;
0x0000d3f8 sub sp, 8 |
0x0000d3fa ldr r3, [pc, 0xcc] | r3 = *(0xd4ca);
0x0000d3fc mov r5, r1 | r5 = r1;
0x0000d3fe ldr r0, [pc, 0xcc] |
0x0000d400 add r2, pc | r2 = 0x1a8ca;
0x0000d402 mov.w r1, 0x164 | r1 = 0x164;
0x0000d406 movs r4, 0 | r4 = 0;
0x0000d408 ldr r3, [r2, r3] |
0x0000d40a movs r2, 3 | r2 = 3;
0x0000d40c add r0, pc | r0 = 0x1a8de;
0x0000d40e ldr.w sl, [sp, 0x28] | sl = *(arg_28h);
0x0000d412 adds r0, 0xcc | r0 += 0xcc;
0x0000d414 ldr r7, [sp, 0x2c] | r7 = *(arg_2ch);
0x0000d416 ldr r3, [r3] | r3 = *(0x1a8ca);
0x0000d418 str r3, [sp, 4] | var_4h = r3;
0x0000d41a mov.w r3, 0 | r3 = 0;
0x0000d41e str r4, [sp] | *(sp) = r4;
0x0000d420 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000d424 ldr r0, [pc, 0xa8] |
0x0000d426 movs r2, 0x50 | r2 = 0x50;
0x0000d428 mov.w r1, 0x166 | r1 = 0x166;
0x0000d42c add r0, pc | r0 = 0x1a900;
0x0000d42e bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000d432 cmp r0, 0 |
| if (r0 == 0) {
0x0000d434 beq 0xd4b6 | goto label_0;
| }
0x0000d436 ldr r2, [sp, 0x30] | r2 = *(arg_30h);
0x0000d438 cmp r6, 0 |
0x0000d43a mov r3, r0 | r3 = r0;
0x0000d43c str.w sb, [r0] | __asm ("str.w sb, [r0]");
0x0000d440 str r5, [r0, 0xc] | *((r0 + 0xc)) = r5;
0x0000d442 str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x0000d444 strd r6, r7, [r0, 4] | __asm ("strd r6, r7, [r0, 4]");
| if (r6 <= 0) {
0x0000d448 ble 0xd47a | goto label_1;
| }
0x0000d44a sub.w r5, sl, 4 | r5 = sl - 4;
0x0000d44e mov lr, r4 | lr = r4;
0x0000d450 add.w r2, r0, 0x3c | r2 = r0 + 0x3c;
0x0000d454 add.w sb, r0, 0x14 | sb = r0 + 0x14;
| do {
0x0000d458 lsl.w ip, lr, 3 |
0x0000d45c add.w lr, lr, 1 | lr++;
0x0000d460 cmp r6, lr |
0x0000d462 add.w r4, r8, ip | r4 = r8 + ip;
0x0000d466 add ip, sb |
0x0000d468 ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x0000d46c stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000d470 ldr r1, [r5, 4]! | r1 = *((r5 += 4));
0x0000d474 str r1, [r2], 4 | *(r2) = r1;
| r2 += 4;
0x0000d478 bne 0xd458 |
| } while (r6 != lr);
| label_1:
0x0000d47a ldr r0, [pc, 0x58] |
0x0000d47c adds r2, r7, 4 | r2 = r7 + 4;
0x0000d47e mov r1, r3 | r1 = r3;
0x0000d480 add r0, pc | r0 = 0x1a95a;
0x0000d482 adds r0, 8 | r0 += 8;
0x0000d484 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
| do {
0x0000d488 ldr r0, [pc, 0x4c] |
0x0000d48a movs r3, 3 | r3 = 3;
0x0000d48c mov r2, sp | r2 = sp;
0x0000d48e movw r1, 0x179 | r1 = 0x179;
0x0000d492 add r0, pc | r0 = 0x1a96e;
0x0000d494 adds r0, 0xcc | r0 += 0xcc;
0x0000d496 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000d49a ldr r2, [pc, 0x40] |
0x0000d49c ldr r3, [pc, 0x28] | r3 = *(0xd4c8);
0x0000d49e ldr r0, [sp] | r0 = *(sp);
0x0000d4a0 add r2, pc | r2 = 0x1a982;
0x0000d4a2 ldr r3, [r2, r3] | r3 = *(0x1a982);
0x0000d4a4 ldr r2, [r3] | r2 = *(0x1a982);
0x0000d4a6 ldr r3, [sp, 4] | r3 = var_4h;
0x0000d4a8 eors r2, r3 | r2 ^= r3;
0x0000d4aa mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000d4ae bne 0xd4be | goto label_2;
| }
0x0000d4b0 add sp, 8 |
0x0000d4b2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x0000d4b6 mvn r3, 0x62 | r3 = ~0x62;
0x0000d4ba str r3, [sp] | *(sp) = r3;
0x0000d4bc b 0xd488 |
| } while (1);
| label_2:
0x0000d4be blx 0x348c | fprintf_chk ()
0x0000d4c2 nop |
0x0000d4c4 adds r0, r2, r2 | r0 = r2 + r2;
0x0000d4c6 movs r2, r0 | r2 = r0;
0x0000d4c8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000d4ca movs r0, r0 |
0x0000d4cc svc 0x80 | __asm ("svc 0x80");
0x0000d4ce movs r0, r0 |
0x0000d4d0 udf 0x6c | __asm ("udf 0x6c");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xe4e8 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0000e4e8 () | void fcn_0000e4e8 (int16_t arg_58h, int16_t arg_5ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000e4e8 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000e4ec sub sp, 0x34 |
0x0000e4ee str r2, [sp, 8] | var_8h = r2;
0x0000e4f0 mov r6, r1 | r6 = r1;
0x0000e4f2 mov sb, r3 | sb = r3;
0x0000e4f4 mov r8, r0 | r8 = r0;
0x0000e4f6 ldr r2, [pc, 0x21c] |
0x0000e4f8 movs r5, 0 | r5 = 0;
0x0000e4fa ldr r1, [sp, 0x58] | r1 = *(arg_58h);
0x0000e4fc add.w sl, sp, 0x24 | sl += var_24h;
0x0000e500 ldr r3, [pc, 0x214] | r3 = *(0xe718);
0x0000e502 ldr r0, [pc, 0x218] |
0x0000e504 add r2, pc | r2 = 0x1cc1e;
0x0000e506 str r1, [sp, 4] | var_4h = r1;
0x0000e508 movs r1, 0xf5 | r1 = 0xf5;
0x0000e50a ldr r3, [r2, r3] |
0x0000e50c movs r2, 3 | r2 = 3;
0x0000e50e add r0, pc | r0 = 0x1cc30;
0x0000e510 ldr r4, [sp, 0x5c] | r4 = *(arg_5ch);
0x0000e512 adds r0, 0x1c | r0 += 0x1c;
0x0000e514 ldr r3, [r3] | r3 = *(0x1cc1e);
0x0000e516 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000e518 mov.w r3, 0 | r3 = 0;
0x0000e51c str r5, [sp, 0x14] | var_14h = r5;
0x0000e51e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000e522 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0000e524 strd r5, r5, [sp, 0x24] | __asm ("strd r5, r5, [var_24h]");
0x0000e528 cmp r3, 0 |
| if (r3 == 0) {
0x0000e52a beq.w 0xe66c | goto label_7;
| }
0x0000e52c strh r7, [r3, 4] | *((r3 + 4)) = r7;
0x0000e52e ldr r1, [r4] | r1 = *(r4);
0x0000e530 ldr r3, [sp, 4] | r3 = var_4h;
0x0000e532 cmp r1, 0 |
0x0000e534 ldr r5, [r3] | r5 = *(r3);
| if (r1 <= 0) {
0x0000e536 ble.w 0xe6ac | goto label_8;
| }
0x0000e53a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000e53c mov r6, r5 | r6 = r5;
0x0000e53e add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
| do {
0x0000e542 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0000e546 cmp r1, r3 |
0x0000e548 add r6, r2 | r6 += r2;
0x0000e54a bne 0xe542 |
| } while (r1 != r3);
| label_2:
0x0000e54c cmp r6, 0x7d |
0x0000e54e itt ls |
| if (r6 > 0x7d) {
0x0000e550 movls fp, 6 |
| }
| if (r6 <= 0x7d) {
0x0000e554 mov r3, fp | r3 = fp;
| }
| if (r6 >= 0x7d) {
0x0000e556 bls 0xe568 |
0x0000e558 cmp.w r6, 0x10000 |
0x0000e55c ite hs |
| if (r6 < 0x10000) {
0x0000e55e movhs fp, 0xe |
| }
| if (r6 < 0x10000) {
0x0000e562 mov.w fp, 8 |
| }
0x0000e566 mov r3, fp | r3 = fp;
| }
0x0000e568 ldr.w r2, [sb] | r2 = *(sb);
0x0000e56c cmp r2, 0 |
| if (r2 == 0) {
0x0000e56e beq.w 0xe6b0 | goto label_9;
| }
0x0000e572 ldr r0, [pc, 0x1ac] |
0x0000e574 add r5, r3 | r5 += r3;
0x0000e576 mov r2, r5 | r2 = r5;
0x0000e578 movw r1, 0x107 | r1 = 0x107;
0x0000e57c str r3, [sp, 0xc] | var_ch = r3;
0x0000e57e add r0, pc | r0 = 0x1cca4;
0x0000e580 str r5, [sp, 0x28] | var_28h = r5;
0x0000e582 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000e586 mov r7, r0 | r7 = r0;
0x0000e588 str r0, [sp, 0x24] | var_24h = r0;
0x0000e58a cmp r0, 0 |
| if (r0 == 0) {
0x0000e58c beq 0xe66c | goto label_7;
| }
0x0000e58e ldr r3, [sp, 4] | r3 = var_4h;
0x0000e590 ldr.w r1, [sb] | r1 = *(sb);
0x0000e594 mov sb, r5 | sb = r5;
0x0000e596 movs r5, 0 | r5 = 0;
0x0000e598 ldr r2, [r3] | r2 = *(r3);
0x0000e59a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000e59c add r0, r3 | r0 += r3;
0x0000e59e blx 0x32a0 | pthread_cond_signal ();
0x0000e5a2 ldrb r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0000e5a4 cmp r2, 0 |
| if (r2 == 0) {
0x0000e5a6 beq.w 0xe6d8 | goto label_10;
| }
| label_3:
0x0000e5aa ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e5ac movs r1, 0x80 | r1 = 0x80;
0x0000e5ae ldr r3, [sp, 8] | r3 = var_8h;
0x0000e5b0 cmp r6, 0x7d |
0x0000e5b2 strb r1, [r7, r2] | *((r7 + r2)) = r1;
0x0000e5b4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0000e5b6 ldrb r2, [r7, r0] | r2 = *((r7 + r0));
0x0000e5b8 orr.w r2, r2, r3 | r2 |= r3;
0x0000e5bc strb r2, [r7, r0] | *((r7 + r0)) = r2;
0x0000e5be ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e5c0 add.w r2, r2, 1 | r2++;
0x0000e5c4 str r2, [sp, 0x14] | var_14h = r2;
0x0000e5c6 strb r1, [r7, r2] | *((r7 + r2)) = r1;
0x0000e5c8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e5ca add.w r1, r2, 1 | r1 = r2 + 1;
0x0000e5ce str r1, [sp, 0x14] | var_14h = r1;
| if (r6 < 0x7d) {
0x0000e5d0 bls 0xe6a2 | goto label_11;
| }
0x0000e5d2 cmp.w r6, 0x10000 |
| if (r6 >= 0x10000) {
0x0000e5d6 bhs.w 0xe6e6 | goto label_12;
| }
0x0000e5da ldrb r1, [r7, r2] | r1 = *((r7 + r2));
0x0000e5dc rev16 r6, r6 | __asm ("rev16 r6, r6");
0x0000e5de orr r1, r1, 0x7e | r1 |= 0x7e;
0x0000e5e2 strb r1, [r7, r2] | *((r7 + r2)) = r1;
0x0000e5e4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e5e6 strh r6, [r7, r2] | *((r7 + r2)) = r6;
0x0000e5e8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e5ea adds r2, 2 | r2 += 2;
0x0000e5ec str r2, [sp, 0x14] | var_14h = r2;
| label_1:
0x0000e5ee ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0000e5f0 cmp fp, sb |
0x0000e5f2 str r1, [r7, r2] | *((r7 + r2)) = r1;
0x0000e5f4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e5f6 add.w r2, r2, 4 | r2 += 4;
0x0000e5fa str r2, [sp, 0x14] | var_14h = r2;
| if (fp >= sb) {
0x0000e5fc bge.w 0xe70a | goto label_13;
| }
0x0000e600 add.w r6, r7, fp | r6 = r7 + fp;
0x0000e604 add r7, sb | r7 += sb;
0x0000e606 mov r1, r6 | r1 = r6;
| do {
0x0000e608 subs r3, r1, r6 | r3 = r1 - r6;
0x0000e60a ldrb r2, [r1] | r2 = *(r1);
0x0000e60c and r3, r3, 3 | r3 &= 3;
0x0000e610 add r3, r4 | r3 += r4;
0x0000e612 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0000e614 eors r3, r2 | r3 ^= r2;
0x0000e616 strb r3, [r1], 1 | *(r1) = r3;
| r1++;
0x0000e61a cmp r7, r1 |
0x0000e61c bne 0xe608 |
| } while (r7 != r1);
0x0000e61e sub.w r0, sb, fp | r0 = sb - fp;
| label_4:
0x0000e622 ldr r2, [r4] | r2 = *(r4);
0x0000e624 cmp r2, 0 |
| if (r2 <= 0) {
0x0000e626 ble 0xe66c | goto label_7;
| }
0x0000e628 movs r7, 0 | r7 = 0;
| if (r5 == 0) {
| label_0:
0x0000e62a cbnz r5, 0xe636 |
0x0000e62c cmp r7, 2 |
| if (r7 == 2) {
0x0000e62e beq 0xe66c | goto label_7;
| }
0x0000e630 subs r3, r2, 1 | r3 = r2 - 1;
0x0000e632 cmp r3, r7 |
| if (r3 == r7) {
0x0000e634 beq 0xe66c | goto label_7;
| }
| }
0x0000e636 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000e638 lsls r1, r7, 2 | r1 = r7 << 2;
0x0000e63a ldr.w r3, [r3, r7, lsl 2] | offset_0 = r7 << 2;
| r3 = *((r3 + offset_0));
| if (r3 == 0) {
0x0000e63e cbz r3, 0xe666 | goto label_14;
| }
0x0000e640 movs r3, 0 | r3 = 0;
| do {
0x0000e642 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x0000e644 and r2, r0, 3 | r2 = r0 & 3;
0x0000e648 add r2, r4 | r2 += r4;
0x0000e64a adds r0, 1 | r0++;
| label_5:
0x0000e64c ldrb r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0000e64e ldr r6, [r6, r1] | r6 = *((r6 + r1));
0x0000e650 ldrb.w ip, [r6, r3] | ip = *((r6 + r3));
0x0000e654 eor.w r2, r2, ip | r2 ^= ip;
0x0000e658 strb r2, [r6, r3] | *((r6 + r3)) = r2;
0x0000e65a adds r3, 1 | r3++;
0x0000e65c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0000e65e ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x0000e660 cmp r3, r2 |
0x0000e662 blo 0xe642 |
| } while (r3 <= r2);
0x0000e664 ldr r2, [r4] | r2 = *(r4);
| label_14:
0x0000e666 adds r7, 1 | r7++;
0x0000e668 cmp r2, r7 |
| if (r2 > r7) {
0x0000e66a bgt 0xe62a | goto label_0;
| }
| do {
| label_7:
0x0000e66c ldr r0, [pc, 0xb4] |
0x0000e66e movs r3, 3 | r3 = 3;
0x0000e670 add r2, sp, 0x14 | r2 += var_14h;
0x0000e672 mov.w r1, 0x160 | r1 = 0x160;
0x0000e676 add r0, pc | r0 = 0x1cd9e;
0x0000e678 adds r0, 0x1c | r0 += 0x1c;
0x0000e67a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000e67e ldr r2, [pc, 0xa8] |
0x0000e680 ldm.w sl, {r0, r1} | r0 = *(sl);
| r1 = *((sl + 4));
0x0000e684 ldr r3, [pc, 0x90] | r3 = *(0xe718);
0x0000e686 add r2, pc | r2 = 0x1cdb4;
0x0000e688 stm.w r8, {r0, r1} | *(r8) = r0;
| *((r8 + 4)) = r1;
0x0000e68c ldr r3, [r2, r3] | r3 = *(0x1cdb4);
0x0000e68e ldr r2, [r3] | r2 = *(0x1cdb4);
0x0000e690 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0000e692 eors r2, r3 | r2 ^= r3;
0x0000e694 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000e698 bne 0xe70e | goto label_15;
| }
0x0000e69a mov r0, r8 | r0 = r8;
0x0000e69c add sp, 0x34 |
0x0000e69e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0000e6a2 ldrb r1, [r7, r2] | r1 = *((r7 + r2));
0x0000e6a4 orrs r1, r6 | r1 |= r6;
0x0000e6a6 strb r1, [r7, r2] | *((r7 + r2)) = r1;
0x0000e6a8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e6aa b 0xe5ee | goto label_1;
| label_8:
0x0000e6ac mov r6, r5 | r6 = r5;
0x0000e6ae b 0xe54c | goto label_2;
| label_9:
0x0000e6b0 ldr r0, [pc, 0x78] |
0x0000e6b2 mov r2, r3 | r2 = r3;
0x0000e6b4 mov.w r1, 0x10e | r1 = 0x10e;
0x0000e6b8 str r3, [sp, 4] | var_4h = r3;
0x0000e6ba add r0, pc | r0 = 0x1cdea;
0x0000e6bc bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000e6c0 mov r7, r0 | r7 = r0;
0x0000e6c2 str r0, [sp, 0x24] | var_24h = r0;
0x0000e6c4 cmp r0, 0 |
0x0000e6c6 beq 0xe66c |
| } while (r0 == 0);
0x0000e6c8 ldrb r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0000e6ca mov sb, fp | sb = fp;
| label_6:
0x0000e6cc ldr r3, [sp, 4] | r3 = var_4h;
0x0000e6ce movs r5, 0 | r5 = 0;
0x0000e6d0 str r3, [sp, 0x28] | var_28h = r3;
0x0000e6d2 cmp r2, 0 |
| if (r2 != 0) {
0x0000e6d4 bne.w 0xe5aa | goto label_3;
| }
| label_10:
0x0000e6d8 movs r1, 4 | r1 = 4;
0x0000e6da add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x0000e6de movs r5, 1 | r5 = 1;
0x0000e6e0 blx 0x3588 | SSL_CTX_set_alpn_protos ();
0x0000e6e4 b 0xe5aa | goto label_3;
| label_12:
0x0000e6e6 ldrb r1, [r7, r2] | r1 = *((r7 + r2));
0x0000e6e8 rev r6, r6 | r6 = SWAP32 (r6);
0x0000e6ea str r6, [sp, 0x1c] | var_1ch = r6;
0x0000e6ec add r6, sp, 0x18 | r6 += var_18h;
0x0000e6ee orr r1, r1, 0x7f | r1 |= 0x7f;
0x0000e6f2 strb r1, [r7, r2] | *((r7 + r2)) = r1;
0x0000e6f4 movs r2, 0 | r2 = 0;
0x0000e6f6 str r2, [sp, 0x18] | var_18h = r2;
0x0000e6f8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e6fa ldm r6!, {r0, r1} | r0 = *(r6!);
| r1 = *((r6! + 4));
0x0000e6fc str r0, [r7, r2] | *((r7 + r2)) = r0;
0x0000e6fe add r2, r7 | r2 += r7;
0x0000e700 str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0000e702 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000e704 adds r2, 8 | r2 += 8;
0x0000e706 str r2, [sp, 0x14] | var_14h = r2;
0x0000e708 b 0xe5ee | goto label_1;
| label_13:
0x0000e70a movs r0, 0 | r0 = 0;
0x0000e70c b 0xe622 | goto label_4;
| label_15:
0x0000e70e blx 0x348c | fprintf_chk ()
0x0000e712 nop |
0x0000e714 lsls r4, r1, 0x1e | r4 = r1 << 0x1e;
0x0000e716 movs r2, r0 | r2 = r0;
0x0000e718 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000e71a movs r0, r0 |
| if (r0 >= r0) {
0x0000e71c bge 0xe64c | goto label_5;
| }
0x0000e71e movs r0, r0 |
0x0000e720 bvc 0xe738 | __asm ("bvc 0xe738");
0x0000e722 movs r0, r0 |
| if (r0 < r0) {
0x0000e724 bls 0xe784 | void (*0xe784)() ();
| }
0x0000e726 movs r0, r0 |
0x0000e728 lsls r2, r1, 0x18 | r2 = r1 << 0x18;
0x0000e72a movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x0000e72c bpl 0xe6cc | goto label_6;
| }
0x0000e72e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xe808 */
| #include <stdint.h>
|
; (fcn) fcn.0000e808 () | void fcn_0000e808 (int16_t arg1, int16_t arg2) {
| int16_t var_4h_2;
| int16_t var_ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_18h_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_64h;
| int16_t var_74h;
| r0 = arg1;
| r1 = arg2;
0x0000e808 ldr r3, [pc, 0x2a4] |
0x0000e80a movs r2, 0 | r2 = 0;
0x0000e80c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000e810 mov r7, r1 | r7 = r1;
0x0000e812 ldr r1, [pc, 0x2a0] |
0x0000e814 mov r5, r0 | r5 = r0;
0x0000e816 add r3, pc | r3 = 0x1d2ca;
0x0000e818 sub sp, 0x7c |
0x0000e81a add.w r0, r3, 0x34 | r0 = r3 + 0x34;
0x0000e81e ldr r3, [pc, 0x298] | r3 = *(0xeaba);
0x0000e820 add r1, pc | r1 = 0x1d2da;
0x0000e822 movs r6, 0x50 | r6 = 0x50;
0x0000e824 str r6, [sp, 0x48] | var_48h = r6;
0x0000e826 ldr r3, [r1, r3] |
0x0000e828 mov.w r1, 0x192 | r1 = 0x192;
0x0000e82c ldr r4, [r5, 0x3c] | r4 = *((r5 + 0x3c));
0x0000e82e ldr r3, [r3] | r3 = *(0x1d2da);
0x0000e830 str r3, [sp, 0x74] | var_74h = r3;
0x0000e832 mov.w r3, 0 | r3 = 0;
0x0000e836 str r2, [sp, 0x4c] | var_4ch = r2;
0x0000e838 movs r2, 3 | r2 = 3;
0x0000e83a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000e83e ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x0000e840 cmp r2, 0 |
| if (r2 == 0) {
0x0000e842 beq.w 0xea68 | goto label_16;
| }
0x0000e846 ldr r0, [pc, 0x274] |
0x0000e848 movs r3, 0x19 | r3 = 0x19;
0x0000e84a movw r1, 0x197 | r1 = 0x197;
0x0000e84e add r0, pc | r0 = 0x1d310;
0x0000e850 bl 0x10220 | fcn_00010220 (r0, r1, r2, r3);
| label_4:
0x0000e854 str r0, [r5, 0x38] | *((r5 + 0x38)) = r0;
0x0000e856 cmp r0, 0 |
| if (r0 == 0) {
0x0000e858 beq.w 0xea52 | goto label_17;
| }
0x0000e85c add r6, sp, 0x64 | r6 += var_64h;
0x0000e85e mov r0, r6 | r0 = r6;
0x0000e860 bl 0xe730 | fcn_0000e730 (r0);
0x0000e864 movs r3, 0x10 | r3 = 0x10;
0x0000e866 mov r2, r6 | r2 = r6;
0x0000e868 movs r1, 0x19 | r1 = 0x19;
0x0000e86a ldr r0, [r5, 0x38] | r0 = *((r5 + 0x38));
0x0000e86c bl 0xe280 | fcn_0000e280 (r0);
0x0000e870 movs r3, 0x50 | r3 = 0x50;
0x0000e872 add r2, sp, 0x4c | r2 += var_4ch;
0x0000e874 add r1, sp, 0x48 | r1 += var_48h;
0x0000e876 mov r0, r7 | r0 = r7;
0x0000e878 bl 0xb70c | fcn_0000b70c (r0, r1, r2, r3);
0x0000e87c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0000e87e mov sb, r0 | sb = r0;
0x0000e880 cmp r3, 0 |
| if (r3 == 0) {
0x0000e882 beq.w 0xea5a | goto label_18;
| }
0x0000e886 cmp r4, 0 |
| if (r4 == 0) {
0x0000e888 beq 0xe91e | goto label_3;
| }
| label_2:
0x0000e88a ldr r3, [r4] | r3 = *(r4);
0x0000e88c movs r2, 1 | r2 = 1;
0x0000e88e mov r6, r2 | r6 = r2;
| if (r3 == 0) {
0x0000e890 cbz r3, 0xe8be | goto label_19;
| }
0x0000e892 movs r6, 0 | r6 = 0;
0x0000e894 mov sl, r4 | sl = r4;
0x0000e896 b 0xe8b2 |
| while (r4 != 0) {
0x0000e898 mov r0, r3 | r0 = r3;
0x0000e89a adds r6, 4 | r6 += 4;
0x0000e89c blx 0x3258 | r0 = unlink (r0);
0x0000e8a0 mov r8, r0 | r8 = r0;
0x0000e8a2 mov r0, r4 | r0 = r4;
0x0000e8a4 blx 0x3258 | unlink (r0);
0x0000e8a8 ldr r3, [sl, 8]! | r3 = *((sl += 8));
0x0000e8ac add r6, r8 | r6 += r8;
0x0000e8ae add r6, r0 | r6 += r0;
| if (r3 == 0) {
0x0000e8b0 cbz r3, 0xe8ba | goto label_20;
| }
0x0000e8b2 ldr.w r4, [sl, 4] | r4 = *((sl + 4));
0x0000e8b6 cmp r4, 0 |
0x0000e8b8 bne 0xe898 |
| }
| label_20:
0x0000e8ba adds r6, 1 | r6++;
0x0000e8bc mov r2, r6 | r2 = r6;
| label_19:
0x0000e8be ldr r0, [pc, 0x200] |
0x0000e8c0 mov.w r1, 0x1b6 | r1 = 0x1b6;
0x0000e8c4 add r0, pc | r0 = 0x1d38a;
0x0000e8c6 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000e8ca mov r4, r0 | r4 = r0;
0x0000e8cc cmp r0, 0 |
| if (r0 == 0) {
0x0000e8ce beq.w 0xea52 | goto label_17;
| }
0x0000e8d2 ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0000e8d4 ldr r3, [r2] | r3 = *(r2);
0x0000e8d6 cmp r3, 0 |
| if (r3 == 0) {
0x0000e8d8 beq.w 0xeaa8 | goto label_21;
| }
0x0000e8dc ldr.w fp, [pc, 0x1e4] |
0x0000e8e0 mov sl, r2 | sl = r2;
0x0000e8e2 mov r8, r0 | r8 = r0;
0x0000e8e4 add fp, pc | fp = 0x1d3ac;
0x0000e8e6 mov r2, fp | r2 = fp;
0x0000e8e8 mov fp, r5 |
0x0000e8ea mov r5, r2 | r5 = r2;
0x0000e8ec b 0xe90e |
| while (r2 != 0) {
0x0000e8ee sub.w r1, r8, r4 | r1 = r8 - r4;
0x0000e8f2 mov r0, r8 | r0 = r8;
0x0000e8f4 str r3, [sp, 4] | var_4h = r3;
0x0000e8f6 subs r1, r6, r1 | r1 = r6 - r1;
0x0000e8f8 mov.w r3, -1 | r3 = -1;
0x0000e8fc str r2, [sp, 8] | var_8h = r2;
0x0000e8fe str r5, [sp] | *(sp) = r5;
0x0000e900 movs r2, 1 | r2 = 1;
0x0000e902 blx 0x3378 | shutdown ();
0x0000e906 ldr r3, [sl, 8]! | r3 = *((sl += 8));
0x0000e90a add r8, r0 | r8 += r0;
| if (r3 == 0) {
0x0000e90c cbz r3, 0xe916 | goto label_22;
| }
0x0000e90e ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0000e912 cmp r2, 0 |
0x0000e914 bne 0xe8ee |
| }
| label_22:
0x0000e916 mov r5, fp | r5 = fp;
| label_6:
0x0000e918 movs r3, 0 | r3 = 0;
0x0000e91a strb.w r3, [r8] | *(r8) = r3;
| label_3:
0x0000e91e ldr.w fp, [pc, 0x1a8] | fp = fcn.0000d638;
0x0000e922 movs r6, 0 | r6 = 0;
0x0000e924 mov sl, r6 | sl = r6;
0x0000e926 mov r8, r6 | r8 = r6;
0x0000e928 add fp, pc |
0x0000e92a mov r3, fp | r3 = fp;
0x0000e92c ldr.w fp, [pc, 0x19c] |
0x0000e930 cmp r4, 0 |
0x0000e932 it ne |
| if (r4 == 0) {
0x0000e934 movne r3, r4 | r3 = r4;
| }
0x0000e936 str r3, [sp, 0x34] | var_34h = r3;
0x0000e938 ldr r3, [pc, 0x194] |
0x0000e93a add fp, pc | fp = 0x1d40a;
0x0000e93c add r3, pc | r3 = 0x1d410;
0x0000e93e str r3, [sp, 0x3c] | var_3ch = r3;
0x0000e940 ldr r3, [pc, 0x190] |
0x0000e942 add r3, pc | r3 = 0x1d41a;
0x0000e944 str r3, [sp, 0x38] | var_38h = r3;
0x0000e946 mov r3, r7 | r3 = r7;
0x0000e948 mov r7, sb | r7 = sb;
0x0000e94a mov sb, r6 | sb = r6;
0x0000e94c mov r6, r4 | r6 = r4;
0x0000e94e mov r4, r3 | r4 = r3;
| do {
0x0000e950 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000e952 mov r1, sb | r1 = sb;
0x0000e954 strd r7, r4, [sp, 0x18] | __asm ("strd r7, r4, [var_18h]");
0x0000e958 movs r2, 1 | r2 = 1;
0x0000e95a strd r7, r4, [sp, 8] | __asm ("strd r7, r4, [var_8h]");
0x0000e95e mov r0, r8 | r0 = r8;
0x0000e960 str r3, [sp, 0x28] | var_28h = r3;
0x0000e962 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000e964 str r3, [sp] | *(sp) = r3;
0x0000e966 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0000e968 cmp r3, 0 |
0x0000e96a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000e96c str r3, [sp, 0x20] | var_20h = r3;
0x0000e96e str r3, [sp, 0x10] | var_10h = r3;
0x0000e970 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0000e972 str r3, [sp, 4] | var_4h = r3;
0x0000e974 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0000e976 str r3, [sp, 0x24] | var_24h = r3;
0x0000e978 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000e97a it eq |
| if (r3 != 0) {
0x0000e97c moveq r3, fp | r3 = fp;
| }
0x0000e97e str r3, [sp, 0x14] | var_14h = r3;
0x0000e980 mov.w r3, -1 | r3 = -1;
0x0000e984 blx 0x3378 | shutdown ();
0x0000e988 eor r3, sl, 1 | r3 = sl ^ 1;
0x0000e98c mov sb, r0 | sb = r0;
0x0000e98e cmp r0, 0 |
0x0000e990 ite le |
| if (r0 > 0) {
0x0000e992 movle r3, 0 | r3 = 0;
| }
| if (r0 <= 0) {
0x0000e994 andgt r3, r3, 1 | r3 &= 1;
| }
0x0000e998 cmp r3, 0 |
| if (r3 != 0) {
0x0000e99a bne 0xea3a | goto label_23;
| }
| label_0:
0x0000e99c cmp.w sl, 0 |
| if (sl != 0) {
0x0000e9a0 beq 0xea34 |
0x0000e9a2 mov r4, r6 | r4 = r6;
0x0000e9a4 mov r6, sb | r6 = sb;
| if (r4 != 0) {
0x0000e9a6 cbz r4, 0xe9b6 |
0x0000e9a8 ldr r0, [pc, 0x12c] |
0x0000e9aa mov r2, r4 | r2 = r4;
0x0000e9ac movw r1, 0x1eb | r1 = 0x1eb;
0x0000e9b0 add r0, pc | r0 = 0x1d48c;
0x0000e9b2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x0000e9b6 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000e9ba beq 0xea78 | goto label_24;
| }
0x0000e9bc ldr r4, [pc, 0x11c] |
0x0000e9be add r7, sp, 0x50 | r7 += var_50h;
0x0000e9c0 ldr.w lr, [r5] |
0x0000e9c4 ldr.w ip, [r5, 0x1c] | ip = *((r5 + 0x1c));
0x0000e9c8 mov r5, r7 | r5 = r7;
0x0000e9ca add r4, pc | r4 = 0x1d4aa;
0x0000e9cc adds r4, 0x48 | r4 += 0x48;
0x0000e9ce ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
| label_7:
0x0000e9d0 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x0000e9d2 ldr r3, [r4] | r3 = *(r4);
0x0000e9d4 str r3, [r5] | *(r5) = r3;
0x0000e9d6 cmp.w ip, 0 |
| if (ip == 0) {
0x0000e9da beq 0xea92 | goto label_25;
| }
0x0000e9dc mov r4, r7 | r4 = r7;
0x0000e9de mov r5, sp | r5 = sp;
0x0000e9e0 ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x0000e9e2 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x0000e9e4 mov r2, r8 | r2 = r8;
0x0000e9e6 ldr r3, [r4] | r3 = *(r4);
0x0000e9e8 mov r1, lr | r1 = lr;
0x0000e9ea mov r0, ip | r0 = ip;
| label_11:
0x0000e9ec str r3, [r5] | *(r5) = r3;
0x0000e9ee mov r3, r6 | r3 = r6;
0x0000e9f0 bl 0x18b40 | fcn_00018b40 (r0, r1, r2, r3, r4, r5, r6);
| label_5:
0x0000e9f4 ldr r0, [pc, 0xe8] | r0 = *(0xeae0);
0x0000e9f6 mov r2, r8 | r2 = r8;
0x0000e9f8 movw r1, 0x1f7 | r1 = 0x1f7;
| label_10:
0x0000e9fc add r0, pc | r0 += pc;
0x0000e9fe bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ea02 movs r3, 1 | r3 = 1;
0x0000ea04 str r3, [sp, 0x44] | var_44h = r3;
| label_1:
0x0000ea06 ldr r0, [pc, 0xdc] | r0 = *(0xeae6);
0x0000ea08 movs r3, 3 | r3 = 3;
0x0000ea0a add r2, sp, 0x44 | r2 += var_44h;
0x0000ea0c movw r1, 0x201 | r1 = 0x201;
| label_15:
0x0000ea10 add r0, pc | r0 += pc;
0x0000ea12 adds r0, 0x34 | r0 += 0x34;
0x0000ea14 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000ea18 ldr r2, [pc, 0xcc] |
0x0000ea1a ldr r3, [pc, 0x9c] | r3 = *(0xeaba);
0x0000ea1c ldr r0, [sp, 0x44] | r0 = var_44h;
0x0000ea1e add r2, pc | r2 = 0x1d50a;
0x0000ea20 ldr r3, [r2, r3] | r3 = *(0x1d50a);
0x0000ea22 ldr r2, [r3] | r2 = *(0x1d50a);
0x0000ea24 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0000ea26 eors r2, r3 | r2 ^= r3;
0x0000ea28 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
| label_12:
0x0000ea2c bne 0xeaac | goto label_26;
| }
0x0000ea2e add sp, 0x7c |
0x0000ea30 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0000ea34 mov.w sl, 1 | sl = 1;
0x0000ea38 b 0xe950 |
| } while (1);
| label_23:
0x0000ea3a add.w sb, r0, 1 | sb = r0 + 1;
0x0000ea3e ldr r0, [pc, 0xac] |
0x0000ea40 mov r2, sb | r2 = sb;
0x0000ea42 mov.w r1, 0x1e2 | r1 = 0x1e2;
0x0000ea46 add r0, pc | r0 = 0x1d538;
0x0000ea48 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
| label_8:
0x0000ea4c mov r8, r0 | r8 = r0;
0x0000ea4e cmp r0, 0 |
| if (r0 != 0) {
0x0000ea50 bne 0xe99c | goto label_0;
| }
| label_17:
0x0000ea52 mvn r3, 0x62 | r3 = ~0x62;
0x0000ea56 str r3, [sp, 0x44] | var_44h = r3;
0x0000ea58 b 0xea06 | goto label_1;
| label_18:
0x0000ea5a ldr r3, [pc, 0x94] |
0x0000ea5c add r3, pc | r3 = 0x1d552;
0x0000ea5e str r3, [sp, 0x4c] | var_4ch = r3;
0x0000ea60 cmp r4, 0 |
| if (r4 != 0) {
0x0000ea62 bne.w 0xe88a | goto label_2;
| }
0x0000ea66 b 0xe91e | goto label_3;
| label_16:
0x0000ea68 ldr r0, [pc, 0x88] |
0x0000ea6a movs r2, 0x19 | r2 = 0x19;
0x0000ea6c movw r1, 0x195 | r1 = 0x195;
0x0000ea70 add r0, pc | r0 = 0x1d568;
0x0000ea72 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000ea76 b 0xe854 | goto label_4;
| label_24:
0x0000ea78 ldr r0, [pc, 0x7c] |
0x0000ea7a mov.w r1, 0x1fc | r1 = 0x1fc;
0x0000ea7e ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x0000ea80 add r0, pc | r0 = "MQTTAsync_checkConn";
0x0000ea82 bl 0x10194 | fcn_00010194 ("MQTTAsync_checkConn", r1, r2);
0x0000ea86 mov.w r3, -1 | r3 = -1;
0x0000ea8a invalid |
| label_13:
0x0000ea8c strh r0, [r7] | *(r7) = r0;
0x0000ea8e str r3, [sp, 0x44] | var_44h = r3;
0x0000ea90 b 0xea06 | goto label_1;
| label_25:
0x0000ea92 add r3, sp, 0x54 | r3 += var_54h;
| label_14:
0x0000ea94 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000ea96 stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000ea9a mov r2, r6 | r2 = r6;
0x0000ea9c ldr r3, [sp, 0x50] | r3 = var_50h;
0x0000ea9e mov r1, r8 | r1 = r8;
0x0000eaa0 mov r0, lr | r0 = lr;
0x0000eaa2 bl 0x83c4 | fcn_000083c4 (r0, r1, r2, r3);
0x0000eaa6 b 0xe9f4 | goto label_5;
| label_21:
0x0000eaa8 mov r8, r0 | r8 = r0;
0x0000eaaa b 0xe918 | goto label_6;
| label_26:
0x0000eaac blx 0x348c | fprintf_chk ()
0x0000eab0 bvc 0xe9d0 | __asm ("bvc 0xe9d0");
| goto label_7;
0x0000eab2 movs r0, r0 |
0x0000eab4 lsls r0, r6, 0x11 | r0 = r6 << 0x11;
0x0000eab6 movs r2, r0 | r2 = r0;
0x0000eab8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000eaba movs r0, r0 |
| if (r0 < r0) {
0x0000eabc bmi 0xeb34 | void (*0xeb34)() ();
| }
0x0000eabe movs r0, r0 |
| if (r0 <= r0) {
| label_9:
0x0000eac0 blo 0xea4c | goto label_8;
| }
0x0000eac2 movs r0, r0 |
| if (r0 <= r0) {
0x0000eac4 blo 0xeac0 | goto label_9;
| }
0x0000eac6 movs r0, r0 |
0x0000eac8 bvs 0xeb3c | __asm ("bvs 0xeb3c");
0x0000eaca movs r0, r0 |
| if (r0 <= r0) {
0x0000eacc blo 0xe9fc | goto label_10;
| }
0x0000eace movs r0, r0 |
| if (r0 <= r0) {
0x0000ead0 blo 0xe9ec | goto label_11;
| }
0x0000ead2 movs r0, r0 |
| if (r0 <= r0) {
0x0000ead4 blo 0xea2c | goto label_12;
| }
0x0000ead6 movs r0, r0 |
| if (r0 >= r0) {
0x0000ead8 bhs 0xea8c | goto label_13;
| }
0x0000eada movs r0, r0 |
| if (r0 >= r0) {
0x0000eadc bpl 0xea94 | goto label_14;
| }
0x0000eade movs r0, r0 |
| if (r0 >= r0) {
0x0000eae0 bhs 0xe9fc | goto label_10;
| }
0x0000eae2 movs r0, r0 |
| if (r0 >= r0) {
0x0000eae4 bpl 0xea10 | goto label_15;
| }
0x0000eae6 movs r0, r0 |
0x0000eae8 lsls r2, r6, 9 | r2 = r6 << 9;
0x0000eaea movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x0000eaec bhs 0xeb74 | void (*0xeb74)() ();
| }
0x0000eaee movs r0, r0 |
| if (r0 >= r0) {
0x0000eaf0 bhs 0xebec | void (*0xebec)() ();
| }
0x0000eaf2 movs r0, r0 |
| if (r0 >= r0) {
0x0000eaf4 bhs 0xeb28 | void (*0xeb28)() ();
| }
0x0000eaf6 movs r0, r0 |
| if (r0 >= r0) {
0x0000eaf8 bhs 0xeb0c | void (*0xeb0c)() ();
| }
0x0000eafa movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xeafc */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0000eafc () | void fcn_0000eafc (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_28h_3;
| int16_t var_4h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_3ch;
| int16_t var_34h_2;
| int16_t var_6ch_2;
| int16_t var_24h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000eafc push.w {r4, r5, r6, r7, r8, lr} |
0x0000eb00 mov r8, r2 | r8 = r2;
0x0000eb02 ldr r2, [pc, 0x150] | r2 = *(0xec56);
0x0000eb04 sub sp, 0x40 |
0x0000eb06 mov r4, r0 | r4 = r0;
0x0000eb08 mov r5, r1 | r5 = r1;
0x0000eb0a ldr r3, [pc, 0x14c] | r3 = *(0xec5a);
0x0000eb0c add r7, sp, 0x28 | r7 += var_28h;
0x0000eb0e ldr r6, [pc, 0x14c] |
0x0000eb10 add r2, pc | r2 += pc;
0x0000eb12 mov ip, r7 |
0x0000eb14 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000eb16 add r6, pc | r6 = 0x1d778;
0x0000eb18 add.w lr, r6, 0x48 | lr = r6 + 0x48;
0x0000eb1c ldr r3, [r3] | r3 = *(r3);
0x0000eb1e str r3, [sp, 0x3c] | var_3ch = r3;
0x0000eb20 mov.w r3, 0 | r3 = 0;
0x0000eb24 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x0000eb28 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0000eb2c add.w r0, r6, 0x5c | r0 = r6 + 0x5c;
0x0000eb30 ldr.w r3, [lr] | r3 = *(lr);
0x0000eb34 movs r2, 3 | r2 = 3;
0x0000eb36 movw r1, 0x211 | r1 = 0x211;
0x0000eb3a invalid |
0x0000eb3c adds r0, 0 | r0 += 0;
0x0000eb3e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000eb40 strb r6, [sb], 0x63 | *(sb) = r6;
| sb += 0x63;
0x0000eb44 cmp r3, 0 |
| if (r3 != 0) {
0x0000eb46 beq 0xebe0 |
0x0000eb48 movs r2, 2 | r2 = 2;
0x0000eb4a sub.w r1, r5, 0x3e8 | r1 = r5 - 0x3e8;
0x0000eb4e movw r3, 0x3e9 | r3 = 0x3e9;
0x0000eb52 str r2, [sp, 0x1c] | var_1ch = r2;
0x0000eb54 cmp r1, 0xf |
0x0000eb56 it hi |
| if (r1 <= 0xf) {
0x0000eb58 movhi r5, r3 | r5 = r3;
| }
0x0000eb5a cmp.w r8, 0 |
| if (r8 == 0) {
0x0000eb5e beq 0xec20 | goto label_14;
| }
0x0000eb60 mov r0, r8 | r0 = r8;
0x0000eb62 blx 0x3258 | r0 = unlink (r0);
0x0000eb66 adds r2, r0, 2 | r2 = r0 + 2;
0x0000eb68 ldr r0, [pc, 0xf4] |
0x0000eb6a mov.w r1, 0x220 | r1 = 0x220;
0x0000eb6e str r2, [sp, 0x1c] | var_1ch = r2;
0x0000eb70 add r0, pc | r0 = 0x1d7d4;
0x0000eb72 invalid |
0x0000eb74 invalid |
0x0000eb78 cmp r0, 0 |
| if (r0 == 0) {
0x0000eb7a beq 0xebf4 | goto label_15;
| }
| label_2:
0x0000eb7c rev16 r5, r5 | __asm ("rev16 r5, r5");
0x0000eb7e mov r1, r8 | r1 = r8;
0x0000eb80 strh r5, [r0] | *(r0) = r5;
0x0000eb82 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000eb84 adds r0, 2 | r0 += 2;
0x0000eb86 blx 0x3300 | pthread_cond_destroy ();
| label_0:
0x0000eb8a add r1, sp, 0x1c | r1 += var_1ch;
0x0000eb8c add r3, sp, 0x18 | r3 += var_18h;
0x0000eb8e str r1, [sp] | *(sp) = r1;
0x0000eb90 movs r2, 8 | r2 = 8;
0x0000eb92 mov r1, r4 | r1 = r4;
0x0000eb94 add r0, sp, 0x20 | r0 += var_20h;
0x0000eb96 str r7, [sp, 4] | var_4h = r7;
0x0000eb98 bl 0xe4e8 | fcn_0000e4e8 (r0, r1, r2, r3, r4, r5);
0x0000eb9c ldr.w ip, [r4, 0x1c] | ip = *((r4 + 0x1c));
0x0000eba0 ldrd r6, lr, [sp, 0x20] | __asm ("ldrd r6, lr, [var_20h]");
0x0000eba4 cmp.w ip, 0 |
| if (ip == 0) {
| label_4:
0x0000eba8 beq 0xec38 | goto label_16;
| }
0x0000ebaa ldm r7!, {r0, r1, r2, r3} | r0 = *(r7!);
| r1 = *((r7! + 4));
| r2 = *((r7! + 8));
| r3 = *((r7! + 12));
0x0000ebac mov r5, sp | r5 = sp;
0x0000ebae stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x0000ebb0 mov r2, r6 | r2 = r6;
0x0000ebb2 ldr r3, [r7] | r3 = *(r7);
0x0000ebb4 mov r0, ip | r0 = ip;
0x0000ebb6 str r3, [r5] | *(r5) = r3;
0x0000ebb8 mov r3, lr | r3 = lr;
0x0000ebba ldr r1, [r4] | r1 = *(r4);
| label_5:
0x0000ebbc bl 0x18b40 | fcn_00018b40 (r0, r1, r2, r3, r4, r5, r6);
| label_1:
0x0000ebc0 ldr r5, [pc, 0xa0] |
0x0000ebc2 mov r2, r6 | r2 = r6;
0x0000ebc4 movw r1, 0x235 | r1 = 0x235;
0x0000ebc8 add r5, pc | r5 = 0x1d830;
0x0000ebca mov r0, r5 | r0 = r5;
0x0000ebcc bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ebd0 movs r3, 0 | r3 = 0;
0x0000ebd2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0000ebd4 movw r1, 0x239 | r1 = 0x239;
0x0000ebd8 mov r0, r5 | r0 = r5;
0x0000ebda str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x0000ebdc bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x0000ebe0 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
| if (r2 == 0) {
0x0000ebe2 cbz r2, 0xebf4 | goto label_15;
| }
0x0000ebe4 ldr r0, [pc, 0x80] | r0 = *(0xec68);
0x0000ebe6 invalid |
| label_3:
0x0000ebe8 movs r1, 0x3d | r1 = 0x3d;
0x0000ebea add r0, pc | r0 += pc;
0x0000ebec bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ebf0 movs r3, 0 | r3 = 0;
0x0000ebf2 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| do {
| label_15:
0x0000ebf4 ldr r0, [pc, 0x74] |
0x0000ebf6 movs r3, 3 | r3 = 3;
0x0000ebf8 movs r2, 0 | r2 = 0;
0x0000ebfa movw r1, 0x241 | r1 = 0x241;
0x0000ebfe add r0, pc | r0 = 0x1d86e;
0x0000ec00 adds r0, 0x5c | r0 += 0x5c;
0x0000ec02 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000ec06 ldr r2, [pc, 0x68] |
0x0000ec08 ldr r3, [pc, 0x4c] | r3 = *(0xec58);
0x0000ec0a add r2, pc | r2 = 0x1d880;
0x0000ec0c ldr r3, [r2, r3] | r3 = *(0x1d880);
0x0000ec0e ldr r2, [r3] | r2 = *(0x1d880);
0x0000ec10 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000ec12 eors r2, r3 | r2 ^= r3;
0x0000ec14 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000ec18 bne 0xec4e | goto label_17;
| }
0x0000ec1a add sp, 0x40 |
0x0000ec1c pop.w {r4, r5, r6, r7, r8, pc} |
| label_14:
0x0000ec20 ldr r0, [pc, 0x50] |
0x0000ec22 mov.w r1, 0x220 | r1 = 0x220;
0x0000ec26 add r0, pc | r0 = 0x1d89e;
0x0000ec28 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000ec2c str r0, [sp, 0x18] | var_18h = r0;
0x0000ec2e cmp r0, 0 |
0x0000ec30 beq 0xebf4 |
| } while (r0 == 0);
0x0000ec32 rev16 r5, r5 | __asm ("rev16 r5, r5");
0x0000ec34 strh r5, [r0] | *(r0) = r5;
0x0000ec36 b 0xeb8a | goto label_0;
| label_16:
0x0000ec38 add r3, sp, 0x2c | r3 += var_2ch;
0x0000ec3a ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000ec3c stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000ec40 mov r2, lr | r2 = lr;
0x0000ec42 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000ec44 mov r1, r6 | r1 = r6;
0x0000ec46 ldr r0, [r4] | r0 = *(r4);
0x0000ec48 bl 0x83c4 | fcn_000083c4 (r0, r1, r2, r3);
0x0000ec4c b 0xebc0 | goto label_1;
| label_17:
0x0000ec4e blx 0x348c | fprintf_chk ()
0x0000ec52 nop |
0x0000ec54 lsls r0, r0, 6 | r0 <<= 6;
0x0000ec56 movs r2, r0 | r2 = r0;
0x0000ec58 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000ec5a movs r0, r0 |
| if (r0 < r0) {
0x0000ec5c bmi 0xeb7c | goto label_2;
| }
0x0000ec5e movs r0, r0 |
| if (r0 != r0) {
0x0000ec60 bne 0xec94 | goto label_18;
| }
0x0000ec62 movs r0, r0 |
| if (r0 == r0) {
0x0000ec64 beq 0xebe8 | goto label_3;
| }
0x0000ec66 movs r0, r0 |
| if (r0 == r0) {
0x0000ec68 beq 0xeba8 | goto label_4;
| }
0x0000ec6a movs r0, r0 |
| if (r0 <= r0) {
0x0000ec6c blo 0xebbc | goto label_5;
| }
0x0000ec6e movs r0, r0 |
0x0000ec70 lsls r6, r0, 2 | r6 = r0 << 2;
0x0000ec72 movs r2, r0 | r2 = r0;
| if (r2 == r0) {
0x0000ec74 beq 0xed3c | goto label_19;
| }
0x0000ec76 movs r0, r0 |
| label_18:
0x0000ec94 ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x0000ec96 movw r1, 0x3ea | r1 = 0x3ea;
0x0000ec9a ldr r3, [r3] | r3 = *(r3);
0x0000ec9c str r3, [sp, 0x6c] | var_6ch = r3;
0x0000ec9e mov.w r3, 0 | r3 = 0;
0x0000eca2 str r4, [sp, 0x34] | var_34h = r4;
0x0000eca4 ldr r4, [pc, 0x378] |
0x0000eca6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000ecaa add r4, pc | r4 = 0x1dcce;
0x0000ecac ldr r0, [r4, 0x10] | r0 = *(0x1dcde);
0x0000ecae cmp r0, 0 |
| if (r0 == 0) {
0x0000ecb0 beq.w 0xef10 | goto label_20;
| }
| label_9:
0x0000ecb4 ldr r5, [r0] | r5 = *(r0);
| if (r5 != 0) {
0x0000ecb6 cbz r5, 0xecba |
0x0000ecb8 ldr r5, [r5, 8] | r5 = *((r5 + 8));
| }
0x0000ecba movs r3, 2 | r3 = 2;
0x0000ecbc add.w fp, sp, 0x48 |
0x0000ecc0 str r3, [sp, 0x18] | *((sp + 0x18)) = r3;
0x0000ecc2 add.w sl, sp, 0x44 | sl += var_44h;
0x0000ecc6 ldr r3, [pc, 0x35c] |
0x0000ecc8 add r3, pc | r3 = 0x1dcf2;
0x0000ecca str r3, [sp, 0x24] | var_24h = r3;
0x0000eccc ldr r3, [pc, 0x358] |
0x0000ecce add r3, pc | r3 = 0x1dcfa;
0x0000ecd0 str r3, [sp, 0x20] | *((sp + 0x20)) = r3;
0x0000ecd2 ldr r3, [pc, 0x358] |
0x0000ecd4 add r3, pc | r3 = 0x1dd06;
0x0000ecd6 str r3, [sp, 0x1c] | *((sp + 0x1c)) = r3;
0x0000ecd8 ldr r3, [pc, 0x354] |
0x0000ecda add r3, pc | r3 = 0x1dd0e;
0x0000ecdc str r3, [sp, 0x2c] | *((sp + 0x2c)) = r3;
| do {
| label_12:
0x0000ecde movs r2, 0 | r2 = 0;
0x0000ece0 mov r3, fp | r3 = fp;
0x0000ece2 str r2, [sp, 0x44] | var_44h = r2;
0x0000ece4 movs r1, 2 | r1 = 2;
0x0000ece6 str r2, [sp, 0x68] | var_68h = r2;
0x0000ece8 mov r0, sb | r0 = sb;
0x0000ecea mov r2, sl | r2 = sl;
0x0000ecec bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000ecf0 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000ecf2 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000ecf4 beq.w 0xeeca | goto label_21;
| }
0x0000ecf8 cmp r0, 0 |
| if (r0 == 0) {
0x0000ecfa beq.w 0xef00 | goto label_22;
| }
0x0000ecfe ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000ed00 cmp r3, 1 |
| if (r3 < 1) {
0x0000ed02 bls.w 0xef00 | goto label_22;
| }
0x0000ed06 ldrb r7, [r0] | r7 = *(r0);
0x0000ed08 ldr r2, [sp, 0x18] | r2 = *((sp + 0x18));
0x0000ed0a ands r3, r7, 0xf | r3 = r7 & 0xf;
0x0000ed0e it ne |
| if (r3 == r7) {
0x0000ed10 movne r2, r3 | r2 = r3;
| }
0x0000ed12 lsrs r7, r7, 7 | r7 >>= 7;
0x0000ed14 mov r3, r2 | r3 = r2;
0x0000ed16 str r2, [sp, 0x18] | *((sp + 0x18)) = r2;
0x0000ed18 cmp r3, 0xa |
0x0000ed1a sub.w r2, r2, 3 | r2 -= 3;
0x0000ed1e ite ls |
| if (r3 > 0xa) {
0x0000ed20 movls r3, 0 | r3 = 0;
| }
| if (r3 <= 0xa) {
0x0000ed22 movhi r3, 1 | r3 = 1;
| }
0x0000ed24 cmp r2, 4 |
0x0000ed26 it ls |
| if (r2 > 4) {
0x0000ed28 orrls r3, r3, 1 | r3 |= 1;
| }
0x0000ed2c cmp r3, 0 |
| if (r3 != 0) {
0x0000ed2e bne.w 0xeeca | goto label_21;
| }
0x0000ed32 ldrb.w r8, [r0, 1] | r8 = *((r0 + 1));
0x0000ed36 and r4, r8, 0x7f | r4 = r8 & 0x7f;
0x0000ed3a cmp r4, 0x7e |
| label_19:
0x0000ed3c lsr.w r8, r8, 7 | r8 >>= 7;
| if (r4 == 0x7e) {
0x0000ed40 beq.w 0xee8e | goto label_23;
| }
0x0000ed44 cmp r4, 0x7f |
| if (r4 == 0x7f) {
0x0000ed46 beq 0xee22 | goto label_24;
| }
| label_6:
0x0000ed48 cmp.w r8, 0 |
| if (r8 != 0) {
0x0000ed4c beq 0xed70 |
0x0000ed4e mov r3, fp | r3 = fp;
0x0000ed50 mov r2, sl | r2 = sl;
0x0000ed52 movs r1, 4 | r1 = 4;
0x0000ed54 mov r0, sb | r0 = sb;
0x0000ed56 bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000ed5a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000ed5c adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000ed5e beq.w 0xeeca | goto label_21;
| }
0x0000ed62 cmp r0, 0 |
| if (r0 == 0) {
0x0000ed64 beq.w 0xeeca | goto label_21;
| }
0x0000ed68 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000ed6a cmp r3, 3 |
| if (r3 < 3) {
0x0000ed6c bls.w 0xef00 | goto label_22;
| }
| }
0x0000ed70 mov r3, fp | r3 = fp;
0x0000ed72 mov r2, sl | r2 = sl;
0x0000ed74 mov r1, r4 | r1 = r4;
0x0000ed76 mov r0, sb | r0 = sb;
0x0000ed78 bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000ed7c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000ed7e mov r6, r0 | r6 = r0;
0x0000ed80 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000ed82 beq.w 0xeeca | goto label_21;
| }
0x0000ed86 cmp r0, 0 |
| if (r0 == 0) {
0x0000ed88 beq.w 0xeeca | goto label_21;
| }
0x0000ed8c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000ed8e cmp r3, r4 |
| if (r3 <= r4) {
0x0000ed90 blo.w 0xef00 | goto label_22;
| }
0x0000ed94 cmp.w r8, 0 |
| if (r8 != 0) {
0x0000ed98 bne 0xee5e | goto label_25;
| }
| label_8:
0x0000ed9a adds r3, 8 | r3 += 8;
0x0000ed9c cmp r5, 0 |
| if (r5 == 0) {
0x0000ed9e beq 0xee44 | goto label_26;
| }
0x0000eda0 ldr r4, [r5] | r4 = *(r5);
0x0000eda2 mov r2, r5 | r2 = r5;
0x0000eda4 ldr r0, [sp, 0x20] | r0 = *((sp + 0x20));
0x0000eda6 movw r1, 0x497 | r1 = 0x497;
0x0000edaa add r3, r4 | r3 += r4;
0x0000edac bl 0x10220 | r0 = fcn_00010220 (r0, r1, r2, r3);
0x0000edb0 mov r5, r0 | r5 = r0;
0x0000edb2 cmp r0, 0 |
| if (r0 == 0) {
0x0000edb4 beq.w 0xef18 | goto label_27;
| }
0x0000edb8 add.w r0, r4, 8 | r0 = r4 + 8;
| label_7:
0x0000edbc ldr r3, [sp, 0x1c] | r3 = *((sp + 0x1c));
0x0000edbe ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
| if (r3 != 0) {
0x0000edc0 cbz r3, 0xedc8 |
0x0000edc2 ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x0000edc4 cbz r3, 0xedc8 | goto label_28;
| }
0x0000edc6 str r5, [r3, 8] | *((r3 + 8)) = r5;
| }
| label_28:
0x0000edc8 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0000edca mov r1, r6 | r1 = r6;
0x0000edcc add r0, r5 | r0 += r5;
0x0000edce blx 0x32a0 | pthread_cond_signal ();
0x0000edd2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000edd4 mov r2, sl | r2 = sl;
0x0000edd6 movs r1, 0 | r1 = 0;
0x0000edd8 mov r0, sb | r0 = sb;
0x0000edda add r3, r4 | r3 += r4;
0x0000eddc str r3, [r5] | *(r5) = r3;
0x0000edde mov r3, fp | r3 = fp;
0x0000ede0 bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000ede4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000ede6 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000ede8 beq 0xeeca | goto label_21;
| }
0x0000edea cmp r7, 0 |
0x0000edec beq.w 0xecde |
| } while (r7 == 0);
0x0000edf0 ldr r2, [sp, 0x18] | r2 = *((sp + 0x18));
0x0000edf2 sub.w r3, r2, 9 | r3 = r2 - 9;
0x0000edf6 cmp r3, 1 |
| if (r3 < 1) {
0x0000edf8 bls.w 0xef2c | goto label_29;
| }
0x0000edfc ldr r3, [sp, 0x18] | r3 = *((sp + 0x18));
0x0000edfe cmp r3, 8 |
| if (r3 == 8) {
0x0000ee00 beq 0xeeb0 | goto label_30;
| }
0x0000ee02 ldr r3, [pc, 0x230] |
0x0000ee04 add r3, pc | r3 = 0x1de3e;
0x0000ee06 ldr r0, [r3, 0x10] | r0 = *(0x1de4e);
0x0000ee08 ldr r3, [r0, 0xc] | r3 = *(0x1de5a);
0x0000ee0a cmp r3, 0 |
| if (r3 == 0) {
0x0000ee0c beq.w 0xef20 | goto label_31;
| }
| label_11:
0x0000ee10 ldrd r3, r1, [r5] | __asm ("ldrd r3, r1, [r5]");
0x0000ee14 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0000ee16 subs r3, r3, r1 | r3 -= r1;
0x0000ee18 ldr r1, [sp, 0x28] | r1 = *((sp + 0x28));
0x0000ee1a adds r2, 0x16 | r2 += 0x16;
0x0000ee1c str r3, [r1] | *(r1) = r3;
| if (r2 == 0x16) {
0x0000ee1e beq 0xef06 | goto label_32;
| }
0x0000ee20 b 0xeed0 | goto label_10;
| label_24:
0x0000ee22 mov r3, fp | r3 = fp;
0x0000ee24 mov r2, sl | r2 = sl;
0x0000ee26 movs r1, 8 | r1 = 8;
0x0000ee28 mov r0, sb | r0 = sb;
0x0000ee2a bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000ee2e ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000ee30 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000ee32 beq 0xeeca | goto label_21;
| }
0x0000ee34 cmp r0, 0 |
| if (r0 == 0) {
0x0000ee36 beq 0xeeca | goto label_21;
| }
0x0000ee38 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000ee3a cmp r3, 7 |
| if (r3 < 7) {
0x0000ee3c bls 0xef00 | goto label_22;
| }
0x0000ee3e ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x0000ee40 rev r4, r4 | r4 = SWAP32 (r4);
0x0000ee42 b 0xed48 | goto label_6;
| label_26:
0x0000ee44 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0000ee46 mov r2, r3 | r2 = r3;
0x0000ee48 movw r1, 0x48f | r1 = 0x48f;
0x0000ee4c bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000ee50 mov r5, r0 | r5 = r0;
0x0000ee52 cmp r0, 0 |
| if (r0 == 0) {
0x0000ee54 beq 0xef18 | goto label_27;
| }
0x0000ee56 movs r4, 0 | r4 = 0;
0x0000ee58 movs r0, 8 | r0 = 8;
0x0000ee5a str r4, [r5, 4] | *((r5 + 4)) = r4;
0x0000ee5c b 0xedbc | goto label_7;
| label_25:
0x0000ee5e cmp r4, 0 |
| if (r4 == 0) {
0x0000ee60 beq 0xed9a | goto label_8;
| }
0x0000ee62 subs r4, 1 | r4--;
0x0000ee64 subs r3, r0, 1 | r3 = r0 - 1;
0x0000ee66 add r4, r0 | r4 += r0;
0x0000ee68 movs r1, 0 | r1 = 0;
0x0000ee6a b 0xee78 |
| while (r4 != r3) {
0x0000ee6c and r2, r2, 3 | r2 &= 3;
0x0000ee70 adds r2, 0x70 | r2 += 0x70;
0x0000ee72 add r2, sp, r2 | r2 = sp + r2;
0x0000ee74 ldrb r1, [r2, -0x8] | r1 = *((r2 - 0x8));
0x0000ee78 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0000ee7a eors r1, r2 | r1 ^= r2;
0x0000ee7c adds r2, r3, 2 | r2 = r3 + 2;
0x0000ee7e strb r1, [r3, 1] | *((r3 + 1)) = r1;
0x0000ee80 adds r3, 1 | r3++;
0x0000ee82 cmp r4, r3 |
0x0000ee84 sub.w r2, r2, r6 | r2 -= r6;
0x0000ee88 bne 0xee6c |
| }
0x0000ee8a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000ee8c b 0xed9a | goto label_8;
| label_23:
0x0000ee8e mov r3, fp | r3 = fp;
0x0000ee90 mov r2, sl | r2 = sl;
0x0000ee92 movs r1, 2 | r1 = 2;
0x0000ee94 mov r0, sb | r0 = sb;
0x0000ee96 bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000ee9a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000ee9c adds r3, 1 | r3++;
| if (r3 != 1) {
0x0000ee9e beq 0xeeca |
| if (r0 == 0) {
0x0000eea0 cbz r0, 0xeeca | goto label_21;
| }
0x0000eea2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0000eea4 cmp r3, 1 |
| if (r3 < 1) {
0x0000eea6 bls 0xef00 | goto label_22;
| }
0x0000eea8 ldrh r4, [r0] | r4 = *(r0);
0x0000eeaa rev16 r4, r4 | __asm ("rev16 r4, r4");
0x0000eeac uxth r4, r4 | r4 = (int16_t) r4;
0x0000eeae b 0xed48 | goto label_6;
| label_30:
0x0000eeb0 ldr r0, [pc, 0x184] |
0x0000eeb2 mov r2, r5 | r2 = r5;
0x0000eeb4 movw r1, 0x4b9 | r1 = 0x4b9;
0x0000eeb8 add r0, pc | r0 = 0x1def4;
0x0000eeba bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000eebe movs r2, 0 | r2 = 0;
0x0000eec0 movw r1, 0x3e9 | r1 = 0x3e9;
0x0000eec4 mov r0, sb | r0 = sb;
0x0000eec6 bl 0xeafc | fcn_0000eafc (r0, r1, r2);
| }
| label_21:
0x0000eeca mov.w r3, -1 | r3 = -1;
0x0000eece str r3, [sp, 0x34] | var_34h = r3;
| do {
| label_10:
0x0000eed0 ldr r0, [pc, 0x168] |
0x0000eed2 movs r3, 3 | r3 = 3;
0x0000eed4 add r2, sp, 0x34 | r2 += var_34h;
0x0000eed6 movw r1, 0x4cb | r1 = 0x4cb;
0x0000eeda add r0, pc | r0 = 0x1df1a;
0x0000eedc adds r0, 0x6c | r0 += 0x6c;
0x0000eede bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000eee2 ldr r2, [pc, 0x15c] |
0x0000eee4 ldr r3, [pc, 0x134] | r3 = *(0xf01c);
0x0000eee6 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0000eee8 add r2, pc | r2 = 0x1df2e;
0x0000eeea ldr r3, [r2, r3] | r3 = *(0x1df2e);
0x0000eeec ldr r2, [r3] | r2 = *(0x1df2e);
0x0000eeee ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0000eef0 eors r2, r3 | r2 ^= r3;
0x0000eef2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000eef6 bne.w 0xf010 | goto label_33;
| }
0x0000eefa add sp, 0x74 |
0x0000eefc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_22:
0x0000ef00 mvn r3, 0x15 | r3 = ~0x15;
0x0000ef04 str r3, [sp, 0x34] | var_34h = r3;
| label_32:
0x0000ef06 ldr r3, [pc, 0x13c] |
0x0000ef08 movs r2, 0 | r2 = 0;
0x0000ef0a add r3, pc | r3 = 0x1df54;
0x0000ef0c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0000ef0e b 0xeed0 |
| } while (1);
| label_20:
0x0000ef10 bl 0xd5ac | fcn_0000d5ac ();
0x0000ef14 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0000ef16 b 0xecb4 | goto label_9;
| label_27:
0x0000ef18 mvn r3, 0x62 | r3 = ~0x62;
0x0000ef1c str r3, [sp, 0x34] | var_34h = r3;
0x0000ef1e b 0xeed0 | goto label_10;
| label_31:
0x0000ef20 ldr r2, [r5] | r2 = *(r5);
0x0000ef22 mov r1, r5 | r1 = r5;
0x0000ef24 adds r2, 8 | r2 += 8;
0x0000ef26 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x0000ef2a b 0xee10 | goto label_11;
| label_29:
0x0000ef2c cmp r2, 9 |
0x0000ef2e beq 0xef42 |
| while (1) {
0x0000ef30 ldr r0, [pc, 0x114] |
0x0000ef32 mov r2, r5 | r2 = r5;
0x0000ef34 movw r1, 0x4b3 | r1 = 0x4b3;
0x0000ef38 movs r5, 0 | r5 = 0;
0x0000ef3a add r0, pc | r0 = 0x1df86;
0x0000ef3c bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000ef40 b 0xecde | goto label_12;
0x0000ef42 mov r3, r5 | r3 = r5;
0x0000ef44 movs r2, 3 | r2 = 3;
0x0000ef46 ldr r1, [r3], 8 | r1 = *(r3);
| r3 += 8;
0x0000ef4a strd r3, r1, [sp, 0x38] | __asm ("strd r3, r1, [sp, 0x38]");
0x0000ef4e movw r1, 0x381 | r1 = 0x381;
0x0000ef52 ldr r3, [sp, 0x2c] | r3 = *((sp + 0x2c));
0x0000ef54 add.w r0, r3, 0x84 | r0 = r3 + 0x84;
0x0000ef58 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000ef5c ldr.w r3, [sb, 0x34] | r3 = *((sb + 0x34));
| if (r3 != 0) {
0x0000ef60 cbnz r3, 0xef76 | goto label_34;
| }
| label_13:
0x0000ef62 ldr r0, [pc, 0xe8] |
0x0000ef64 movs r3, 3 | r3 = 3;
0x0000ef66 movs r2, 0 | r2 = 0;
0x0000ef68 movw r1, 0x399 | r1 = 0x399;
0x0000ef6c add r0, pc | r0 = 0x1dfbe;
0x0000ef6e adds r0, 0x84 | r0 += 0x84;
0x0000ef70 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000ef74 b 0xef30 |
| }
| label_34:
0x0000ef76 movs r3, 0 | r3 = 0;
0x0000ef78 add r7, sp, 0x38 | r7 += var_38h;
0x0000ef7a add r4, sp, 0x54 | r4 += var_54h;
0x0000ef7c movs r6, 1 | r6 = 1;
0x0000ef7e movs r2, 0xa | r2 = 0xa;
0x0000ef80 mov r1, sb | r1 = sb;
0x0000ef82 add r0, sp, 0x4c | r0 += var_4ch;
0x0000ef84 strd r3, r3, [sp, 0x40] | __asm ("strd r3, r3, [sp, 0x40]");
0x0000ef88 str r3, [sp, 0x48] | var_48h = r3;
0x0000ef8a str r3, [sp, 0x64] | var_64h = r3;
0x0000ef8c add r3, sp, 0x40 | r3 += var_40h;
0x0000ef8e str r7, [sp, 0x58] | var_58h = r7;
0x0000ef90 add r7, sp, 0x3c | r7 = sp + 0x3c;
0x0000ef92 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0000ef96 str r4, [sp, 4] | *((sp + 4)) = r4;
0x0000ef98 str r6, [sp, 0x54] | var_54h = r6;
0x0000ef9a str r7, [sp, 0x5c] | var_5ch = r7;
0x0000ef9c str.w fp, [sp, 0x60] | __asm ("str.w fp, [var_60h]");
0x0000efa0 bl 0xe4e8 | fcn_0000e4e8 (r0, r1, r2, r3, r4, r5);
0x0000efa4 ldr r2, [pc, 0xa8] |
0x0000efa6 mov r1, r6 | r1 = r6;
0x0000efa8 movs r0, 4 | r0 = 4;
0x0000efaa ldrd r6, r7, [sp, 0x4c] | __asm ("ldrd r6, r7, [var_4ch]");
0x0000efae add r2, pc | r2 = 0x1e002;
0x0000efb0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000efb4 ldr.w ip, [sb, 0x1c] | ip = *((sb + 0x1c));
0x0000efb8 cmp.w ip, 0 |
| if (ip == 0) {
0x0000efbc beq 0xeff8 | goto label_35;
| }
0x0000efbe ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x0000efc0 mov lr, sp | lr = sp;
0x0000efc2 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0000efc6 mov r0, ip | r0 = ip;
0x0000efc8 ldr r3, [r4] | r3 = *(r4);
0x0000efca mov r2, r6 | r2 = r6;
0x0000efcc str.w r3, [lr] | __asm ("str.w r3, [lr]");
0x0000efd0 mov r3, r7 | r3 = r7;
0x0000efd2 ldr.w r1, [sb] | r1 = *(sb);
0x0000efd6 bl 0x18b40 | fcn_00018b40 (r0, r1, r2, r3, r4, r5, r6);
| do {
0x0000efda ldr r4, [pc, 0x78] |
0x0000efdc mov r2, r6 | r2 = r6;
0x0000efde movw r1, 0x396 | r1 = 0x396;
0x0000efe2 add r4, pc | r4 = 0x1e03c;
0x0000efe4 mov r0, r4 | r0 = r4;
0x0000efe6 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000efea ldr r2, [sp, 0x40] | r2 = var_40h;
0x0000efec mov r0, r4 | r0 = r4;
0x0000efee movw r1, 0x397 | r1 = 0x397;
0x0000eff2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000eff6 b 0xef62 | goto label_13;
| label_35:
0x0000eff8 add r3, sp, 0x58 | r3 += var_58h;
0x0000effa ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000effc stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000f000 mov r2, r7 | r2 = r7;
0x0000f002 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0000f004 mov r1, r6 | r1 = r6;
0x0000f006 ldr.w r0, [sb] | r0 = *(sb);
0x0000f00a bl 0x83c4 | fcn_000083c4 (r0, r1, r2, r3);
0x0000f00e b 0xefda |
| } while (1);
| label_33:
0x0000f010 blx 0x348c | fprintf_chk ()
| if (ip > 0) {
0x0000f014 blo 0xf054 |
0x0000f016 movs r0, r0 |
0x0000f018 invalid |
| }
0x0000f054 ldm r4!, {r1, r2, r5, r7} | r1 = *(r4!);
| r2 = *((r4! + 4));
| r5 = *((r4! + 8));
| r7 = *((r4! + 12));
0x0000f056 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xf058 */
| #include <stdint.h>
|
; (fcn) fcn.0000f058 () | void fcn_0000f058 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0000f058 ldr r3, [pc, 0xd8] |
0x0000f05a movs r2, 3 | r2 = 3;
0x0000f05c push {r4, r5, r6, lr} |
0x0000f05e mov r6, r1 | r6 = r1;
0x0000f060 ldr r1, [pc, 0xd4] |
0x0000f062 mov r4, r0 | r4 = r0;
0x0000f064 add r3, pc | r3 = 0x1e19c;
0x0000f066 sub sp, 0x10 |
0x0000f068 add.w r0, r3, 0x94 | r0 = r3 + 0x94;
0x0000f06c ldr r3, [pc, 0xcc] | r3 = *(0xf13c);
0x0000f06e add r1, pc | r1 = 0x1e1aa;
0x0000f070 mov.w r5, -1 | r5 = -1;
0x0000f074 ldr r3, [r1, r3] |
0x0000f076 mov.w r1, 0x254 | r1 = 0x254;
0x0000f07a ldr r3, [r3] | r3 = *(0x1e1aa);
0x0000f07c str r3, [sp, 0xc] | var_ch = r3;
0x0000f07e mov.w r3, 0 | r3 = 0;
0x0000f082 str r5, [sp, 4] | var_4h = r5;
0x0000f084 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000f088 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x0000f08a cbz r3, 0xf0ba |
0x0000f08c ldr r3, [pc, 0xb0] |
0x0000f08e add r3, pc | r3 = 0x1e1d2;
0x0000f090 ldr r5, [r3, 0x10] | r5 = *(0x1e1e2);
0x0000f092 cmp r5, 0 |
| if (r5 == 0) {
0x0000f094 beq 0xf0f8 | goto label_2;
| }
0x0000f096 ldr r5, [r5] | r5 = *(r5);
| if (r5 == 0) {
0x0000f098 cbz r5, 0xf0f8 | goto label_2;
| }
0x0000f09a ldr r5, [r5, 8] | r5 = *((r5 + 8));
| if (r5 == 0) {
0x0000f09c cbz r5, 0xf0f8 | goto label_2;
| }
0x0000f09e ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x0000f0a2 cmp r2, r3 |
| if (r2 == r3) {
0x0000f0a4 beq 0xf0f8 | goto label_2;
| }
0x0000f0a6 cmp r3, r2 |
| if (r3 >= r2) {
0x0000f0a8 bhs 0xf0cc | goto label_0;
| }
| label_1:
0x0000f0aa adds r2, r3, 1 | r2 = r3 + 1;
0x0000f0ac add r3, r5 | r3 += r5;
0x0000f0ae str r2, [r5, 4] | *((r5 + 4)) = r2;
0x0000f0b0 movs r2, 0 | r2 = 0;
0x0000f0b2 ldrb r3, [r3, 8] | r3 = *((r3 + 8));
0x0000f0b4 str r2, [sp, 4] | var_4h = r2;
0x0000f0b6 strb r3, [r6] | *(r6) = r3;
0x0000f0b8 b 0xf0cc |
| } else {
0x0000f0ba ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0000f0bc ldr r3, [r4] | r3 = *(r4);
0x0000f0be cmp r0, 0 |
| if (r0 == 0) {
0x0000f0c0 beq 0xf124 | goto label_3;
| }
0x0000f0c2 mov r2, r6 | r2 = r6;
0x0000f0c4 mov r1, r3 | r1 = r3;
0x0000f0c6 bl 0x18920 | fcn_00018920 (r0, r1, r2);
0x0000f0ca str r0, [sp, 4] | var_4h = r0;
| }
| do {
| label_0:
0x0000f0cc ldr r0, [pc, 0x74] |
0x0000f0ce movs r3, 3 | r3 = 3;
0x0000f0d0 add r2, sp, 4 | r2 += var_4h;
0x0000f0d2 movw r1, 0x279 | r1 = 0x279;
0x0000f0d6 add r0, pc | r0 = 0x1e21e;
0x0000f0d8 adds r0, 0x94 | r0 += 0x94;
0x0000f0da bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000f0de ldr r2, [pc, 0x68] |
0x0000f0e0 ldr r3, [pc, 0x58] | r3 = *(0xf13c);
0x0000f0e2 ldr r0, [sp, 4] | r0 = var_4h;
0x0000f0e4 add r2, pc | r2 = 0x1e232;
0x0000f0e6 ldr r3, [r2, r3] | r3 = *(0x1e232);
0x0000f0e8 ldr r2, [r3] | r2 = *(0x1e232);
0x0000f0ea ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000f0ec eors r2, r3 | r2 ^= r3;
0x0000f0ee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000f0f2 bne 0xf130 | goto label_4;
| }
0x0000f0f4 add sp, 0x10 |
0x0000f0f6 pop {r4, r5, r6, pc} |
| label_2:
0x0000f0f8 movs r3, 0 | r3 = 0;
0x0000f0fa add r1, sp, 8 | r1 += var_8h;
0x0000f0fc mov r0, r4 | r0 = r4;
0x0000f0fe str r3, [sp, 8] | var_8h = r3;
0x0000f100 bl 0xec78 | fcn_0000ec78 (r0, r1);
0x0000f104 str r0, [sp, 4] | var_4h = r0;
0x0000f106 cmp r0, 0 |
0x0000f108 bne 0xf0cc |
| } while (r0 != 0);
0x0000f10a ldr r3, [pc, 0x40] |
0x0000f10c add r3, pc |
0x0000f10e ldr r3, [r3, 0x10] |
0x0000f110 ldr r3, [r3] | r3 = *(0x1e26e);
| if (r3 != 0) {
0x0000f112 cbz r3, 0xf116 |
0x0000f114 ldr r5, [r3, 8] | r5 = *((r3 + 8));
| }
0x0000f116 cmp r5, 0 |
| if (r5 == 0) {
0x0000f118 beq 0xf0cc | goto label_0;
| }
0x0000f11a ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x0000f11e cmp r3, r2 |
| if (r3 >= r2) {
0x0000f120 bhs 0xf0cc | goto label_0;
| }
0x0000f122 b 0xf0aa | goto label_1;
| label_3:
0x0000f124 mov r1, r6 | r1 = r6;
0x0000f126 mov r0, r3 | r0 = r3;
0x0000f128 bl 0x8128 | fcn_00008128 (r0, r1);
0x0000f12c str r0, [sp, 4] | var_4h = r0;
0x0000f12e b 0xf0cc | goto label_0;
| label_4:
0x0000f130 blx 0x348c | fprintf_chk ()
0x0000f134 ldm r7!, {r6} | r6 = *(r7!);
0x0000f136 movs r0, r0 |
0x0000f138 stc2 p0, c0, [r2], -4 | __asm ("stc2 p0, c0, [r2], -4");
0x0000f13c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000f13e movs r0, r0 |
0x0000f140 lsls r2, r2, 0x19 | r2 <<= 0x19;
0x0000f142 movs r2, r0 | r2 = r0;
0x0000f144 ldm r6, {r1, r2, r3, r6, r7} | r1 = *(r6);
| r2 = *((r6 + 4));
| r3 = *((r6 + 8));
| r6 = *((r6 + 12));
| r7 = *((r6 + 16));
0x0000f146 movs r0, r0 |
0x0000f148 umull r0, r0, ip, r1 | r0:r0 = ip * r1;
0x0000f14c lsls r4, r2, 0x17 | r4 = r2 << 0x17;
0x0000f14e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xf180 */
| #include <stdint.h>
|
; (fcn) fcn.0000f180 () | void fcn_0000f180 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000f180 push {r5, r6, r8, sb, fp, lr} |
0x0000f184 rors r0, r6 | __asm ("rors r0, r6");
0x0000f186 mov r5, r2 | r5 = r2;
0x0000f188 ldr r2, [pc, 0x17c] |
0x0000f18a mov r6, r0 | r6 = r0;
0x0000f18c add r3, pc | r3 += pc;
0x0000f18e sub sp, 0x18 |
0x0000f190 add.w r0, r3, 0xa4 | r0 = r3 + 0xa4;
0x0000f194 ldr r3, [pc, 0x174] | r3 = *(0xf30c);
0x0000f196 add r2, pc | r2 = 0x1e4a2;
0x0000f198 movs r4, 0 | r4 = 0;
0x0000f19a mov r7, r1 | r7 = r1;
0x0000f19c movw r1, 0x2a5 | r1 = 0x2a5;
0x0000f1a0 ldr r3, [r2, r3] |
0x0000f1a2 movs r2, 3 | r2 = 3;
0x0000f1a4 ldr r3, [r3] | r3 = *(0x1e4a2);
0x0000f1a6 str r3, [sp, 0x14] | var_14h = r3;
0x0000f1a8 mov.w r3, 0 | r3 = 0;
0x0000f1ac str r4, [sp, 0xc] | var_ch = r4;
0x0000f1ae bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000f1b2 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0000f1b4 cmp r3, 0 |
| if (r3 == 0) {
0x0000f1b6 beq 0xf21c | goto label_2;
| }
0x0000f1b8 ldr r4, [pc, 0x154] |
0x0000f1ba add r4, pc | r4 = 0x1e4ce;
0x0000f1bc ldr r0, [r4, 0x10] | r0 = *(0x1e4de);
0x0000f1be cmp r7, 0 |
| if (r7 == 0) {
0x0000f1c0 beq 0xf262 | goto label_3;
| }
0x0000f1c2 cmp r0, 0 |
| if (r0 == 0) {
0x0000f1c4 beq 0xf2b0 | goto label_4;
| }
0x0000f1c6 ldr r3, [r0] | r3 = *(r0);
0x0000f1c8 cmp r3, 0 |
| if (r3 == 0) {
0x0000f1ca beq 0xf2b0 | goto label_4;
| }
0x0000f1cc ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x0000f1ce cmp r4, 0 |
| if (r4 == 0) {
0x0000f1d0 beq 0xf2b0 | goto label_4;
| }
| label_1:
0x0000f1d2 ldrd r3, r2, [r4] | __asm ("ldrd r3, r2, [r4]");
0x0000f1d6 subs r3, r3, r2 | r3 -= r2;
0x0000f1d8 adds r2, 8 | r2 += 8;
0x0000f1da cmp r3, r7 |
0x0000f1dc add r2, r4 | r2 += r4;
0x0000f1de str r2, [sp, 0xc] | var_ch = r2;
0x0000f1e0 str r3, [r5] | *(r5) = r3;
| if (r3 >= r7) {
0x0000f1e2 bhs 0xf210 | goto label_5;
| }
0x0000f1e4 ldr.w r8, [pc, 0x12c] | r8 = *(0x0000f314);
0x0000f1e8 add r8, pc | r8 += pc;
| do {
0x0000f1ea mov r1, r5 | r1 = r5;
0x0000f1ec mov r0, r6 | r0 = r6;
0x0000f1ee bl 0xec78 | r0 = fcn_0000ec78 (r0, r1);
| if (r0 != 0) {
0x0000f1f2 cbnz r0, 0xf234 | goto label_0;
| }
0x0000f1f4 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x0000f1f8 ldr r3, [r3] | r3 = *(r3);
0x0000f1fa ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x0000f1fc ldrd r3, r1, [r4] | __asm ("ldrd r3, r1, [r4]");
0x0000f200 subs r3, r3, r1 | r3 -= r1;
0x0000f202 add.w r2, r1, 8 | r2 = r1 + 8;
0x0000f206 cmp r3, r7 |
0x0000f208 add r2, r4 | r2 += r4;
0x0000f20a str r3, [r5] | *(r5) = r3;
0x0000f20c str r2, [sp, 0xc] | var_ch = r2;
0x0000f20e blo 0xf1ea |
| } while (r3 <= r7);
| label_5:
0x0000f210 cmp r7, r3 |
| if (r7 >= r3) {
0x0000f212 bhs 0xf2d6 | goto label_6;
| }
0x0000f214 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000f216 add r3, r7 | r3 += r7;
0x0000f218 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0000f21a b 0xf234 | goto label_0;
| label_2:
0x0000f21c ldr r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0000f21e ldr r4, [r6] | r4 = *(r6);
0x0000f220 cmp r0, 0 |
| if (r0 == 0) {
0x0000f222 beq 0xf2a0 | goto label_7;
| }
0x0000f224 mov r1, r4 | r1 = r4;
0x0000f226 add r4, sp, 0x10 | r4 += var_10h;
0x0000f228 mov r3, r5 | r3 = r5;
0x0000f22a mov r2, r7 | r2 = r7;
0x0000f22c str r4, [sp] | *(sp) = r4;
0x0000f22e bl 0x18e64 | fcn_00018e64 (r0, r1, r2, r3, r4);
0x0000f232 str r0, [sp, 0xc] | var_ch = r0;
| do {
| label_0:
0x0000f234 ldr r0, [pc, 0xe0] |
0x0000f236 movs r3, 3 | r3 = 3;
0x0000f238 add r2, sp, 0xc | r2 += var_ch;
0x0000f23a mov.w r1, 0x2f4 | r1 = 0x2f4;
0x0000f23e add r0, pc | r0 = 0x1e55a;
0x0000f240 adds r0, 0xa4 | r0 += 0xa4;
0x0000f242 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000f244 ldc2l p10, c4, [r7], {0x35} | __asm ("ldc2l p10, c4, [r7], {0x35}");
0x0000f248 ldr r3, [pc, 0xc0] | r3 = *(0xf30c);
0x0000f24a ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000f24c add r2, pc | r2 += pc;
0x0000f24e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000f250 ldr r2, [r3] | r2 = *(0xf30c);
0x0000f252 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000f254 eors r2, r3 | r2 ^= r3;
0x0000f256 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000f25a bne 0xf300 | goto label_8;
| }
0x0000f25c add sp, 0x18 |
0x0000f25e pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x0000f262 cmp r0, 0 |
0x0000f264 beq 0xf234 |
| } while (r0 == 0);
0x0000f266 ldr r3, [r0] | r3 = *(r0);
0x0000f268 cmp r3, 0 |
| if (r3 == 0) {
0x0000f26a beq 0xf234 | goto label_0;
| }
0x0000f26c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0000f26e cmp r3, 0 |
| if (r3 == 0) {
0x0000f270 beq 0xf234 | goto label_0;
| }
0x0000f272 ldrd r2, r1, [r3] | __asm ("ldrd r2, r1, [r3]");
0x0000f276 cmp r1, r2 |
| if (r1 != r2) {
0x0000f278 bne 0xf234 | goto label_0;
| }
0x0000f27a ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0000f27c adds r1, 8 | r1 += 8;
0x0000f27e add r3, r1 | r3 += r1;
0x0000f280 str r7, [r5] | *(r5) = r7;
0x0000f282 str r3, [sp, 0xc] | var_ch = r3;
| if (r2 != 0) {
0x0000f284 cbz r2, 0xf294 |
0x0000f286 ldr r0, [pc, 0x98] |
0x0000f288 mov.w r1, 0x2b8 | r1 = 0x2b8;
0x0000f28c add r0, pc | r0 = 0x1e5b2;
0x0000f28e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000f292 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
| }
0x0000f294 bl 0xd808 | fcn_0000d808 (r0);
0x0000f298 ldr r3, [pc, 0x88] |
0x0000f29a add r3, pc | r3 = 0x1e5c2;
0x0000f29c str r0, [r3, 0x14] | *((r3 + 0x14)) = r0;
0x0000f29e b 0xf234 | goto label_0;
| label_7:
0x0000f2a0 add r3, sp, 0x10 | r3 += var_10h;
0x0000f2a2 mov r2, r5 | r2 = r5;
0x0000f2a4 mov r1, r7 | r1 = r7;
0x0000f2a6 mov r0, r4 | r0 = r4;
0x0000f2a8 bl 0x81f4 | fcn_000081f4 (r0, r1, r2, r3);
0x0000f2ac str r0, [sp, 0xc] | var_ch = r0;
0x0000f2ae b 0xf234 | goto label_0;
| label_4:
0x0000f2b0 mov r1, r5 | r1 = r5;
0x0000f2b2 mov r0, r6 | r0 = r6;
0x0000f2b4 bl 0xec78 | r0 = fcn_0000ec78 (r0, r1);
0x0000f2b8 cmp r0, 0 |
| if (r0 != 0) {
0x0000f2ba bne 0xf234 | goto label_0;
| }
0x0000f2bc ldr r3, [pc, 0x68] |
0x0000f2be add r3, pc |
0x0000f2c0 ldr r3, [r3, 0x10] | r3 = *(0x1e5fa);
0x0000f2c2 cmp r3, 0 |
| if (r3 == 0) {
0x0000f2c4 beq 0xf234 | goto label_0;
| }
0x0000f2c6 ldr r3, [r3] | r3 = *(r3);
0x0000f2c8 cmp r3, 0 |
| if (r3 == 0) {
0x0000f2ca beq 0xf234 | goto label_0;
| }
0x0000f2cc ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x0000f2ce cmp r4, 0 |
| if (r4 != 0) {
0x0000f2d0 bne.w 0xf1d2 | goto label_1;
| }
0x0000f2d4 b 0xf234 | goto label_0;
| if (r4 != 0) {
| label_6:
0x0000f2d6 bne 0xf234 | goto label_0;
| }
0x0000f2d8 ldr r4, [pc, 0x50] |
0x0000f2da add r4, pc | r4 = 0x1e60a;
0x0000f2dc ldr r0, [r4, 0x10] | r0 = *(0x1e61a);
0x0000f2de cmp r0, 0 |
| if (r0 == 0) {
0x0000f2e0 beq 0xf234 | goto label_0;
| }
0x0000f2e2 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
| if (r2 != 0) {
0x0000f2e4 cbz r2, 0xf2f4 |
0x0000f2e6 ldr r0, [pc, 0x48] |
0x0000f2e8 movw r1, 0x2e7 | r1 = 0x2e7;
0x0000f2ec add r0, pc | r0 = 0x1e622;
0x0000f2ee bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000f2f2 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
| }
0x0000f2f4 bl 0xd808 | fcn_0000d808 (r0);
0x0000f2f8 ldr r3, [pc, 0x38] |
0x0000f2fa add r3, pc | r3 = 0x1e632;
0x0000f2fc str r0, [r3, 0x14] | *((r3 + 0x14)) = r0;
0x0000f2fe b 0xf234 | goto label_0;
| label_8:
0x0000f300 blx 0x348c | fprintf_chk ()
0x0000f304 ldm r6!, {r3, r4} | r3 = *(r6!);
| r4 = *((r6! + 4));
0x0000f306 movs r0, r0 |
0x0000f308 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xf338 */
| #include <stdint.h>
|
; (fcn) fcn.0000f338 () | void fcn_0000f338 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int32_t var_0h_3;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_1ch_2;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000f338 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x0000f33c mov r7, r2 | r7 = r2;
0x0000f33e ldr r2, [pc, 0x178] |
0x0000f340 mov r4, r3 | r4 = r3;
0x0000f342 sub sp, 0x2c |
0x0000f344 mov r5, r0 | r5 = r0;
0x0000f346 ldr r3, [pc, 0x174] | r3 = *(0xf4be);
0x0000f348 ldr r6, [pc, 0x174] |
0x0000f34a add r2, pc | r2 = 0x1e808;
0x0000f34c ldr r3, [r2, r3] |
0x0000f34e movs r2, 3 | r2 = 3;
0x0000f350 add r6, pc | r6 = 0x1e814;
0x0000f352 add.w r0, r6, 0xb8 | r0 = r6 + 0xb8;
0x0000f356 mov r6, r1 | r6 = r1;
0x0000f358 movw r1, 0x3b5 | r1 = 0x3b5;
0x0000f35c ldr r3, [r3] | r3 = *(0x1e808);
0x0000f35e str r3, [sp, 0x24] | var_24h = r3;
0x0000f360 mov.w r3, 0 | r3 = 0;
0x0000f364 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000f368 ldr r2, [r5, 0x34] | r2 = *((r5 + 0x34));
0x0000f36a cmp r2, 0 |
| if (r2 != 0) {
0x0000f36c bne 0xf3de | goto label_3;
| }
0x0000f36e ldr.w ip, [r5, 0x1c] | ip = *((r5 + 0x1c));
0x0000f372 ldr.w lr, [r5] |
0x0000f376 ldr r6, [r6] | r6 = *(r6);
0x0000f378 ldr r7, [r7] | r7 = *(r7);
0x0000f37a cmp.w ip, 0 |
| if (ip == 0) {
0x0000f37e beq 0xf3c6 | goto label_4;
| }
0x0000f380 ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x0000f382 mov r5, sp | r5 = sp;
0x0000f384 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x0000f386 mov r2, r6 | r2 = r6;
0x0000f388 ldr r3, [r4] | r3 = *(r4);
0x0000f38a mov r1, lr | r1 = lr;
0x0000f38c mov r0, ip | r0 = ip;
0x0000f38e str r3, [r5] | *(r5) = r3;
0x0000f390 mov r3, r7 | r3 = r7;
0x0000f392 bl 0x18b40 | fcn_00018b40 (r0, r1, r2, r3, r4, r5, r6);
0x0000f396 str r0, [sp, 0x18] | var_18h = r0;
| do {
| label_0:
0x0000f398 ldr r0, [pc, 0x128] |
0x0000f39a movs r3, 3 | r3 = 3;
0x0000f39c add r2, sp, 0x18 | r2 += var_18h;
0x0000f39e mov.w r1, 0x3d4 | r1 = 0x3d4;
0x0000f3a0 strb r5, [r6, 5] | *((r6 + 5)) = r5;
0x0000f3a2 add r0, pc | r0 = 0x1e86a;
0x0000f3a4 adds r0, 0xb8 | r0 += 0xb8;
0x0000f3a6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000f3aa ldr r2, [pc, 0x11c] |
0x0000f3ac ldr r3, [pc, 0x10c] | r3 = *(0xf4bc);
0x0000f3ae ldr r0, [sp, 0x18] | r0 = var_18h;
0x0000f3b0 add r2, pc | r2 = 0x1e87e;
0x0000f3b2 ldr r3, [r2, r3] | r3 = *(0x1e87e);
0x0000f3b4 ldr r2, [r3] | r2 = *(0x1e87e);
0x0000f3b6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000f3b8 eors r2, r3 | r2 ^= r3;
0x0000f3ba mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000f3be bne 0xf4b4 | goto label_5;
| }
0x0000f3c0 add sp, 0x2c |
0x0000f3c2 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x0000f3c6 adds r3, r4, 4 | r3 = r4 + 4;
0x0000f3c8 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000f3ca stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000f3ce mov r2, r7 | r2 = r7;
0x0000f3d0 ldr r3, [r4] | r3 = *(r4);
0x0000f3d2 mov r1, r6 | r1 = r6;
0x0000f3d4 mov r0, lr | r0 = lr;
0x0000f3d6 bl 0x83c4 | fcn_000083c4 (r0, r1, r2, r3);
0x0000f3da str r0, [sp, 0x18] | var_18h = r0;
0x0000f3dc b 0xf398 |
| } while (1);
| label_3:
0x0000f3de mov r3, r6 | r3 = r6;
0x0000f3e0 movs r2, 2 | r2 = 2;
0x0000f3e2 mov r1, r5 | r1 = r5;
0x0000f3e4 add r0, sp, 0x1c | r0 += var_1ch;
0x0000f3e6 strd r7, r4, [sp] | __asm ("strd r7, r4, [sp]");
0x0000f3ea bl 0xe4e8 | fcn_0000e4e8 (r0, r1, r2, r3, r4, r5);
0x0000f3ee ldr.w r8, [r5, 0x1c] | r8 = *((r5 + 0x1c));
0x0000f3f2 ldrd r6, sb, [sp, 0x1c] | __asm ("ldrd r6, sb, [var_1ch]");
0x0000f3f6 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000f3fa beq 0xf49e | goto label_6;
| }
0x0000f3fc mov lr, r4 | lr = r4;
0x0000f3fe mov ip, sp |
0x0000f400 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x0000f404 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0000f408 mov r0, r8 | r0 = r8;
0x0000f40a ldr.w r3, [lr] | r3 = *(lr);
0x0000f40e mov r2, r6 | r2 = r6;
0x0000f410 str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x0000f414 mov r3, sb | r3 = sb;
0x0000f416 ldr r1, [r5] | r1 = *(r5);
0x0000f418 bl 0x18b40 | fcn_00018b40 (r0, r1, r2, r3, r4, r5, r6);
| label_2:
0x0000f41c str r0, [sp, 0x18] | var_18h = r0;
0x0000f41e adds r0, 0x16 | r0 += 0x16;
| if (r0 == 0x16) {
0x0000f420 beq 0xf398 | goto label_0;
| }
0x0000f422 ldr r0, [pc, 0xa8] |
0x0000f424 movs r2, 3 | r2 = 3;
0x0000f426 movw r1, 0x169 | r1 = 0x169;
0x0000f42a ldr r5, [r7] | r5 = *(r7);
0x0000f42c add r0, pc | r0 = 0x1e8fe;
0x0000f42e adds r0, 0xcc | r0 += 0xcc;
0x0000f430 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000f434 ldr r2, [r4] | r2 = *(r4);
0x0000f436 cmp r2, 0 |
0x0000f438 itt gt |
| if (r2 <= 0) {
0x0000f43a ldrgt r3, [r4, 8] | r3 = *((r4 + 8));
| }
| if (r2 <= 0) {
0x0000f43c movgt ip, 0 |
| }
| if (r2 <= 0) {
0x0000f440 ble 0xf47a | goto label_7;
| }
| label_1:
0x0000f442 ldr.w r1, [r3, ip, lsl 2] | offset_0 = ip << 2;
| r1 = *((r3 + offset_0));
0x0000f446 lsl.w r0, ip, 2 | r0 = ip << 2;
| if (r1 == 0) {
0x0000f44a cbz r1, 0xf472 | goto label_8;
| }
0x0000f44c movs r2, 0 | r2 = 0;
| do {
0x0000f44e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000f450 and r1, r5, 3 | r1 = r5 & 3;
0x0000f454 add r1, r4 | r1 += r4;
0x0000f456 adds r5, 1 | r5++;
0x0000f458 ldrb r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0000f45a ldr r3, [r3, r0] | r3 = *((r3 + r0));
0x0000f45c ldrb.w lr, [r3, r2] |
0x0000f460 eor.w r1, r1, lr | r1 ^= lr;
0x0000f464 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x0000f466 adds r2, 1 | r2++;
0x0000f468 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000f46a ldr r1, [r3, r0] | r1 = *((r3 + r0));
0x0000f46c cmp r2, r1 |
0x0000f46e blo 0xf44e |
| } while (r2 <= r1);
0x0000f470 ldr r2, [r4] | r2 = *(r4);
| label_8:
0x0000f472 add.w ip, ip, 1 |
0x0000f476 cmp ip, r2 |
| if (ip < r2) {
0x0000f478 blt 0xf442 | goto label_1;
| }
| label_7:
0x0000f47a ldr r0, [pc, 0x54] |
0x0000f47c movs r2, 0 | r2 = 0;
0x0000f47e str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0000f480 movs r3, 3 | r3 = 3;
0x0000f482 mov.w r1, 0x172 | r1 = 0x172;
0x0000f486 add r0, pc | r0 = 0x1e95c;
0x0000f488 adds r0, 0xcc | r0 += 0xcc;
0x0000f48a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000f48e ldr r0, [pc, 0x44] |
0x0000f490 mov r2, r6 | r2 = r6;
0x0000f492 movw r1, 0x3c7 | r1 = 0x3c7;
0x0000f496 add r0, pc | r0 = 0x1e970;
0x0000f498 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000f49c b 0xf398 | goto label_0;
| label_6:
0x0000f49e adds r3, r4, 4 | r3 = r4 + 4;
0x0000f4a0 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000f4a2 stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000f4a6 mov r2, sb | r2 = sb;
0x0000f4a8 ldr r0, [r5] | r0 = *(r5);
0x0000f4aa mov r1, r6 | r1 = r6;
0x0000f4ac ldr r3, [r4] | r3 = *(r4);
0x0000f4ae bl 0x83c4 | fcn_000083c4 (r0, r1, r2, r3);
0x0000f4b2 b 0xf41c | goto label_2;
| label_5:
0x0000f4b4 blx 0x348c | fprintf_chk ()
0x0000f4b8 vst4.8 {d16, d17, d18, d19}, [r6], r1 | __asm ("vst4.8 {d16, d17, d18, d19}, [r6], r1");
0x0000f4bc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000f4be movs r0, r0 |
0x0000f4c0 ldm r4, {r2, r4, r6} | r2 = *(r4);
| r4 = *((r4 + 4));
| r6 = *((r4 + 8));
0x0000f4c2 movs r0, r0 |
0x0000f4c4 ldm r4!, {r1} | r1 = *(r4!);
0x0000f4c6 movs r0, r0 |
0x0000f4c8 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xf5a4 */
| #include <stdint.h>
|
; (fcn) fcn.0000f5a4 () | void fcn_0000f5a4 (int16_t arg1) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h;
| void * s1;
| int16_t var_78h;
| char * path;
| int16_t var_90h;
| int16_t var_cch;
| r0 = arg1;
| if (? < ?) {
0x0000f5a4 andhs r4, r3, 0x27c00 | r4 = r3 & 0x27c00;
| }
0x0000f5a8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0000f5ac mov r4, r0 | r4 = r0;
0x0000f5ae ldr r6, [pc, 0x278] |
0x0000f5b0 sub sp, 0xd0 |
0x0000f5b2 add r3, pc | r3 += pc;
0x0000f5b4 mov.w r5, -1 | r5 = -1;
0x0000f5b8 add.w r0, r3, 0xf8 | r0 = r3 + 0xf8;
0x0000f5bc ldr r3, [pc, 0x26c] | r3 = *(0xf82c);
0x0000f5be add r6, pc | r6 = 0x1edec;
0x0000f5c0 movw r1, 0x526 | r1 = 0x526;
0x0000f5c4 ldr r3, [r6, r3] |
0x0000f5c6 ldr r3, [r3] | r3 = *(0x1edec);
0x0000f5c8 str r3, [sp, 0xcc] | var_cch = r3;
0x0000f5ca mov.w r3, 0 | r3 = 0;
0x0000f5ce str r5, [sp, 0x10] | var_10h = r5;
0x0000f5d0 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000f5d4 ldr r6, [r4, 0x38] | r6 = *((r4 + 0x38));
0x0000f5d6 cmp r6, 0 |
| if (r6 == 0) {
0x0000f5d8 beq.w 0xf718 | goto label_3;
| }
0x0000f5dc movs r7, 0 | r7 = 0;
0x0000f5de movs r2, 0x3a | r2 = 0x3a;
0x0000f5e0 mov r1, r7 | r1 = r7;
0x0000f5e2 add r0, sp, 0x90 | r0 += var_90h;
0x0000f5e4 str r7, [sp, 0x8c] | path = r7;
0x0000f5e6 add r5, sp, 0x8c | r5 += path;
0x0000f5e8 blx 0x30d8 | fcn_000030d8 ();
0x0000f5ec ldr r3, [pc, 0x240] |
0x0000f5ee mov r0, r5 | r0 = r5;
0x0000f5f0 ldr r2, [pc, 0x240] |
0x0000f5f2 add.w r8, sp, 0x14 | r8 += var_14h;
0x0000f5f6 str r7, [sp, 0x14] | var_14h = r7;
0x0000f5f8 add r3, pc | r3 = 0x1ee2c;
0x0000f5fa strd r6, r3, [sp, 4] | __asm ("strd r6, r3, [var_4h]");
0x0000f5fe add r2, pc | r2 = 0x1ee36;
0x0000f600 movs r3, 0x3e | r3 = 0x3e;
0x0000f602 add r6, sp, 0x18 | r6 += s1;
0x0000f604 mov r1, r3 | r1 = r3;
0x0000f606 str r2, [sp] | *(sp) = r2;
0x0000f608 movs r2, 1 | r2 = 1;
0x0000f60a blx 0x3378 | shutdown ();
0x0000f60e mov r0, r6 | r0 = r6;
0x0000f610 blx 0x342c | ctype_b_loc ();
0x0000f614 mov r0, r5 | r0 = r5;
0x0000f616 blx 0x3258 | unlink (r0);
0x0000f61a mov r1, r5 | r1 = r5;
0x0000f61c mov r2, r0 | r2 = r0;
0x0000f61e mov r0, r6 | r0 = r6;
0x0000f620 blx 0x3288 | memcpy (r0, r1, r2);
0x0000f624 mov r1, r6 | r1 = r6;
0x0000f626 add r6, sp, 0x78 | r6 += var_78h;
0x0000f628 mov r0, r6 | r0 = r6;
0x0000f62a blx 0x3294 | fcn_00003294 ();
0x0000f62e mov r2, r6 | r2 = r6;
0x0000f630 movs r3, 0x14 | r3 = 0x14;
0x0000f632 movs r1, 0x3e | r1 = 0x3e;
0x0000f634 mov r0, r5 | r0 = r5;
0x0000f636 add r6, sp, 0x10 | r6 += var_10h;
0x0000f638 bl 0xe280 | fcn_0000e280 (r0);
0x0000f63c mov r3, r6 | r3 = r6;
0x0000f63e mov r2, r8 | r2 = r8;
0x0000f640 movs r1, 0xc | r1 = 0xc;
0x0000f642 mov r0, r4 | r0 = r4;
0x0000f644 bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000f648 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000f64a mov r7, r0 | r7 = r0;
0x0000f64c adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000f64e beq 0xf686 | goto label_1;
| }
0x0000f650 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000f652 cmp r0, 0 |
| if (r0 == 0) {
0x0000f654 beq.w 0xf7fa | goto label_4;
| }
0x0000f658 cmp r3, 0xb |
| if (r3 < 0xb) {
0x0000f65a bls.w 0xf7fa | goto label_4;
| }
0x0000f65e ldr r1, [pc, 0x1d8] |
0x0000f660 movs r2, 8 | r2 = 8;
0x0000f662 add r1, pc | r1 = 0x1eea0;
0x0000f664 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 != 0) {
0x0000f668 cbnz r0, 0xf6c2 | goto label_5;
| }
0x0000f66a ldrb r2, [r7, 9] | r2 = *((r7 + 9));
0x0000f66c add.w r3, r7, 9 | r3 = r7 + 9;
0x0000f670 cmp r2, 0x31 |
0x0000f672 beq 0xf6b6 |
| while (r2 != 0x30) {
| label_0:
0x0000f674 ldr r2, [pc, 0x1c4] |
0x0000f676 movs r1, 1 | r1 = 1;
0x0000f678 movs r0, 4 | r0 = 4;
0x0000f67a add r2, pc | r2 = 0x1eeba;
0x0000f67c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000f680 mov.w r3, -1 | r3 = -1;
0x0000f684 str r3, [sp, 0x10] | var_10h = r3;
| label_1:
0x0000f686 ldr r0, [pc, 0x1b8] |
0x0000f688 movs r3, 3 | r3 = 3;
0x0000f68a mov r2, r6 | r2 = r6;
0x0000f68c movw r1, 0x59c | r1 = 0x59c;
0x0000f690 add r0, pc | r0 = 0x1eed6;
0x0000f692 adds r0, 0xf8 | r0 += 0xf8;
0x0000f694 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000f698 ldr r2, [pc, 0x1a8] |
0x0000f69a ldr r3, [pc, 0x190] | r3 = *(0xf82e);
0x0000f69c ldr r0, [sp, 0x10] | r0 = var_10h;
0x0000f69e add r2, pc | r2 = 0x1eee6;
0x0000f6a0 ldr r3, [r2, r3] | r3 = *(0x1eee6);
0x0000f6a2 ldr r2, [r3] | r2 = *(0x1eee6);
0x0000f6a4 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0000f6a6 eors r2, r3 | r2 ^= r3;
0x0000f6a8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000f6ac bne.w 0xf820 | goto label_6;
| }
0x0000f6b0 add sp, 0xd0 |
0x0000f6b2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x0000f6b6 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0000f6b8 cmp r2, 0x30 |
0x0000f6ba bne 0xf674 |
| }
0x0000f6bc ldrb r2, [r3, 2] | r2 = *((r3 + 2));
0x0000f6be cmp r2, 0x31 |
| if (r2 != 0x31) {
0x0000f6c0 bne 0xf674 | goto label_0;
| }
| label_5:
0x0000f6c2 ldr r1, [pc, 0x184] |
0x0000f6c4 mov r0, r7 | r0 = r7;
0x0000f6c6 movs r2, 0xc | r2 = 0xc;
0x0000f6c8 add r1, pc | r1 = 0x1ef16;
0x0000f6ca blx 0x3698 | r0 = fcn_00003698 ();
0x0000f6ce cmp r0, 0 |
| if (r0 != 0) {
0x0000f6d0 bne 0xf686 | goto label_1;
| }
0x0000f6d2 mov r3, r6 | r3 = r6;
0x0000f6d4 mov r2, r8 | r2 = r8;
0x0000f6d6 mov.w r1, 0x400 | r1 = 0x400;
0x0000f6da mov r0, r4 | r0 = r4;
0x0000f6dc bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000f6e0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0000f6e2 mov r7, r0 | r7 = r0;
0x0000f6e4 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000f6e6 beq 0xf686 | goto label_1;
| }
0x0000f6e8 ldr.w sb, [sp, 0x14] | sb = var_14h;
| if (r0 == 0) {
0x0000f6ec cbz r0, 0xf732 | goto label_7;
| }
0x0000f6ee cmp.w sb, 4 |
| if (sb < 4) {
0x0000f6f2 bls 0xf732 | goto label_7;
| }
0x0000f6f4 sub.w r3, sb, 4 | r3 = sb - 4;
0x0000f6f8 ldrb r2, [r0, r3] | r2 = *((r0 + r3));
0x0000f6fa add r3, r0 | r3 += r0;
0x0000f6fc cmp r2, 0xd |
0x0000f6fe beq 0xf71c |
| while (r2 != 0xa) {
| label_2:
0x0000f700 ldr r2, [pc, 0x148] |
0x0000f702 mov r3, sb | r3 = sb;
0x0000f704 mov.w r1, -1 | r1 = -1;
0x0000f708 movs r0, 4 | r0 = 4;
0x0000f70a add r2, pc | r2 = 0x1ef5a;
0x0000f70c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000f710 mov.w r3, -1 | r3 = -1;
0x0000f714 str r3, [sp, 0x10] | var_10h = r3;
0x0000f716 b 0xf686 | goto label_1;
| label_3:
0x0000f718 add r6, sp, 0x10 | r6 += var_10h;
0x0000f71a b 0xf686 | goto label_1;
0x0000f71c ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0000f71e adds r3, 1 | r3++;
0x0000f720 cmp r2, 0xa |
0x0000f722 bne 0xf700 |
| }
0x0000f724 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x0000f728 cmp r2, 0xd |
| if (r2 != 0xd) {
0x0000f72a bne 0xf700 | goto label_2;
| }
0x0000f72c ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0000f72e cmp r3, 0xa |
| if (r3 != 0xa) {
0x0000f730 bne 0xf700 | goto label_2;
| }
| label_7:
0x0000f732 ldr r1, [pc, 0x11c] |
0x0000f734 mov r2, sb | r2 = sb;
0x0000f736 mov r0, r7 | r0 = r7;
0x0000f738 add r1, pc | r1 = 0x1ef8e;
0x0000f73a bl 0xe4ac | r0 = fcn_0000e4ac (r0, r1, r2);
0x0000f73e mov sl, r0 | sl = r0;
0x0000f740 cmp r0, 0 |
| if (r0 == 0) {
0x0000f742 beq 0xf80e | goto label_8;
| }
0x0000f744 subs r2, r7, r0 | r2 = r7 - r0;
0x0000f746 movs r1, 0xa | r1 = 0xa;
0x0000f748 sub.w r2, sb, r2 | r2 = sb - r2;
0x0000f74c blx 0x371c | r0 = fcn_0000371c ();
0x0000f750 cmp r0, 0 |
| if (r0 == 0) {
0x0000f752 beq 0xf80e | goto label_8;
| }
0x0000f754 ldr r1, [pc, 0xfc] |
0x0000f756 sub.w r2, r0, sl | r2 = r0 - sl;
0x0000f75a mov r0, sl | r0 = sl;
0x0000f75c add r1, pc | r1 = 0x1efb4;
0x0000f75e bl 0xe4ac | r0 = fcn_0000e4ac (r0, r1, r2);
0x0000f762 cmp r0, 0 |
| if (r0 == 0) {
0x0000f764 beq 0xf80e | goto label_8;
| }
0x0000f766 ldr r1, [pc, 0xf0] |
0x0000f768 mov r2, sb | r2 = sb;
0x0000f76a mov r0, r7 | r0 = r7;
0x0000f76c add r1, pc | r1 = 0x1efca;
0x0000f76e bl 0xe4ac | r0 = fcn_0000e4ac (r0, r1, r2);
0x0000f772 mov sl, r0 | sl = r0;
0x0000f774 cmp r0, 0 |
| if (r0 == 0) {
0x0000f776 beq 0xf80e | goto label_8;
| }
0x0000f778 subs r2, r7, r0 | r2 = r7 - r0;
0x0000f77a movs r1, 0xa | r1 = 0xa;
0x0000f77c sub.w r2, sb, r2 | r2 = sb - r2;
0x0000f780 blx 0x371c | r0 = fcn_0000371c ();
0x0000f784 mov r7, r0 | r7 = r0;
0x0000f786 cmp r0, 0 |
| if (r0 == 0) {
0x0000f788 beq 0xf80e | goto label_8;
| }
0x0000f78a sub.w r2, r0, sl | r2 = r0 - sl;
0x0000f78e movs r1, 0x3a | r1 = 0x3a;
0x0000f790 mov r0, sl | r0 = sl;
0x0000f792 blx 0x371c | r0 = fcn_0000371c ();
0x0000f796 cmp r0, 0 |
| if (r0 == 0) {
0x0000f798 beq 0xf80e | goto label_8;
| }
0x0000f79a ldrb r3, [r0] | r3 = *(r0);
0x0000f79c subs r7, r7, r0 | r7 -= r0;
0x0000f79e subs r2, r7, 1 | r2 = r7 - 1;
0x0000f7a0 cmp r3, 0x3a |
0x0000f7a2 it ne |
| if (r3 != 0x3a) {
0x0000f7a4 cmpne r3, 0x20 | __asm ("cmpne r3, 0x20");
| }
| if (r3 != 0x3a) {
0x0000f7a6 bne 0xf7be | goto label_9;
| }
0x0000f7a8 subs r3, r0, 1 | r3 = r0 - 1;
0x0000f7aa add r7, r3 | r7 += r3;
0x0000f7ac adds r3, r0, 1 | r3 = r0 + 1;
| do {
0x0000f7ae mov r0, r3 | r0 = r3;
0x0000f7b0 subs r2, r7, r3 | r2 = r7 - r3;
0x0000f7b2 ldrb r1, [r3], 1 | r1 = *(r3);
| r3++;
0x0000f7b6 cmp r1, 0x20 |
0x0000f7b8 it ne |
| if (r1 != 0x20) {
0x0000f7ba cmpne r1, 0x3a | __asm ("cmpne r1, 0x3a");
| }
0x0000f7bc beq 0xf7ae |
| } while (r1 == 0x20);
| label_9:
0x0000f7be mov r1, r5 | r1 = r5;
0x0000f7c0 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 != 0) {
0x0000f7c4 cbnz r0, 0xf80e | goto label_8;
| }
0x0000f7c6 ldr r2, [pc, 0x94] |
0x0000f7c8 movs r5, 1 | r5 = 1;
0x0000f7ca mov r1, r5 | r1 = r5;
0x0000f7cc movs r0, 4 | r0 = 4;
0x0000f7ce str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x0000f7d0 add r2, pc | r2 = 0x1f032;
0x0000f7d2 bl 0x9a28 | fcn_00009a28 (r0, r1);
| do {
0x0000f7d6 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0000f7d8 str r5, [sp, 0x10] | var_10h = r5;
| if (r2 != 0) {
0x0000f7da cbz r2, 0xf7ec |
0x0000f7dc ldr r0, [pc, 0x80] |
0x0000f7de movw r1, 0x592 | r1 = 0x592;
0x0000f7e2 add r0, pc | r0 = 0x1f046;
0x0000f7e4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000f7e8 movs r3, 0 | r3 = 0;
0x0000f7ea str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| }
0x0000f7ec mov r3, r6 | r3 = r6;
0x0000f7ee mov r2, r8 | r2 = r8;
0x0000f7f0 movs r1, 0 | r1 = 0;
0x0000f7f2 mov r0, r4 | r0 = r4;
0x0000f7f4 bl 0xe2fc | fcn_0000e2fc (r0, r1, r2, r3);
0x0000f7f8 b 0xf686 | goto label_1;
| label_4:
0x0000f7fa ldr r2, [pc, 0x68] |
0x0000f7fc movs r1, 1 | r1 = 1;
0x0000f7fe movs r0, 4 | r0 = 4;
0x0000f800 add r2, pc | r2 = 0x1f06a;
0x0000f802 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000f806 mvn r3, 0x15 | r3 = ~0x15;
0x0000f80a str r3, [sp, 0x10] | var_10h = r3;
0x0000f80c b 0xf686 | goto label_1;
| label_8:
0x0000f80e ldr r2, [pc, 0x58] |
0x0000f810 movs r1, 1 | r1 = 1;
0x0000f812 movs r0, 4 | r0 = 4;
0x0000f814 mov.w r5, -1 | r5 = -1;
0x0000f818 add r2, pc | r2 = 0x1f086;
0x0000f81a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000f81e b 0xf7d6 |
| } while (1);
| label_6:
0x0000f820 blx 0x348c | fprintf_chk ()
0x0000f824 ldm r1, {r1, r4, r5, r6, r7} | r1 = *(r1);
| r4 = *((r1 + 4));
| r5 = *((r1 + 8));
| r6 = *((r1 + 12));
| r7 = *((r1 + 16));
0x0000f826 movs r0, r0 |
0x0000f828 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xf86c */
| #include <stdint.h>
|
; (fcn) fcn.0000f86c () | void fcn_0000f86c (int16_t arg_48h, int16_t arg_10ch, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int32_t var_0h_2;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000f86c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000f870 mov r7, r2 | r7 = r2;
0x0000f872 ldr r2, [pc, 0x220] |
0x0000f874 sub sp, 0x64 |
0x0000f876 mov r4, r0 | r4 = r0;
0x0000f878 mov sl, r1 | sl = r1;
0x0000f87a ldr r3, [pc, 0x21c] | r3 = *(0xfa9a);
0x0000f87c add.w ip, sp, 0x48 |
0x0000f880 add r2, pc | r2 = 0x1f31a;
0x0000f882 ldr.w fp, [pc, 0x218] |
0x0000f886 mov.w sb, 0 | sb = 0;
0x0000f88a ldr r3, [r2, r3] |
0x0000f88c mov r6, sb | r6 = sb;
0x0000f88e add fp, pc | fp = 0x1f330;
0x0000f890 mov r5, sb | r5 = sb;
0x0000f892 add.w lr, fp, 0x48 | lr += arg_48h;
0x0000f896 mov r8, sb | r8 = sb;
0x0000f898 ldr r3, [r3] | r3 = *(0x1f31a);
0x0000f89a str r3, [sp, 0x5c] | var_5ch = r3;
0x0000f89c mov.w r3, 0 | r3 = 0;
0x0000f8a0 ldr r3, [pc, 0x1fc] |
0x0000f8a2 strd sb, sb, [sp, 0x34] | __asm ("strd sb, sb, [var_34h]");
0x0000f8a6 add r3, pc | r3 = 0x1f34a;
0x0000f8a8 str r3, [sp, 0x28] | var_28h = r3;
0x0000f8aa ldr r3, [pc, 0x1f8] |
0x0000f8ac add r3, pc | r3 = 0x1f356;
0x0000f8ae str r3, [sp, 0x24] | var_24h = r3;
0x0000f8b0 ldr r3, [pc, 0x1f4] |
0x0000f8b2 add r3, pc | r3 = 0x1f35e;
0x0000f8b4 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000f8b6 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x0000f8ba stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0000f8be add.w r0, fp, 0x10c | r0 += arg_10ch;
0x0000f8c2 ldr.w r3, [lr] | r3 = *(lr);
0x0000f8c4 adds r0, 0 | r0 += 0;
0x0000f8c6 movs r2, 3 | r2 = 3;
0x0000f8c8 movw r1, 0x5b3 | r1 = 0x5b3;
0x0000f8ca str r3, [r6, r6] | *((r6 + r6)) = r3;
0x0000f8cc str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x0000f8d0 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000f8d4 mov r2, sb | r2 = sb;
0x0000f8d6 movs r3, 0x50 | r3 = 0x50;
0x0000f8d8 mov r0, r7 | r0 = r7;
0x0000f8da add r1, sp, 0x30 | r1 += var_30h;
0x0000f8dc bl 0xb70c | fcn_0000b70c (r0, r1, r2, r3);
0x0000f8e0 mov r3, r7 | r3 = r7;
0x0000f8e2 mov sb, r4 | sb = r4;
0x0000f8e4 mov r7, r0 | r7 = r0;
0x0000f8e6 mov r4, r3 | r4 = r3;
| label_3:
0x0000f8e8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0000f8ea cmp.w fp, 0 |
| if (fp == 0) {
0x0000f8ee beq.w 0xfa40 | goto label_5;
| }
0x0000f8f2 ldr.w r2, [sb, 0x28] | r2 = *((sb + 0x28));
0x0000f8f6 cmp r2, 0 |
| if (r2 == 0) {
0x0000f8f8 beq.w 0xfa7e | goto label_6;
| }
0x0000f8fc str r3, [sp, 0xc] | var_ch = r3;
0x0000f8fe mov r1, r5 | r1 = r5;
0x0000f900 ldr r3, [pc, 0x1a8] |
0x0000f902 str r2, [sp, 0x18] | var_18h = r2;
0x0000f904 strd r7, r4, [sp, 0x10] | __asm ("strd r7, r4, [var_10h]");
0x0000f908 add r3, pc | r3 = 0x1f3b8;
0x0000f90a strd r7, r4, [sp, 4] | __asm ("strd r7, r4, [var_4h]");
| label_2:
0x0000f90e str r3, [sp] | *(sp) = r3;
0x0000f910 movs r2, 1 | r2 = 1;
0x0000f912 mov.w r3, -1 | r3 = -1;
0x0000f916 mov r0, r6 | r0 = r6;
0x0000f918 blx 0x3378 | r0 = shutdown ();
0x0000f91c mov r5, r0 | r5 = r0;
| label_4:
0x0000f91e eor r3, r8, 1 | r3 = r8 ^ 1;
0x0000f922 cmp r5, 0 |
0x0000f924 ite le |
| if (r5 > 0) {
0x0000f926 movle r3, 0 | r3 = 0;
| }
| if (r5 <= 0) {
0x0000f928 andgt r3, r3, 1 | r3 &= 1;
| }
0x0000f92c cmp r3, 0 |
| if (r3 != 0) {
0x0000f92e bne 0xfa1c | goto label_7;
| }
| label_0:
0x0000f930 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000f934 beq.w 0xfa58 | goto label_8;
| }
0x0000f938 ldr r2, [pc, 0x174] |
0x0000f93a mov r3, r6 | r3 = r6;
0x0000f93c mov.w r1, -1 | r1 = -1;
0x0000f940 movs r0, 4 | r0 = 4;
0x0000f942 mov r4, sb | r4 = sb;
0x0000f944 movw sb, 0xd090 |
0x0000f948 add r2, pc | r2 = 0x1f3fc;
0x0000f94a movt sb, 3 | sb = 0x3d090;
0x0000f94e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000f952 add r3, sp, 0x4c | r3 += var_4ch;
0x0000f954 add.w r8, sp, 0x34 | r8 += var_34h;
0x0000f958 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000f95a add r7, sp, 0x38 | r7 += var_38h;
0x0000f95c add.w sl, sp, 0x3c | sl += var_3ch;
0x0000f960 stm.w sp, {r0, r1, r2, r3} | *(sp) = r0;
| *((sp + 4)) = r1;
| *((sp + 8)) = r2;
| *((sp + 12)) = r3;
0x0000f964 mov r2, r5 | r2 = r5;
0x0000f966 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000f968 mov r1, r6 | r1 = r6;
0x0000f96a ldr r0, [r4] | r0 = *(r4);
0x0000f96c bl 0x83c4 | fcn_000083c4 (r0, r1, r2, r3);
0x0000f970 ldr r0, [pc, 0x140] |
0x0000f972 mov r2, r6 | r2 = r6;
0x0000f974 movw r1, 0x5e9 | r1 = 0x5e9;
0x0000f978 add r0, pc | r0 = 0x1f430;
0x0000f97a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0000f97e add r0, sp, 0x40 | r0 += var_40h;
0x0000f980 blx 0x3438 | SSL_alert_type_string_long ();
0x0000f984 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0000f986 adds r3, 0xa | r3 += 0xa;
0x0000f988 str r3, [sp, 0x40] | var_40h = r3;
0x0000f98a b 0xf9a0 |
| while (r3 == 0) {
0x0000f98c mov r0, sl | r0 = sl;
0x0000f98e blx 0x3438 | SSL_alert_type_string_long ();
0x0000f992 ldrd r2, r3, [sp, 0x3c] | __asm ("ldrd r2, r3, [var_3ch]");
0x0000f996 cmp r2, r3 |
| if (r2 > r3) {
0x0000f998 bgt 0xf9ce | goto label_9;
| }
0x0000f99a mov r0, sb | r0 = sb;
0x0000f99c blx 0x3174 | pthread_create (r0, r1, r2, r3);
0x0000f9a0 mov r3, r8 | r3 = r8;
0x0000f9a2 ldr r0, [r4] | r0 = *(r4);
0x0000f9a4 mov r2, r7 | r2 = r7;
0x0000f9a6 movs r1, 0xc | r1 = 0xc;
0x0000f9a8 bl 0x81f4 | fcn_000081f4 (r0, r1, r2, r3);
0x0000f9ac ldr r3, [sp, 0x38] | r3 = var_38h;
0x0000f9ae mov r5, r0 | r5 = r0;
0x0000f9b0 cmp r3, 0 |
0x0000f9b2 beq 0xf98c |
| }
0x0000f9b4 ldr r1, [pc, 0x100] |
0x0000f9b6 movs r2, 0xc | r2 = 0xc;
0x0000f9b8 add r1, pc | r1 = 0x1f474;
0x0000f9ba blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 != 0) {
0x0000f9be cbz r0, 0xf9d4 |
0x0000f9c0 ldr r1, [pc, 0xf8] |
0x0000f9c2 movs r2, 0xc | r2 = 0xc;
0x0000f9c4 mov r0, r5 | r0 = r5;
0x0000f9c6 add r1, pc | r1 = 0x1f486;
0x0000f9c8 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x0000f9cc cbz r0, 0xf9d4 | goto label_10;
| }
| label_9:
0x0000f9ce mov.w r3, -1 | r3 = -1;
0x0000f9d2 str r3, [sp, 0x34] | var_34h = r3;
| }
| label_10:
0x0000f9d4 add r5, sp, 0x44 | r5 += var_44h;
0x0000f9d6 movs r3, 1 | r3 = 1;
0x0000f9d8 str r3, [sp, 0x38] | var_38h = r3;
| do {
0x0000f9da movs r1, 1 | r1 = 1;
0x0000f9dc ldr r0, [r4] | r0 = *(r4);
0x0000f9de mov r3, r5 | r3 = r5;
0x0000f9e0 mov r2, r7 | r2 = r7;
0x0000f9e2 bl 0x81f4 | fcn_000081f4 (r0, r1, r2, r3);
0x0000f9e6 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0000f9e8 cmp r1, 0 |
0x0000f9ea bne 0xf9da |
| } while (r1 != 0);
| label_1:
0x0000f9ec ldr r0, [pc, 0xd0] |
0x0000f9ee movs r3, 3 | r3 = 3;
0x0000f9f0 mov r2, r8 | r2 = r8;
0x0000f9f2 movw r1, 0x60e | r1 = 0x60e;
0x0000f9f6 add r0, pc |
0x0000f9f8 add.w r0, r0, 0x10c | r0 = 0x1f5c6;
0x0000f9fc bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000fa00 ldr r2, [pc, 0xc0] |
0x0000fa02 ldr r3, [pc, 0x94] | r3 = *(0xfa9a);
0x0000fa04 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0000fa06 add r2, pc | r2 = 0x1f4ce;
0x0000fa08 ldr r3, [r2, r3] | r3 = *(0x1f4ce);
0x0000fa0a ldr r2, [r3] | r2 = *(0x1f4ce);
0x0000fa0c ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0000fa0e eors r2, r3 | r2 ^= r3;
0x0000fa10 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000fa14 bne 0xfa8e | goto label_11;
| }
0x0000fa16 add sp, 0x64 |
0x0000fa18 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0000fa1c ldr r0, [pc, 0xa8] |
0x0000fa1e adds r5, 1 | r5++;
0x0000fa20 mov r2, r5 | r2 = r5;
0x0000fa22 movw r1, 0x5de | r1 = 0x5de;
0x0000fa26 add r0, pc | r0 = 0x1f4f2;
0x0000fa28 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0000fa2c mov r6, r0 | r6 = r0;
0x0000fa2e cmp r0, 0 |
| if (r0 != 0) {
0x0000fa30 bne.w 0xf930 | goto label_0;
| }
0x0000fa34 mvn r3, 0x62 | r3 = ~0x62;
0x0000fa38 add.w r8, sp, 0x34 | r8 += var_34h;
0x0000fa3c str r3, [sp, 0x34] | var_34h = r3;
0x0000fa3e b 0xf9ec | goto label_1;
| label_5:
0x0000fa40 ldr.w r2, [sb, 0x30] | r2 = *((sb + 0x30));
| if (r2 != 0) {
0x0000fa44 cbz r2, 0xfa5e |
0x0000fa46 str r3, [sp, 0xc] | var_ch = r3;
0x0000fa48 mov r1, r5 | r1 = r5;
0x0000fa4a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000fa4c str r2, [sp, 0x18] | var_18h = r2;
0x0000fa4e strd r7, r4, [sp, 0x10] | __asm ("strd r7, r4, [var_10h]");
0x0000fa52 strd r7, r4, [sp, 4] | __asm ("strd r7, r4, [var_4h]");
0x0000fa56 b 0xf90e | goto label_2;
| label_8:
0x0000fa58 mov.w r8, 1 | r8 = 1;
0x0000fa5c b 0xf8e8 | goto label_3;
| }
0x0000fa5e str r3, [sp, 0xc] | var_ch = r3;
0x0000fa60 mov r1, r5 | r1 = r5;
0x0000fa62 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000fa64 strd r7, r4, [sp, 0x10] | __asm ("strd r7, r4, [var_10h]");
0x0000fa68 strd r7, r4, [sp, 4] | __asm ("strd r7, r4, [var_4h]");
| do {
0x0000fa6c str r3, [sp] | *(sp) = r3;
0x0000fa6e movs r2, 1 | r2 = 1;
0x0000fa70 mov.w r3, -1 | r3 = -1;
0x0000fa74 mov r0, r6 | r0 = r6;
0x0000fa76 blx 0x3378 | r0 = shutdown ();
0x0000fa7a mov r5, r0 | r5 = r0;
0x0000fa7c b 0xf91e | goto label_4;
| label_6:
0x0000fa7e str r3, [sp, 0xc] | var_ch = r3;
0x0000fa80 mov r1, r5 | r1 = r5;
0x0000fa82 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0000fa84 strd r7, r4, [sp, 0x10] | __asm ("strd r7, r4, [var_10h]");
0x0000fa88 strd r7, r4, [sp, 4] | __asm ("strd r7, r4, [var_4h]");
0x0000fa8c b 0xfa6c |
| } while (1);
| label_11:
0x0000fa8e blx 0x348c | fprintf_chk ()
0x0000fa92 nop |
0x0000fa94 ands r0, r0, 0x810000 | r0 &= 0x810000;
0x0000fa98 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000fa9a movs r0, r0 |
0x0000fa9c stm r7!, {r1, r2, r4} | *(r7!) = r1;
| *((r7! + 4)) = r2;
| *((r7! + 8)) = r4;
0x0000fa9e movs r0, r0 |
0x0000faa0 stm r6!, {r1, r4, r7} | *(r6!) = r1;
| *((r6! + 4)) = r4;
| *((r6! + 8)) = r7;
0x0000faa2 movs r0, r0 |
0x0000faa4 stm r6!, {r2, r6} | *(r6!) = r2;
| *((r6! + 4)) = r6;
0x0000faa6 movs r0, r0 |
0x0000faa8 stm r6!, {r1, r2, r7} | *(r6!) = r1;
| *((r6! + 4)) = r2;
| *((r6! + 8)) = r7;
0x0000faaa movs r0, r0 |
0x0000faac stm r5!, {r3, r5, r6, r7} | *(r5!) = r3;
| *((r5! + 4)) = r5;
| *((r5! + 8)) = r6;
| *((r5! + 12)) = r7;
0x0000faae movs r0, r0 |
0x0000fab0 stm r6!, {r2, r3, r4} | *(r6!) = r2;
| *((r6! + 4)) = r3;
| *((r6! + 8)) = r4;
0x0000fab2 movs r0, r0 |
0x0000fab4 stm r3!, {r4} | *(r3!) = r4;
0x0000fab6 movs r0, r0 |
0x0000fab8 stm r5!, {r2, r3, r6, r7} | *(r5!) = r2;
| *((r5! + 4)) = r3;
| *((r5! + 8)) = r6;
| *((r5! + 12)) = r7;
0x0000faba movs r0, r0 |
0x0000fabc stm r5!, {r1, r2, r3, r6, r7} | *(r5!) = r1;
| *((r5! + 4)) = r2;
| *((r5! + 8)) = r3;
| *((r5! + 12)) = r6;
| *((r5! + 16)) = r7;
0x0000fabe movs r0, r0 |
0x0000fac0 stm r5!, {r1, r2, r3, r5, r7} | *(r5!) = r1;
| *((r5! + 4)) = r2;
| *((r5! + 8)) = r3;
| *((r5! + 12)) = r5;
| *((r5! + 16)) = r7;
0x0000fac2 movs r0, r0 |
0x0000fac4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x10620 */
| #include <stdint.h>
|
; (fcn) fcn.00010620 () | void fcn_00010620 () {
| char * s2;
| int16_t var_4h;
| int16_t var_8h;
| label_1:
0x000103c0 invalid |
0x000103c4 invalid |
0x000103c8 cmp r3, 0x14 |
| if (r3 <= 0x14) {
0x000103ca bhi 0x103d2 |
0x000103cc add sp, 0x14 |
0x000103ce pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x000103d2 ldr r2, [pc, 0x98] |
0x000103d4 mov.w r1, -1 | r1 = -1;
0x000103d8 movs r0, 5 | r0 = 5;
0x000103da ldr.w sb, [pc, 0x94] |
0x000103de ldr.w r8, [pc, 0x94] |
0x000103e2 movs r4, 0 | r4 = 0;
0x000103e4 add r2, pc | r2 = 0x20856;
0x000103e6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000103ea add.w r0, r6, 0x28 | r0 = r6 + 0x28;
0x000103ee add sb, pc | sb = 0x20864;
0x000103f0 blx 0x3644 | fcn_00003644 ();
0x000103f4 ldr r2, [pc, 0x80] |
0x000103f6 mov.w r1, -1 | r1 = -1;
0x000103fa ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x000103fc movs r0, 5 | r0 = 5;
0x000103fe add r8, pc | r8 = 0x20878;
0x00010400 add r2, pc | r2 = 0x2087c;
0x00010402 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00010406 b 0x10438 |
| while (r4 != 0) {
0x00010408 ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x0001040a ldrd r7, r3, [r5, 8] | __asm ("ldrd r7, r3, [r5, 8]");
0x0001040e str r7, [sp, 8] | var_8h = r7;
0x00010410 ldr r7, [r5] | r7 = *(r5);
0x00010412 str r7, [sp, 4] | var_4h = r7;
0x00010414 ldr r7, [r5, 4] | r7 = *((r5 + 4));
0x00010416 str r7, [sp] | *(sp) = r7;
0x00010418 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001041c ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0001041e movs r3, 0xa | r3 = 0xa;
0x00010420 mov.w r1, -1 | r1 = -1;
0x00010424 movs r0, 5 | r0 = 5;
0x00010426 cmp r2, 9 |
0x00010428 mov r2, r8 | r2 = r8;
0x0001042a it ls |
| if (r2 > 9) {
0x0001042c ldrls r3, [r5, 0xc] | r3 = *((r5 + 0xc));
| }
0x0001042e ldr r5, [r5, 8] | r5 = *((r5 + 8));
0x00010430 adds r5, 8 | r5 += 8;
0x00010432 str r5, [sp] | *(sp) = r5;
0x00010434 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00010438 mov r1, r4 | r1 = r4;
0x0001043a mov r0, r6 | r0 = r6;
0x0001043c bl 0x7924 | r0 = fcn_00007924 (r0, r1);
0x00010440 mov r4, r0 | r4 = r0;
0x00010442 mov r2, sb | r2 = sb;
0x00010444 mov.w r1, -1 | r1 = -1;
0x00010448 movs r0, 5 | r0 = 5;
0x0001044a cmp r4, 0 |
0x0001044c bne 0x10408 |
| }
0x0001044e ldr r2, [pc, 0x2c] |
0x00010450 add r2, pc | r2 = 0x208d2;
0x00010452 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00010456 add.w r0, r6, 0x28 | r0 = r6 + 0x28;
0x0001045a add sp, 0x14 |
0x0001045c pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00010460 b.w 0x35b0 | void (*0x35b0)() ();
0x00010620 ldr r2, [pc, 0xc8] |
0x00010622 ldr r3, [pc, 0xcc] | r3 = *(0x106f2);
0x00010624 push {r4, r5, r6, lr} |
0x00010626 sub sp, 8 |
0x00010628 add r2, pc | r2 = 0x20d18;
0x0001062a ldr r6, [pc, 0xc8] |
0x0001062c mov r5, sp | r5 = sp;
0x0001062e ldr r3, [r2, r3] |
0x00010630 mov r0, r5 | r0 = r5;
0x00010632 add r6, pc | r6 = 0x20d2c;
0x00010634 ldr r3, [r3] | r3 = *(0x20d18);
0x00010636 str r3, [sp, 4] | var_4h = r3;
0x00010638 mov.w r3, 0 | r3 = 0;
0x0001063a lsls r0, r0, 0xc | r0 <<= 0xc;
0x0001063c blx 0x323c | fcn_0000323c ();
0x0001063e ldcl p1, c2, [lr, 8]! | __asm ("ldcl p1, c2, [lr, 8]!");
0x00010642 mov r0, r5 | r0 = r5;
0x00010644 blx 0x3558 | strftime (r0, r1, r2, r3);
0x00010648 ldr r0, [r6] | r0 = *(0x20d2c);
0x0001064a mov r1, r5 | r1 = r5;
0x0001064c blx 0x3384 | r0 = strstr (r0, r1);
| if (r0 == 0) {
0x00010650 cbz r0, 0x1067a | goto label_2;
| }
0x00010652 ldr r1, [pc, 0xa4] |
0x00010654 mov r4, r0 | r4 = r0;
0x00010656 mov r2, r0 | r2 = r0;
0x00010658 movs r0, 1 | r0 = 1;
0x0001065a add r1, pc | r1 = 0x20d58;
0x0001065c blx 0x3068 | fcn_00003068 ();
| do {
| label_0:
0x00010660 ldr r2, [pc, 0x98] |
0x00010662 ldr r3, [pc, 0x8c] | r3 = *(0x106f2);
0x00010664 add r2, pc | r2 = 0x20d64;
0x00010666 ldr r3, [r2, r3] | r3 = *(0x20d64);
0x00010668 ldr r2, [r3] | r2 = *(0x20d64);
0x0001066a ldr r3, [sp, 4] | r3 = var_4h;
0x0001066c eors r2, r3 | r2 ^= r3;
0x0001066e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00010672 bne 0x106e6 | goto label_3;
| }
0x00010674 mov r0, r4 | r0 = r4;
0x00010676 add sp, 8 |
0x00010678 pop {r4, r5, r6, pc} |
| label_2:
0x0001067a ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0001067c mov r1, r5 | r1 = r5;
0x0001067e blx 0x3384 | r0 = strstr (r0, r1);
0x00010682 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00010684 cbz r0, 0x10694 | goto label_4;
| }
0x00010686 ldr r1, [pc, 0x78] |
0x00010688 mov r2, r0 | r2 = r0;
0x0001068a movs r0, 1 | r0 = 1;
0x0001068c add r1, pc | r1 = 0x20d92;
0x0001068e blx 0x3068 | fcn_00003068 ();
0x00010692 b 0x10660 |
| } while (1);
| label_4:
0x00010694 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x00010696 mov r1, r5 | r1 = r5;
0x00010698 blx 0x3384 | r0 = strstr (r0, r1);
0x0001069c mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0001069e cbnz r0, 0x106ba |
0x000106a0 mov r1, r0 | r1 = r0;
0x000106a2 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000106a4 blx 0x368c | r0 = fcn_0000368c ();
0x000106a8 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000106aa cbz r0, 0x106c8 | goto label_5;
| }
0x000106ac ldr r1, [pc, 0x54] |
0x000106ae mov r2, r0 | r2 = r0;
0x000106b0 movs r0, 1 | r0 = 1;
0x000106b2 add r1, pc | r1 = 0x20dba;
0x000106b4 blx 0x3068 | fcn_00003068 ();
0x000106b8 b 0x10660 | goto label_0;
| }
0x000106ba ldr r1, [pc, 0x4c] |
0x000106bc mov r2, r0 | r2 = r0;
0x000106be movs r0, 1 | r0 = 1;
0x000106c0 add r1, pc | r1 = 0x20dce;
0x000106c2 blx 0x3068 | fcn_00003068 ();
0x000106c6 b 0x10660 | goto label_0;
| label_5:
0x000106c8 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000106ca mov r1, r5 | r1 = r5;
0x000106cc adds r0, 0x30 | r0 += 0x30;
0x000106ce blx 0x3384 | r0 = strstr (r0, r1);
0x000106d2 mov r4, r0 | r4 = r0;
0x000106d4 cmp r0, 0 |
| if (r0 == 0) {
0x000106d6 beq 0x10660 | goto label_0;
| }
0x000106d8 ldr r1, [pc, 0x30] |
0x000106da mov r2, r0 | r2 = r0;
0x000106dc movs r0, 1 | r0 = 1;
0x000106de add r1, pc | r1 = 0x20dee;
0x000106e0 blx 0x3068 | fcn_00003068 ();
0x000106e4 b 0x10660 | goto label_0;
| label_3:
0x000106e6 blx 0x348c | fprintf_chk ()
0x000106ea nop |
0x000106ec b 0x103c0 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12d5c */
| #include <stdint.h>
|
; (fcn) fcn.00012d5c () | void fcn_00012d5c (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x00012d5c ldr.w ip, [pc, 0x78] |
0x00012d60 movs r2, 3 | r2 = 3;
0x00012d62 ldr r3, [pc, 0x78] | r3 = *(0x12dde);
0x00012d64 push {r4, r5, lr} |
0x00012d66 mov r4, r0 | r4 = r0;
0x00012d68 add ip, pc | ip = 0x25b44;
0x00012d6a ldr r0, [pc, 0x74] |
0x00012d6c sub sp, 0xc |
0x00012d6e mov r5, r1 | r5 = r1;
0x00012d70 ldr.w r3, [ip, r3] |
0x00012d74 movs r1, 0xbd | r1 = 0xbd;
0x00012d76 add r0, pc | r0 = 0x25b5c;
0x00012d78 ldr r3, [r3] | r3 = *(0x25b44);
0x00012d7a str r3, [sp, 4] | var_4h = r3;
0x00012d7c mov.w r3, 0 | r3 = 0;
0x00012d80 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00012d84 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00012d86 ldr.w r2, [r5, 0x108] | r2 = *((r5 + 0x108));
0x00012d8a adds r3, 1 | r3++;
0x00012d8c cmp r3, r2 |
0x00012d8e it lt |
| if (r3 >= r2) {
0x00012d90 movlt r4, 1 | r4 = 1;
| }
| if (r3 >= r2) {
0x00012d92 blt 0x12daa |
0x00012d94 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00012d96 cmp r3, 4 |
0x00012d98 itett eq |
| if (r3 != 4) {
0x00012d9a ldreq r3, [r5, 0xc] | r3 = *((r5 + 0xc));
| }
| if (r3 == 4) {
0x00012d9c movne r4, 0 | r4 = 0;
| }
| if (r3 != 4) {
0x00012d9e ldreq r4, [r3, 0x9c] | r4 = *((r3 + 0x9c));
| }
| if (r3 == 4) {
0x00012da2 clz r4, r4 | r4 &= r4;
| }
0x00012da6 it eq |
| if (r3 == 4) {
0x00012da8 lsreq r4, r4, 5 | r4 >>= 5;
| goto label_0;
| }
| }
| label_0:
0x00012daa ldr r0, [pc, 0x38] |
0x00012dac movs r3, 3 | r3 = 3;
0x00012dae mov r2, sp | r2 = sp;
0x00012db0 movs r1, 0xc0 | r1 = 0xc0;
0x00012db2 str r4, [sp] | *(sp) = r4;
0x00012db4 add r0, pc | r0 = 0x25b9e;
0x00012db6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00012dba ldr r2, [pc, 0x2c] |
0x00012dbc ldr r3, [pc, 0x1c] | r3 = *(0x12ddc);
0x00012dbe ldr r0, [sp] | r0 = *(sp);
0x00012dc0 add r2, pc | r2 = 0x25bae;
0x00012dc2 ldr r3, [r2, r3] | r3 = *(0x25bae);
0x00012dc4 ldr r2, [r3] | r2 = *(0x25bae);
0x00012dc6 ldr r3, [sp, 4] | r3 = var_4h;
0x00012dc8 eors r2, r3 | r2 ^= r3;
0x00012dca mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00012dce bne 0x12dd4 |
0x00012dd0 add sp, 0xc |
0x00012dd2 pop {r4, r5, pc} |
| }
0x00012dd4 blx 0x348c | fprintf_chk ()
0x00012dd8 it hs |
| if (r2 < r3) {
0x00012dda movhs r1, r0 | r1 = r0;
| }
0x00012ddc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00012dde movs r0, r0 |
0x00012de0 add r0, sp, 8 | r0 += var_8h;
0x00012de2 movs r0, r0 |
0x00012de4 adr r7, 0x310 | r7 = 0x310;
0x00012de6 movs r0, r0 |
0x00012de8 bkpt 0xd0 | __asm ("bkpt 0xd0");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12ef4 */
| #include <stdint.h>
|
; (fcn) fcn.00012ef4 () | void fcn_00012ef4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00012ef4 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00012ef8 mov r8, r2 | r8 = r2;
0x00012efa ldr r2, [pc, 0x354] |
0x00012efc mov r4, r3 | r4 = r3;
0x00012efe sub sp, 8 |
0x00012f00 adds r7, r0, r1 | r7 = r0 + r1;
0x00012f02 ldr r3, [pc, 0x350] | r3 = *(0x13256);
0x00012f04 mov r5, r1 | r5 = r1;
0x00012f06 add r2, pc | r2 = 0x2615c;
0x00012f08 mov.w r1, 0x1ae | r1 = 0x1ae;
0x00012f0c ldr r3, [r2, r3] |
0x00012f0e movs r2, 3 | r2 = 3;
0x00012f10 ldr r3, [r3] | r3 = *(0x2615c);
0x00012f12 str r3, [sp, 4] | var_4h = r3;
0x00012f14 mov.w r3, 0 | r3 = 0;
0x00012f18 str r0, [sp] | *(sp) = r0;
0x00012f1a ldr r0, [pc, 0x33c] |
0x00012f1c add r0, pc | r0 = 0x2617a;
0x00012f1e adds r0, 0x14 | r0 += 0x14;
0x00012f20 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00012f24 cmp r5, 0 |
| if (r5 == 0) {
0x00012f26 beq.w 0x1315c | goto label_12;
| }
0x00012f2a cmp r4, 0 |
| if (r4 == 0) {
0x00012f2c beq.w 0x13160 | goto label_13;
| }
0x00012f30 movs r3, 0 | r3 = 0;
0x00012f32 str r3, [r4, 0x58] | *((r4 + 0x58)) = r3;
| label_7:
0x00012f34 ldr r3, [sp] | r3 = *(sp);
0x00012f36 add.w r5, r3, 8 | r5 = r3 + 8;
0x00012f3a cmp r5, r7 |
| if (r5 > r7) {
0x00012f3c bhi 0x12f56 | goto label_0;
| }
0x00012f3e ldr r2, [r3] | r2 = *(r3);
0x00012f40 str r2, [r4] | *(r4) = r2;
0x00012f42 cmp r2, 8 |
0x00012f44 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00012f46 str r5, [sp] | *(sp) = r5;
0x00012f48 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
| if (r2 == 8) {
0x00012f4a beq.w 0x1307a | goto label_14;
| }
0x00012f4e cmp r2, 0xa |
| if (r2 == 0xa) {
0x00012f50 beq 0x12ff4 | goto label_15;
| }
0x00012f52 cmp r2, 3 |
0x00012f54 beq 0x12f96 |
| while (sb == r6) {
| label_0:
0x00012f56 ldr r0, [pc, 0x304] |
0x00012f58 mov r2, r4 | r2 = r4;
0x00012f5a mov.w r1, 0x258 | r1 = 0x258;
0x00012f5e movs r5, 0 | r5 = 0;
0x00012f60 add r0, pc | r0 = 0x261c2;
0x00012f62 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_1:
0x00012f66 ldr r0, [pc, 0x2f8] |
0x00012f68 movs r3, 3 | r3 = 3;
0x00012f6a movs r2, 0 | r2 = 0;
0x00012f6c movw r1, 0x25b | r1 = 0x25b;
0x00012f70 add r0, pc | r0 = 0x261d6;
0x00012f72 adds r0, 0x14 | r0 += 0x14;
0x00012f74 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00012f78 ldr r2, [pc, 0x2e8] |
0x00012f7a ldr r3, [pc, 0x2d8] | r3 = *(0x13256);
0x00012f7c add r2, pc | r2 = 0x261e4;
0x00012f7e ldr r3, [r2, r3] | r3 = *(0x261e4);
0x00012f80 ldr r2, [r3] | r2 = *(0x261e4);
0x00012f82 ldr r3, [sp, 4] | r3 = var_4h;
0x00012f84 eors r2, r3 | r2 ^= r3;
0x00012f86 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012f8a bne.w 0x1324c | goto label_16;
| }
0x00012f8e mov r0, r5 | r0 = r5;
0x00012f90 add sp, 8 |
0x00012f92 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00012f96 sub.w sb, r7, r5 | sb = r7 - r5;
0x00012f9a mov r0, r5 | r0 = r5;
0x00012f9c mov r1, sb | r1 = sb;
0x00012f9e blx 0x34c8 | r0 = BIO_read ();
0x00012fa2 adds r6, r0, 1 | r6 = r0 + 1;
0x00012fa4 cmp sb, r6 |
0x00012fa6 beq 0x12f56 |
| }
0x00012fa8 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00012faa cmp r3, 0 |
| if (r3 == 0) {
0x00012fac beq.w 0x131c8 | goto label_17;
| }
| label_8:
0x00012fb0 adds r3, r5, r6 | r3 = r5 + r6;
0x00012fb2 str r3, [sp] | *(sp) = r3;
0x00012fb4 adds r3, 4 | r3 += 4;
0x00012fb6 cmp r3, r7 |
| if (r3 > r7) {
0x00012fb8 bhi 0x12f56 | goto label_0;
| }
0x00012fba ldr r5, [r5, r6] | r5 = *((r5 + r6));
0x00012fbc str r3, [sp] | *(sp) = r3;
0x00012fbe add r3, r5 | r3 += r5;
0x00012fc0 str r5, [r4, 0x38] | *((r4 + 0x38)) = r5;
0x00012fc2 cmp r3, r7 |
| if (r3 > r7) {
0x00012fc4 bhi 0x12f56 | goto label_0;
| }
0x00012fc6 ldr r2, [r4, 0x58] | r2 = *((r4 + 0x58));
0x00012fc8 cmp r2, 0 |
| if (r2 == 0) {
0x00012fca beq.w 0x131e8 | goto label_18;
| }
| label_9:
0x00012fce add.w r2, r3, 8 | r2 = r3 + 8;
0x00012fd2 str r3, [sp] | *(sp) = r3;
0x00012fd4 cmp r2, r7 |
| if (r2 > r7) {
0x00012fd6 bhi 0x12f56 | goto label_0;
| }
0x00012fd8 ldr r1, [r3] | r1 = *(r3);
0x00012fda ldr r5, [r4, 0x58] | r5 = *((r4 + 0x58));
0x00012fdc str r2, [sp] | *(sp) = r2;
0x00012fde str r1, [r4, 0x40] | *((r4 + 0x40)) = r1;
0x00012fe0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00012fe2 str r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
| do {
| label_4:
0x00012fe4 cmp.w r8, 5 |
0x00012fe8 it eq |
| if (r8 == 5) {
0x00012fea cmpeq r5, 0 | __asm ("cmpeq r5, 0");
| }
| if (r8 == 5) {
0x00012fec beq.w 0x13182 | goto label_19;
| }
| label_2:
0x00012ff0 mov r5, r4 | r5 = r4;
0x00012ff2 b 0x12f66 | goto label_1;
| label_15:
0x00012ff4 ldr r5, [r4, 0x58] | r5 = *((r4 + 0x58));
0x00012ff6 cmp r5, 0 |
0x00012ff8 beq 0x12fe4 |
| } while (r5 == 0);
0x00012ffa add.w r1, r3, 0xc | r1 = r3 + 0xc;
0x00012ffe cmp r1, r7 |
| if (r1 > r7) {
0x00013000 bhi 0x12f56 | goto label_0;
| }
0x00013002 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00013004 str r1, [sp] | *(sp) = r1;
0x00013006 cmp r2, 0 |
0x00013008 str r2, [r4, 0x34] | *((r4 + 0x34)) = r2;
| if (r2 <= 0) {
0x0001300a ble 0x12ff0 | goto label_2;
| }
0x0001300c ldr r0, [pc, 0x258] |
0x0001300e lsls r2, r2, 2 | r2 <<= 2;
0x00013010 movw r1, 0x213 | r1 = 0x213;
0x00013014 add r0, pc | r0 = 0x26280;
0x00013016 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001301a str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0001301c cmp r0, 0 |
| if (r0 == 0) {
0x0001301e beq 0x12f56 | goto label_0;
| }
0x00013020 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00013022 cmp r3, 0 |
| if (r3 <= 0) {
0x00013024 ble.w 0x1320c | goto label_20;
| }
0x00013028 ldr.w sb, [pc, 0x240] |
0x0001302c movs r6, 0 | r6 = 0;
0x0001302e ldr r0, [sp] | r0 = *(sp);
0x00013030 add sb, pc | sb = 0x262a0;
0x00013032 b 0x13068 | goto label_21;
| label_3:
0x00013034 ldr.w sl, [r4, 0x38] | sl = *((r4 + 0x38));
0x00013038 mov r2, r5 | r2 = r5;
0x0001303a movw r1, 0x21e | r1 = 0x21e;
0x0001303e mov r0, sb | r0 = sb;
0x00013040 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00013044 str.w r0, [sl, r6, lsl 2] | __asm ("str.w r0, [sl, r6, lsl 2]");
0x00013048 cmp r0, 0 |
| if (r0 == 0) {
0x0001304a beq 0x12f56 | goto label_0;
| }
0x0001304c ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0001304e ldr r1, [sp] | r1 = *(sp);
0x00013050 ldr.w r0, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r0 = *((r3 + offset_0));
0x00013054 adds r6, 1 | r6++;
0x00013056 blx 0x3300 | pthread_cond_destroy ();
0x0001305a ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0001305c ldr r0, [sp] | r0 = *(sp);
0x0001305e cmp r3, r6 |
0x00013060 add r0, r5 | r0 += r5;
0x00013062 str r0, [sp] | *(sp) = r0;
| if (r3 <= r6) {
0x00013064 ble.w 0x1320c | goto label_20;
| }
| label_21:
0x00013068 sub.w sl, r7, r0 | sl = r7 - r0;
0x0001306c mov r1, sl | r1 = sl;
0x0001306e blx 0x34c8 | r0 = BIO_read ();
0x00013072 adds r5, r0, 1 | r5 = r0 + 1;
0x00013074 cmp sl, r5 |
| if (sl != r5) {
0x00013076 bne 0x13034 | goto label_3;
| }
0x00013078 b 0x12f56 | goto label_0;
| label_14:
0x0001307a ldr r5, [r4, 0x58] | r5 = *((r4 + 0x58));
0x0001307c cmp r5, 0 |
| if (r5 == 0) {
0x0001307e beq 0x12fe4 | goto label_4;
| }
0x00013080 add.w r1, r3, 0xc | r1 = r3 + 0xc;
0x00013084 cmp r1, r7 |
| if (r1 > r7) {
0x00013086 bhi.w 0x12f56 | goto label_0;
| }
0x0001308a ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0001308c str r1, [sp] | *(sp) = r1;
0x0001308e cmp r2, 0 |
0x00013090 str r2, [r4, 0x34] | *((r4 + 0x34)) = r2;
| if (r2 <= 0) {
0x00013092 ble 0x12ff0 | goto label_2;
| }
0x00013094 ldr r5, [pc, 0x1d8] |
0x00013096 lsls r2, r2, 2 | r2 <<= 2;
0x00013098 mov.w r1, 0x1d4 | r1 = 0x1d4;
0x0001309c add r5, pc | r5 = 0x26310;
0x0001309e mov r0, r5 | r0 = r5;
0x000130a0 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000130a4 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x000130a6 cmp r0, 0 |
| if (r0 == 0) {
0x000130a8 beq.w 0x12f56 | goto label_0;
| }
0x000130ac cmp.w r8, 4 |
0x000130b0 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
| if (r8 == 4) {
0x000130b2 beq.w 0x13210 | goto label_22;
| }
0x000130b6 cmp r2, 1 |
| if (r2 > 1) {
0x000130b8 bgt.w 0x13230 | goto label_23;
| }
| label_11:
0x000130bc cmp r2, 0 |
| if (r2 <= 0) {
0x000130be ble.w 0x1320c | goto label_20;
| }
| label_10:
0x000130c2 ldr.w sb, [pc, 0x1b0] |
0x000130c6 movs r6, 0 | r6 = 0;
0x000130c8 add sb, pc | sb = 0x26342;
0x000130ca b 0x130ec | goto label_24;
| label_5:
0x000130cc add.w ip, r3, 4 |
0x000130d0 cmp ip, r7 |
| if (ip > r7) {
0x000130d2 bhi.w 0x12f56 | goto label_0;
| }
0x000130d6 ldr r2, [r2, r5] | r2 = *((r2 + r5));
0x000130d8 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000130da str.w r2, [r3, sl] | __asm ("str.w r2, [r3, sl]");
| label_6:
0x000130de ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000130e0 adds r6, 1 | r6++;
0x000130e2 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000130e6 cmp r3, r6 |
| if (r3 <= r6) {
0x000130e8 ble.w 0x1320c | goto label_20;
| }
| label_24:
0x000130ec ldr r0, [sp] | r0 = *(sp);
0x000130ee sub.w sl, r7, r0 | sl = r7 - r0;
0x000130f2 mov r1, sl | r1 = sl;
0x000130f4 blx 0x34c8 | r0 = BIO_read ();
0x000130f8 adds r5, r0, 1 | r5 = r0 + 1;
0x000130fa cmp sl, r5 |
| if (sl == r5) {
0x000130fc beq.w 0x12f56 | goto label_0;
| }
0x00013100 ldr.w sl, [r4, 0x38] | sl = *((r4 + 0x38));
0x00013104 mov r2, r5 | r2 = r5;
0x00013106 movw r1, 0x1e9 | r1 = 0x1e9;
0x0001310a mov r0, sb | r0 = sb;
0x0001310c bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00013110 str.w r0, [sl, r6, lsl 2] | __asm ("str.w r0, [sl, r6, lsl 2]");
0x00013114 lsl.w sl, r6, 2 | sl = r6 << 2;
0x00013118 cmp r0, 0 |
| if (r0 == 0) {
0x0001311a beq.w 0x12f56 | goto label_0;
| }
0x0001311e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00013120 ldr r1, [sp] | r1 = *(sp);
0x00013122 ldr.w r0, [r3, r6, lsl 2] | offset_1 = r6 << 2;
| r0 = *((r3 + offset_1));
0x00013126 blx 0x3300 | pthread_cond_destroy ();
0x0001312a ldr r2, [sp] | r2 = *(sp);
0x0001312c cmp.w r8, 4 |
0x00013130 add.w r3, r2, r5 | r3 = r2 + r5;
0x00013132 lsls r5, r0, 0xc | r5 = r0 << 0xc;
0x00013134 str r3, [sp] | *(sp) = r3;
| if (r5 == r0) {
0x00013136 beq 0x130cc | goto label_5;
| }
0x00013138 add.w ip, r3, 0xc |
0x0001313c cmp ip, r7 |
| if (ip > r7) {
0x0001313e bhi.w 0x12f56 | goto label_0;
| }
0x00013142 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00013144 cmp r2, 1 |
| if (r2 == 1) {
0x00013146 beq 0x131b4 | goto label_25;
| }
0x00013148 ldr r5, [r4, 0x4c] | r5 = *((r4 + 0x4c));
0x0001314a add.w r2, r6, r6, lsl 1 | r2 = r6 + (r6 << 1);
0x0001314e add.w r5, r5, r2, lsl 2 | r5 += (r2 << 2);
0x00013152 ldm.w r3, {r0, r1, r2} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
0x00013156 stm.w r5, {r0, r1, r2} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
0x0001315a b 0x130de | goto label_6;
| do {
| label_12:
0x0001315c movs r5, 0 | r5 = 0;
0x0001315e b 0x12f66 | goto label_1;
| label_13:
0x00013160 ldr r0, [pc, 0x114] |
0x00013162 movs r2, 0x60 | r2 = 0x60;
0x00013164 movw r1, 0x1b7 | r1 = 0x1b7;
0x00013168 add r0, pc | r0 = 0x263e4;
0x0001316a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0001316e mov r4, r0 | r4 = r0;
0x00013170 cmp r0, 0 |
0x00013172 beq 0x1315c |
| } while (r0 == 0);
0x00013174 movs r2, 0x60 | r2 = 0x60;
0x00013176 movs r1, 0 | r1 = 0;
0x00013178 blx 0x30d8 | fcn_000030d8 ();
0x0001317c movs r3, 1 | r3 = 1;
0x0001317e str r3, [r4, 0x58] | *((r4 + 0x58)) = r3;
0x00013180 b 0x12f34 | goto label_7;
| label_19:
0x00013182 mov r2, r7 | r2 = r7;
0x00013184 mov r1, sp | r1 = sp;
0x00013186 add.w r0, r4, 0x24 | r0 = r4 + 0x24;
0x0001318a bl 0xde98 | r0 = fcn_0000de98 (r0, r1, r2);
0x0001318e cmp r0, 1 |
| if (r0 == 1) {
0x00013190 beq.w 0x12ff0 | goto label_2;
| }
0x00013194 ldr r2, [pc, 0xe4] |
0x00013196 mov.w r1, -1 | r1 = -1;
0x0001319a movs r0, 5 | r0 = 5;
0x0001319c movs r5, 0 | r5 = 0;
0x0001319e add r2, pc | r2 = 0x2641e;
0x000131a0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000131a4 ldr r0, [pc, 0xd8] |
0x000131a6 mov r2, r4 | r2 = r4;
0x000131a8 movw r1, 0x253 | r1 = 0x253;
0x000131ac add r0, pc | r0 = 0x26430;
0x000131ae bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000131b2 b 0x12f66 | goto label_1;
| label_25:
0x000131b4 ldm.w r3, {r0, r1, r2} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
0x000131b8 add.w r6, r4, 0x40 | r6 = r4 + 0x40;
0x000131bc ldr r5, [r4, 0x58] | r5 = *((r4 + 0x58));
0x000131be str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000131c2 stm.w r6, {r0, r1, r2} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
0x000131c6 b 0x12fe4 | goto label_4;
| label_17:
0x000131c8 ldr r0, [pc, 0xb8] |
0x000131ca mov r2, r6 | r2 = r6;
0x000131cc mov.w r1, 0x22c | r1 = 0x22c;
0x000131d0 add r0, pc | r0 = 0x26458;
0x000131d2 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000131d6 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x000131d8 cmp r0, 0 |
| if (r0 == 0) {
0x000131da beq.w 0x12f56 | goto label_0;
| }
0x000131de ldr r1, [sp] | r1 = *(sp);
0x000131e0 blx 0x3300 | pthread_cond_destroy ();
0x000131e4 ldr r5, [sp] | r5 = *(sp);
0x000131e6 b 0x12fb0 | goto label_8;
| label_18:
0x000131e8 ldr r0, [pc, 0x9c] |
0x000131ea mov r2, r5 | r2 = r5;
0x000131ec mov.w r1, 0x23c | r1 = 0x23c;
0x000131f0 add r0, pc | r0 = 0x2647c;
0x000131f2 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000131f6 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x000131f8 cmp r0, 0 |
| if (r0 == 0) {
0x000131fa beq.w 0x12f56 | goto label_0;
| }
0x000131fe ldr r1, [sp] | r1 = *(sp);
0x00013200 mov r2, r5 | r2 = r5;
0x00013202 blx 0x32a0 | pthread_cond_signal ();
0x00013206 ldr r3, [sp] | r3 = *(sp);
0x00013208 add r3, r5 | r3 += r5;
0x0001320a b 0x12fce | goto label_9;
| label_20:
0x0001320c ldr r5, [r4, 0x58] | r5 = *((r4 + 0x58));
0x0001320e b 0x12fe4 | goto label_4;
| label_22:
0x00013210 lsls r2, r2, 2 | r2 <<= 2;
0x00013212 mov r0, r5 | r0 = r5;
0x00013214 mov.w r1, 0x1d8 | r1 = 0x1d8;
0x00013218 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001321c str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x0001321e cmp r0, 0 |
| if (r0 == 0) {
0x00013220 beq.w 0x12f56 | goto label_0;
| }
0x00013224 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00013226 cmp r3, 0 |
| if (r3 > 0) {
0x00013228 bgt.w 0x130c2 | goto label_10;
| }
0x0001322c mov r5, r4 | r5 = r4;
0x0001322e b 0x12f66 | goto label_1;
| label_23:
0x00013230 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00013234 mov r0, r5 | r0 = r5;
0x00013236 movw r1, 0x1dd | r1 = 0x1dd;
0x0001323a lsls r2, r2, 2 | r2 <<= 2;
0x0001323c bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00013240 str r0, [r4, 0x4c] | *((r4 + 0x4c)) = r0;
0x00013242 cmp r0, 0 |
| if (r0 == 0) {
0x00013244 beq.w 0x12f56 | goto label_0;
| }
0x00013248 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0001324a b 0x130bc | goto label_11;
| label_16:
0x0001324c blx 0x348c | fprintf_chk ()
0x00013250 pop {r1, r3, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x132c8 */
| #include <stdint.h>
|
; (fcn) fcn.000132c8 () | void fcn_000132c8 () {
| int16_t var_0h;
| int16_t var_4h;
| if (? < ?) {
0x000132c8 andhs fp, r3, 112, 10 |
| }
0x000132cc ldr r5, [pc, 0xa0] |
0x000132ce sub sp, 8 |
0x000132d0 movw r1, 0x3e3 | r1 = 0x3e3;
0x000132d4 ldr r3, [pc, 0x9c] | r3 = *(0x13374);
0x000132d6 ldr r0, [pc, 0xa0] |
0x000132d8 add r5, pc | r5 = 0x2664c;
0x000132da ldr r4, [pc, 0xa0] |
0x000132dc ldr r3, [r5, r3] |
0x000132de add r0, pc | r0 = 0x2665c;
0x000132e0 adds r0, 0x30 | r0 += 0x30;
0x000132e2 add r4, pc |
0x000132e4 ldr r3, [r3] | r3 = *(0x2664c);
0x000132e6 str r3, [sp, 4] | var_4h = r3;
0x000132e8 mov.w r3, 0 | r3 = 0;
0x000132ec bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000132f0 ldr r3, [pc, 0x8c] | r3 = *(0x13380);
0x000132f2 ldr r4, [r4, r3] | r4 = *(0x26664);
0x000132f4 ldr r3, [r4, 0x28] | r3 = *(0x2668c);
0x000132f6 cmp r3, 0 |
| if (r3 <= 0) {
0x000132f8 ble 0x1332e | goto label_1;
| }
0x000132fa ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000132fc str r3, [sp] | *(sp) = r3;
| if (r3 == 0) {
0x000132fe cbz r3, 0x1332e | goto label_1;
| }
0x00013300 mov r6, sp | r6 = sp;
0x00013302 add.w r5, r4, 0x1c | r5 = r4 + 0x1c;
| do {
| label_0:
0x00013306 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00013308 ldr r0, [r3] | r0 = *(r3);
0x0001330a bl 0x82b4 | r0 = fcn_000082b4 (r0);
| if (r0 == 0) {
0x0001330e cbz r0, 0x1335a | goto label_2;
| }
0x00013310 ldr r3, [sp] | r3 = *(sp);
0x00013312 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00013314 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00013316 bl 0x3f5c | fcn_00003f5c (r0);
0x0001331a ldr r3, [sp] | r3 = *(sp);
0x0001331c mov r0, r5 | r0 = r5;
0x0001331e ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00013320 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00013322 bl 0xd800 | fcn_0000d800 (r0, r1);
0x00013324 invalid |
0x00013328 str r3, [sp] | *(sp) = r3;
0x0001332a cmp r3, 0 |
0x0001332c bne 0x13306 |
| } while (r3 != 0);
| label_1:
0x0001332e ldr r2, [pc, 0x54] |
0x00013330 ldr r3, [pc, 0x40] | r3 = *(0x13374);
0x00013332 add r2, pc | r2 = 0x266bc;
0x00013334 ldr r3, [r2, r3] | r3 = *(0x266bc);
0x00013336 ldr r2, [r3] | r2 = *(0x266bc);
0x00013338 ldr r3, [sp, 4] | r3 = var_4h;
0x0001333a eors r2, r3 | r2 ^= r3;
0x0001333c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013340 bne 0x1336a | goto label_3;
| }
0x00013342 ldr r0, [pc, 0x44] |
0x00013344 movs r3, 3 | r3 = 3;
0x00013346 movs r2, 0 | r2 = 0;
0x00013348 mov.w r1, 0x3f4 | r1 = 0x3f4;
0x0001334c add r0, pc | r0 = 0x266da;
0x0001334e adds r0, 0x30 | r0 += 0x30;
0x00013350 add sp, 8 |
0x00013352 pop.w {r4, r5, r6, lr} |
0x00013356 b.w 0xfbf4 | void (*0xfbf4)() ();
| label_2:
0x0001335a mov r1, r6 | r1 = r6;
0x0001335c mov r0, r5 | r0 = r5;
0x0001335e bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00013362 ldr r3, [sp] | r3 = *(sp);
0x00013364 cmp r3, 0 |
| if (r3 != 0) {
0x00013366 bne 0x13306 | goto label_0;
| }
0x00013368 b 0x1332e | goto label_1;
| label_3:
0x0001336a blx 0x348c | fprintf_chk ()
0x0001336e nop |
| if (r0 != 0) {
0x00013370 cbnz r0, 0x133a2 | void (*0x133a2)() ();
| }
0x00013372 movs r1, r0 | r1 = r0;
0x00013374 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00013376 movs r0, r0 |
0x00013378 adr r2, 0x268 | r2 = 0x268;
0x0001337a movs r0, r0 |
| if (r6 != 0) {
0x0001337c cbnz r6, 0x133aa | void (*0x133aa)() ();
| }
0x0001337e movs r1, r0 | r1 = r0;
0x00013380 lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x00013382 movs r0, r0 |
| if (r6 != 0) {
0x00013384 cbnz r6, 0x1339e | void (*0x1339e)() ();
| }
0x00013386 movs r1, r0 | r1 = r0;
0x00013388 adr r2, 0xb0 | r2 = 0xb0;
0x0001338a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x13448 */
| #include <stdint.h>
|
; (fcn) fcn.00013448 () | void fcn_00013448 (int16_t arg1) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| r0 = arg1;
0x00013448 ldr r3, [pc, 0xc8] |
0x0001344a movs r2, 3 | r2 = 3;
0x0001344c ldr.w ip, [pc, 0xc8] |
0x00013450 movs r1, 0xe4 | r1 = 0xe4;
0x00013452 push {r4, r5, lr} |
0x00013454 mov r4, r0 | r4 = r0;
0x00013456 add r3, pc | r3 = 0x2696e;
0x00013458 sub sp, 0x2c |
0x0001345a add.w r0, r3, 0x64 | r0 = r3 + 0x64;
0x0001345e add ip, pc | ip = 0x2697a;
0x00013460 ldr r3, [pc, 0xb8] | r3 = *(0x1351c);
0x00013462 movs r5, 0 | r5 = 0;
0x00013464 ldr.w r3, [ip, r3] |
0x00013468 ldr r3, [r3] | r3 = *(0x2697a);
0x0001346a str r3, [sp, 0x24] | var_24h = r3;
0x0001346c mov.w r3, 0 | r3 = 0;
0x00013470 str r5, [sp, 0x14] | var_14h = r5;
0x00013472 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00013476 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00013478 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x0001347a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001347c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00013480 cmp r3, 4 |
| if (r3 <= 4) {
0x00013482 ble 0x134ee | goto label_2;
| }
0x00013484 ldr r2, [pc, 0x98] |
0x00013486 ldr r1, [pc, 0x9c] |
0x00013488 add r2, pc | r2 = 0x269ac;
0x0001348a add r1, pc | r1 = 0x269b4;
| label_0:
0x0001348c movs r3, 0xb | r3 = 0xb;
0x0001348e add r5, sp, 0x18 | r5 += var_18h;
0x00013490 strd r2, r0, [sp, 4] | __asm ("strd r2, r0, [var_4h]");
0x00013494 movs r2, 1 | r2 = 1;
0x00013496 str r1, [sp] | *(sp) = r1;
0x00013498 mov r0, r5 | r0 = r5;
0x0001349a mov r1, r3 | r1 = r3;
0x0001349c blx 0x3378 | r0 = shutdown ();
0x000134a0 cmp r0, 0xa |
| if (r0 > 0xa) {
0x000134a2 bgt 0x134f8 | goto label_3;
| }
0x000134a4 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x000134a6 mov r1, r5 | r1 = r5;
0x000134a8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000134aa ldrd r0, r2, [r3, 0x80] | __asm ("ldrd r0, r2, [r3, 0x80]");
0x000134ae ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x000134b0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000134b2 str r0, [sp, 0x14] | var_14h = r0;
0x000134b4 cbnz r0, 0x134de |
| while (1) {
| label_1:
0x000134b6 ldr r0, [pc, 0x70] |
0x000134b8 movs r3, 3 | r3 = 3;
0x000134ba add r2, sp, 0x14 | r2 += var_14h;
0x000134bc movs r1, 0xf0 | r1 = 0xf0;
0x000134be add r0, pc | r0 = 0x269ec;
0x000134c0 adds r0, 0x64 | r0 += 0x64;
0x000134c2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000134c6 ldr r2, [pc, 0x64] |
0x000134c8 ldr r3, [pc, 0x50] | r3 = *(0x1351c);
0x000134ca add r2, pc | r2 = 0x269fc;
0x000134cc ldr r3, [r2, r3] | r3 = *(0x269fc);
0x000134ce ldr r2, [r3] | r2 = *(0x269fc);
0x000134d0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000134d2 eors r2, r3 | r2 ^= r3;
0x000134d4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000134d8 bne 0x1350e | goto label_4;
| }
0x000134da add sp, 0x2c |
0x000134dc pop {r4, r5, pc} |
0x000134de ldr r2, [pc, 0x50] |
0x000134e0 mov r3, r0 | r3 = r0;
0x000134e2 movs r1, 0 | r1 = 0;
0x000134e4 movs r0, 5 | r0 = 5;
0x000134e6 add r2, pc | r2 = 0x26a1c;
0x000134e8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000134ec b 0x134b6 |
| }
| label_2:
0x000134ee ldr r2, [pc, 0x44] |
0x000134f0 ldr r1, [pc, 0x44] |
0x000134f2 add r2, pc | r2 = 0x26a2c;
0x000134f4 add r1, pc | r1 = 0x26a30;
0x000134f6 b 0x1348c | goto label_0;
| label_3:
0x000134f8 ldr r2, [pc, 0x40] |
0x000134fa mvn r4, 1 | r4 = ~1;
0x000134fe mov r3, r0 | r3 = r0;
0x00013500 movs r1, 0 | r1 = 0;
0x00013502 movs r0, 5 | r0 = 5;
0x00013504 str r4, [sp, 0x14] | var_14h = r4;
0x00013506 add r2, pc | r2 = 0x26a46;
0x00013508 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001350c b 0x134b6 | goto label_1;
| label_4:
0x0001350e blx 0x348c | fprintf_chk ()
0x00013512 nop |
0x00013514 adr r1, 0x88 | r1 = 0x88;
0x00013516 movs r0, r0 |
0x00013518 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x135f0 */
| #include <stdint.h>
|
; (fcn) fcn.000135f0 () | void fcn_000135f0 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
0x000135f0 blmi 0x8a5e7c | __asm ("blmi aav.0x0001b698");
0x000135f4 push {r4, r5, lr} |
0x000135f6 sub sp, 0x14 |
0x000135f8 add r2, pc | r2 += pc;
0x000135fa ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000135fc ldr r3, [r3] | r3 = *(r3);
0x000135fe str r3, [sp, 0xc] | var_ch = r3;
0x00013600 mov.w r3, 0 | r3 = 0;
0x00013604 ldr.w r3, [r0, 0xfc] | r3 = *((r0 + 0xfc));
| if (r3 == 0) {
0x00013608 cbz r3, 0x13612 | goto label_1;
| }
0x0001360a ldr.w r3, [r0, 0xf4] | r3 = *((r0 + 0xf4));
0x0001360e mov r4, r0 | r4 = r0;
0x00013610 cbnz r3, 0x1362a |
| while (1) {
| label_1:
0x00013612 ldr r2, [pc, 0x6c] |
0x00013614 ldr r3, [pc, 0x64] | r3 = *(0x1367c);
0x00013616 add r2, pc | r2 = 0x26c9c;
0x00013618 ldr r3, [r2, r3] | r3 = *(0x26c9c);
0x0001361a ldr r2, [r3] | r2 = *(0x26c9c);
0x0001361c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001361e eors r2, r3 | r2 ^= r3;
0x00013620 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013624 bne 0x13674 | goto label_2;
| }
0x00013626 add sp, 0x14 |
0x00013628 pop {r4, r5, pc} |
0x0001362a mov r5, sp | r5 = sp;
0x0001362c mov r0, r5 | r0 = r5;
0x0001362e bl 0x3874 | fcn_00003874 (r0);
0x00013632 ldr.w r2, [r4, 0x124] | r2 = *((r4 + 0x124));
0x00013636 add.w r3, r4, 0x11c | r3 = r4 + 0x11c;
0x0001363a ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x0001363e stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
| if (r2 == 0) {
0x00013642 cbz r2, 0x13662 | goto label_3;
| }
0x00013644 ldr.w r0, [r4, 0x118] | r0 = *((r4 + 0x118));
0x00013648 ldrd r1, r2, [r4, 0x100] | __asm ("ldrd r1, r2, [r4, 0x100]");
0x0001364c lsls r0, r0, 1 | r0 <<= 1;
0x0001364e cmp r0, r2 |
0x00013650 it ge |
| if (r0 < r2) {
0x00013652 movge r0, r2 | r0 = r2;
| }
0x00013654 str.w r0, [r4, 0x118] | __asm ("str.w r0, [r4, 0x118]");
| label_0:
0x00013658 bl 0x13574 | fcn_00013574 (r0, r1, r2);
0x0001365c str.w r0, [r4, 0x114] | __asm ("str.w r0, [r4, 0x114]");
0x00013660 b 0x13612 |
| }
| label_3:
0x00013662 ldrd r1, r2, [r4, 0x100] | __asm ("ldrd r1, r2, [r4, 0x100]");
0x00013666 movs r3, 1 | r3 = 1;
0x00013668 str.w r3, [r4, 0x124] | __asm ("str.w r3, [r4, 0x124]");
0x0001366c mov r0, r1 | r0 = r1;
0x0001366e str.w r1, [r4, 0x118] | __asm ("str.w r1, [r4, 0x118]");
0x00013672 b 0x13658 | goto label_0;
| label_2:
0x00013674 blx 0x348c | fprintf_chk ()
0x00013678 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x136cc */
| #include <stdint.h>
|
; (fcn) fcn.000136cc () | void fcn_000136cc (int16_t arg_0h, int16_t arg_b8h, int16_t arg_c8h, int16_t arg_190h, int16_t arg_258h, int16_t arg_2a8h, int16_t arg_2f8h, int16_t arg_360h) {
| int16_t var_20h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| if (? < ?) {
0x000136cc andhs r4, r3, 0x7e0000 | r4 = r3 & str_SESSION_EXPIRY_INTERVAL;
| }
0x000136d0 ldr r3, [pc, 0x1f8] |
0x000136d2 movs r1, 0xc7 | r1 = 0xc7;
0x000136d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000136d8 sub sp, 0x14 |
0x000136da ldr r5, [pc, 0x1f4] |
0x000136dc add r0, pc | r0 += pc;
0x000136de movs r4, 0 | r4 = 0;
0x000136e0 ldr r3, [r0, r3] | r3 = *((r0 + r3));
0x000136e2 add r5, pc | r5 = 0x26fb8;
0x000136e4 ldr r6, [pc, 0x1ec] |
0x000136e6 add.w r0, r5, 0x90 | r0 = r5 + 0x90;
0x000136ea ldr r3, [r3] | r3 = *(0x138cc);
0x000136ec str r3, [sp, 0xc] | var_ch = r3;
0x000136ee mov.w r3, 0 | r3 = 0;
0x000136f2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000136f6 movs r2, 3 | r2 = 3;
0x000136f8 movw r1, 0x8f2 | r1 = 0x8f2;
0x000136fc add.w r0, r5, 0xa4 | r0 = r5 + 0xa4;
0x00013700 str r4, [sp, 4] | var_4h = r4;
0x00013702 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00013706 ldr r2, [pc, 0x1d0] | r2 = *(0x138da);
0x00013708 add r6, pc | r6 = 0x26fe0;
0x0001370a ldr r3, [pc, 0x1d0] | r3 = *(0x138de);
0x0001370c ldr.w r8, [r6, r2] | r8 = *(0x26fe0);
0x00013710 ldr r7, [r6, r3] | r7 = *(0x26fe0);
0x00013712 ldr.w r3, [r8] | r3 = *(0x26fe0);
0x00013716 ldr r2, [r7] | r2 = *(0x26fe0);
0x00013718 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0001371a beq 0x13766 | goto label_3;
| }
0x0001371c ldr r3, [pc, 0x1c0] | r3 = *(0x138e0);
0x0001371e add r5, sp, 8 | r5 += var_8h;
0x00013720 str r4, [sp, 8] | var_8h = r4;
0x00013722 ldr.w sb, [r6, r3] | sb = *((r6 + r3));
0x00013726 ldr.w r0, [sb] | r0 = *(sb);
| if (r0 != 0) {
0x0001372a cbnz r0, 0x13734 | goto label_6;
| }
0x0001372c b 0x137ae | goto label_7;
| do {
| label_1:
0x0001372e adds r4, 1 | r4++;
| label_0:
0x00013730 ldr.w r0, [sb] | r0 = *(sb);
| label_6:
0x00013734 mov r1, r5 | r1 = r5;
0x00013736 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
| if (r0 == 0) {
0x0001373a cbz r0, 0x13754 | goto label_8;
| }
0x0001373c ldr r3, [sp, 8] | r3 = var_8h;
0x0001373e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00013740 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00013742 ldrh r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00013744 sbfx r3, r3, 6, 4 | __asm ("sbfx r3, r3, 6, 4");
0x00013748 cmp r3, 0 |
0x0001374a bgt 0x1372e |
| } while (r3 > 0);
0x0001374c ldrb r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x0001374e lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00013750 bpl 0x13730 | goto label_0;
| }
0x00013752 b 0x1372e | goto label_1;
| label_8:
0x00013754 ldr r2, [pc, 0x18c] |
0x00013756 mov r3, r4 | r3 = r4;
0x00013758 mov.w r1, -1 | r1 = -1;
0x0001375c movs r0, 3 | r0 = 3;
0x0001375e add r2, pc | r2 = 0x27046;
0x00013760 bl 0x9a28 | fcn_00009a28 (r0, r1);
| if (r4 != 0) {
0x00013764 cbz r4, 0x137be |
| label_3:
0x00013766 ldr r0, [pc, 0x180] |
0x00013768 movs r3, 3 | r3 = 3;
0x0001376a add r2, sp, 4 | r2 += var_4h;
0x0001376c movw r1, 0x915 | r1 = 0x915;
0x00013770 add r0, pc | r0 = 0x2705e;
0x00013772 adds r0, 0xa4 | r0 += 0xa4;
0x00013774 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00013778 ldr r3, [pc, 0x170] | r3 = *(0x138ec);
0x0001377a ldr r7, [r6, r3] | r7 = *((r6 + r3));
0x0001377c ldr r3, [r7] | r3 = *(r7);
0x0001377e cmp r3, 0 |
| if (r3 != 0) {
0x00013780 bne 0x1386c | goto label_9;
| }
| label_5:
0x00013782 ldr r2, [pc, 0x16c] |
0x00013784 ldr r3, [pc, 0x144] | r3 = *(0x138cc);
0x00013786 add r2, pc | r2 = 0x2707c;
0x00013788 ldr r3, [r2, r3] | r3 = *(0x2707c);
0x0001378a ldr r2, [r3] | r2 = *(0x2707c);
0x0001378c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001378e eors r2, r3 | r2 ^= r3;
0x00013790 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013794 bne.w 0x138c2 | goto label_10;
| }
0x00013798 ldr r0, [pc, 0x158] |
0x0001379a movs r3, 3 | r3 = 3;
0x0001379c movs r2, 0 | r2 = 0;
0x0001379e movs r1, 0xd9 | r1 = 0xd9;
0x000137a0 add r0, pc | r0 = 0x27098;
0x000137a2 adds r0, 0x90 | r0 += 0x90;
0x000137a4 add sp, 0x14 |
0x000137a6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000137aa b.w 0xfbf4 | void (*0xfbf4)() ();
| label_7:
0x000137ae ldr r2, [pc, 0x148] |
0x000137b0 mov r3, r0 | r3 = r0;
0x000137b2 mov.w r1, -1 | r1 = -1;
0x000137b6 movs r0, 3 | r0 = 3;
0x000137b8 add r2, pc | r2 = 0x270b6;
0x000137ba bl 0x9a28 | fcn_00009a28 (r0, r1);
| }
0x000137be ldr r3, [pc, 0x13c] | r3 = *(0x138fe);
0x000137c0 movs r4, 0x64 | r4 = 0x64;
0x000137c2 ldr r5, [pc, 0x13c] |
0x000137c4 movs r2, 1 | r2 = 1;
0x000137c6 ldr.w sb, [pc, 0x13c] |
0x000137ca ldr.w sl, [r6, r3] | sl = *((r6 + r3));
0x000137ce add r5, pc | r5 = 0x270d4;
0x000137d0 adds r5, 0x80 | r5 += 0x80;
0x000137d2 add sb, pc | sb = 0x270dc;
0x000137d4 str.w r2, [sl] | __asm ("str.w r2, [sl]");
| do {
0x000137d8 ldr.w r3, [r8] | r3 = *(r8);
0x000137dc ldr r2, [r7] | r2 = *(r7);
0x000137de orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x000137e0 beq 0x1384e | goto label_11;
| }
| label_2:
0x000137e2 subs r4, 1 | r4--;
| if (r4 == 1) {
0x000137e4 beq 0x1384e | goto label_11;
| }
0x000137e6 ldr r3, [pc, 0x120] | r3 = *(0x1390a);
0x000137e8 ldr.w fp, [r6, r3] | fp = *((r6 + r3));
0x000137ec ldr.w r0, [fp] | r0 = *(fp);
0x000137f0 blx 0x35b4 | r0 = fcn_000035b4 ();
| if (r0 != 0) {
0x000137f4 cbnz r0, 0x1385a | goto label_12;
| }
| label_4:
0x000137f6 ldr r2, [pc, 0x114] |
0x000137f8 mov.w r1, -1 | r1 = -1;
0x000137fc movs r0, 3 | r0 = 3;
0x000137fe add r2, pc | r2 = 0x27110;
0x00013800 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013804 movs r2, 3 | r2 = 3;
0x00013806 movs r1, 0x68 | r1 = 0x68;
0x00013808 mov r0, r5 | r0 = r5;
0x0001380a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0001380c vld3.8 {d15[2], d16[2], d17[2]}, [r3], r8 | __asm ("vld3.8 {d15[2], d16[2], d17[2]}, [r3], r8");
0x00013810 str r0, [r4, 8] |
0x00013812 movt r0, 1 | r0 = 0xNaN;
0x00013816 blx 0x3174 | pthread_create (r0, r1, r2, r3);
0x0001381a mov r0, r5 | r0 = r5;
0x0001381c movs r3, 3 | r3 = 3;
0x0001381e movs r2, 0 | r2 = 0;
0x00013820 movs r1, 0x6e | r1 = 0x6e;
0x00013822 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00013826 ldr.w r0, [fp] | r0 = *(fp);
0x0001382a blx 0x3644 | r0 = fcn_00003644 ();
0x0001382e cmp r0, 0 |
0x00013830 beq 0x137d8 |
| } while (r0 == 0);
0x00013832 blx 0x2f10 | strerror (r0);
0x00013836 ldr r2, [pc, 0xd8] |
0x00013838 mov r3, r0 | r3 = r0;
0x0001383a movs r1, 0 | r1 = 0;
0x0001383c movs r0, 5 | r0 = 5;
0x0001383e add r2, pc | r2 = 0x27154;
0x00013840 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013844 ldr.w r3, [r8] | r3 = *(r8);
0x00013848 ldr r2, [r7] | r2 = *(r7);
0x0001384a orrs r3, r2 | r3 |= r2;
| if (r3 != r2) {
0x0001384c bne 0x137e2 | goto label_2;
| }
| label_11:
0x0001384e movs r2, 1 | r2 = 1;
0x00013850 movs r3, 0 | r3 = 0;
0x00013852 str r2, [sp, 4] | var_4h = r2;
0x00013854 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x00013858 b 0x13766 | goto label_3;
| label_12:
0x0001385a blx 0x2f10 | strerror (r0);
0x0001385e mov r2, sb | r2 = sb;
0x00013860 mov r3, r0 | r3 = r0;
0x00013862 movs r1, 0 | r1 = 0;
0x00013864 movs r0, 5 | r0 = 5;
0x00013866 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001386a b 0x137f6 | goto label_4;
| label_9:
0x0001386c ldr r3, [pc, 0xa4] |
0x0001386e movs r2, 0 | r2 = 0;
0x00013870 str r2, [sp, 8] | var_8h = r2;
0x00013872 add r5, sp, 8 | r5 += var_8h;
0x00013874 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00013876 ldr r3, [r3] | r3 = *(0x13914);
0x00013878 ldr r0, [r3, 4] | r0 = *(0x13918);
0x0001387a bl 0xd99c | fcn_0000d99c (r0);
0x0001387e ldr r3, [pc, 0x60] | r3 = *(0x138e2);
0x00013880 ldr.w sb, [r6, r3] | sb = *((r6 + r3));
0x00013884 ldr.w r0, [sb] | r0 = *(sb);
0x00013888 bl 0xd99c | fcn_0000d99c (r0);
0x0001388c ldr r3, [pc, 0x88] | r3 = *(0x13918);
0x0001388e ldr r6, [r6, r3] | r6 = *((r6 + r3));
0x00013890 b 0x1389a |
| while (r0 != 0) {
0x00013892 ldr r3, [sp, 8] | r3 = var_8h;
0x00013894 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00013896 bl 0x12dec | fcn_00012dec (r0);
0x0001389a ldr r0, [r6] | r0 = *(r6);
0x0001389c mov r1, r5 | r1 = r5;
0x0001389e bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x000138a2 mov r4, r0 | r4 = r0;
0x000138a4 cmp r0, 0 |
0x000138a6 bne 0x13892 |
| }
0x000138a8 ldr r0, [r6] | r0 = *(r6);
0x000138aa bl 0xd99c | fcn_0000d99c (r0);
0x000138ae str.w r4, [sb] | __asm ("str.w r4, [sb]");
0x000138b2 bl 0xf4d8 | fcn_0000f4d8 ();
0x000138b6 bl 0x103ac | fcn_000103ac ();
0x000138ba bl 0x99a0 | fcn_000099a0 ();
0x000138be str r4, [r7] | *(r7) = r4;
0x000138c0 b 0x13782 | goto label_5;
| label_10:
0x000138c2 blx 0x348c | fprintf_chk ()
0x000138c6 nop |
0x000138c8 push {r2, r4, r5, r7, lr} |
0x000138ca movs r1, r0 | r1 = r0;
0x000138cc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000138ce movs r0, r0 |
0x000138d0 ldr r6, [sp, 0x258] | r6 = *(arg_258h);
0x000138d2 movs r0, r0 |
0x000138d4 push {r3, r7, lr} |
0x000138d6 movs r1, r0 | r1 = r0;
0x000138d8 lsls r4, r6, 0xb | r4 = r6 << 0xb;
0x000138da movs r0, r0 |
0x000138dc lsls r0, r2, 0xd | r0 = r2 << 0xd;
0x000138de movs r0, r0 |
0x000138e0 lsls r0, r4, 0xd | r0 = r4 << 0xd;
0x000138e2 movs r0, r0 |
0x000138e4 str r4, [sp, 0x2f8] | *(arg_2f8h) = r4;
0x000138e6 movs r0, r0 |
0x000138e8 ldr r6, [sp, 0x20] | r6 = var_20h;
0x000138ea movs r0, r0 |
0x000138ec lsls r4, r3, 0xc | r4 = r3 << 0xc;
0x000138ee movs r0, r0 |
0x000138f0 push {r1, r3, lr} |
0x000138f2 movs r1, r0 | r1 = r0;
0x000138f4 ldr r5, [sp, 0x360] | r5 = *(arg_360h);
0x000138f6 movs r0, r0 |
0x000138f8 str r4, [sp, 0x190] | *(arg_190h) = r4;
0x000138fa movs r0, r0 |
0x000138fc lsls r4, r1, 0xc | r4 = r1 << 0xc;
0x000138fe movs r0, r0 |
0x00013900 ldr r5, [sp, 0x2a8] | r5 = *(arg_2a8h);
0x00013902 movs r0, r0 |
0x00013904 str r4, [sp, 0xb8] | *(arg_b8h) = r4;
0x00013906 movs r0, r0 |
0x00013908 lsls r0, r5, 0xb | r0 = r5 << 0xb;
0x0001390a movs r0, r0 |
0x0001390c str r4, [sp, 0xc8] | *(arg_c8h) = r4;
0x0001390e movs r0, r0 |
0x00013910 str r3, [sp, 0x2a8] | *(arg_2a8h) = r3;
0x00013912 movs r0, r0 |
0x00013914 lsls r4, r7, 0xc | r4 = r7 << 0xc;
0x00013916 movs r0, r0 |
0x00013918 lsls r4, r0, 0xc | r4 = r0 << 0xc;
0x0001391a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x1391c */
| #include <stdint.h>
|
; (fcn) fcn.0001391c () | void fcn_0001391c (int16_t arg_e8h, int16_t arg_f8h, int16_t arg_fffh, int16_t arg_130h, int16_t arg_138h, int16_t arg_258h_2, int16_t arg_260h, int16_t arg_2a8h, int16_t arg_3b0h, int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch_2;
| int16_t var_10h_3;
| int16_t var_14h;
| int16_t var_18h;
| void * base;
| int16_t var_20h_4;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ch;
| r0 = arg1;
0x0001391c smlabbhs r0, r6, fp, r4 | __asm ("smlabbhs r0, r6, fp, r4");
0x00013920 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00013924 mov r6, r0 | r6 = r0;
0x00013926 ldr r5, [pc, 0x214] |
0x00013928 sub sp, 0x34 |
0x0001392a add r3, pc | r3 += pc;
0x0001392c movs r2, 3 | r2 = 3;
0x0001392e ldr r4, [r0, 0xc] | r4 = *(var_0hxc);
0x00013930 add.w r0, r3, 0xb4 | r0 = r3 + 0xb4;
0x00013934 ldr r3, [pc, 0x208] | r3 = *(0x13b40);
0x00013936 add r5, pc | r5 = 0x27478;
0x00013938 ldr r3, [r5, r3] |
0x0001393a ldr r3, [r3] | r3 = *(0x27478);
0x0001393c str r3, [sp, 0x2c] | var_2ch = r3;
0x0001393e mov.w r3, 0 | r3 = 0;
0x00013942 ldr r3, [pc, 0x200] |
0x00013944 str r1, [sp, 0x18] | var_18h = r1;
0x00013946 movw r1, 0x272 | r1 = 0x272;
0x0001394a add r3, pc | r3 = 0x27494;
0x0001394c str r3, [sp, 0xc] | var_ch_2 = r3;
0x0001394e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00013952 ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
| if (r3 == 0) {
0x00013956 cbz r3, 0x1396a | goto label_5;
| }
0x00013958 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0001395a add r2, sp, 0x20 | r2 += var_20h_4;
0x0001395c ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x00013960 add r1, sp, 0x1c | r1 += base;
0x00013962 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00013964 mov r5, r0 | r5 = r0;
0x00013966 str r0, [sp, 0x18] | var_18h = r0;
0x00013968 cbz r0, 0x139b2 |
| while (r1 <= 0) {
| label_5:
0x0001396a mov.w r8, 0 | r8 = 0;
| label_3:
0x0001396e ldr r4, [r4] | r4 = *(r4);
0x00013970 mov r3, r8 | r3 = r8;
0x00013972 ldr r2, [pc, 0x1d4] |
0x00013974 mov.w r1, -1 | r1 = -1;
0x00013978 movs r0, 3 | r0 = 3;
0x0001397a str r4, [sp] | *(sp) = r4;
0x0001397c add r2, pc | r2 = 0x274ca;
0x0001397e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013982 ldr r0, [pc, 0x1c8] |
0x00013984 movs r3, 3 | r3 = 3;
0x00013986 add r2, sp, 0x18 | r2 += var_18h;
0x00013988 movw r1, 0x2a9 | r1 = 0x2a9;
0x0001398c add r0, pc | r0 = 0x274de;
0x0001398e adds r0, 0xb4 | r0 += 0xb4;
0x00013990 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00013994 ldr r2, [pc, 0x1b8] |
0x00013996 ldr r3, [pc, 0x1a8] | r3 = *(0x13b42);
0x00013998 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0001399a add r2, pc | r2 = 0x274ee;
0x0001399c ldr r3, [r2, r3] | r3 = *(0x274ee);
0x0001399e ldr r2, [r3] | r2 = *(0x274ee);
0x000139a0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000139a2 eors r2, r3 | r2 ^= r3;
0x000139a4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000139a8 bne.w 0x13b34 | goto label_6;
| }
0x000139ac add sp, 0x34 |
0x000139ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000139b2 ldr r1, [sp, 0x20] | r1 = var_20h_4;
0x000139b4 cmp r1, 0 |
0x000139b6 ble 0x1396a |
| }
0x000139b8 ldr r3, [pc, 0x198] |
0x000139ba movs r2, 4 | r2 = 4;
0x000139bc ldr r0, [sp, 0x1c] | r0 = base;
0x000139be add r3, pc | r3 = 0x27516;
0x000139c0 blx 0x2f04 | qsort ();
0x000139c4 ldrd r8, r2, [sp, 0x18] | __asm ("ldrd r8, r2, [var_18h]");
0x000139c8 cmp.w r8, 0 |
| if (r8 != 0) {
0x000139cc bne.w 0x13b30 | goto label_7;
| }
0x000139ce strh r0, [r6, 4] | *((r6 + 4)) = r0;
0x000139d0 ldr r3, [pc, 0x184] |
0x000139d2 mov r5, r8 | r5 = r8;
0x000139d4 ldr r1, [pc, 0x184] |
0x000139d6 mov fp, r6 |
0x000139d8 str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h_3]");
0x000139dc add r3, pc | r3 = 0x27538;
0x000139de add r1, pc | r1 = 0x2753e;
0x000139e0 mov sl, r3 | sl = r3;
0x000139e2 str r1, [sp, 0x14] | var_14h = r1;
0x000139e4 b 0x13ad8 |
| while (r3 == 0x63) {
0x000139e6 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x000139e8 cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x000139ea bne.w 0x13af0 | goto label_8;
| }
| label_0:
0x000139ee ldr.w r3, [r4, 0x84] | r3 = *((r4 + 0x84));
0x000139f2 add.w r8, sp, 0x28 | r8 += var_28h_2;
0x000139f6 add.w sb, sp, 0x24 | sb += var_24h_2;
0x000139fa ldr.w r0, [r4, 0x80] | r0 = *((r4 + 0x80));
0x000139fe mov r2, sb | r2 = sb;
0x00013a00 ldr r6, [r3, 0x10] | r6 = *((r3 + 0x10));
0x00013a02 mov r3, r8 | r3 = r8;
0x00013a04 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00013a06 str r0, [sp, 0x18] | var_18h = r0;
0x00013a08 cmp r0, 0 |
| if (r0 == 0) {
0x00013a0a bne 0x13acc |
0x00013a0c ldr.w r6, [r4, 0x8c] | r6 = *((r4 + 0x8c));
| if (r6 != 0) {
0x00013a10 cbz r6, 0x13a22 |
0x00013a12 ldr.w r0, [r4, 0x94] | r0 = *((r4 + 0x94));
0x00013a16 mov r2, r8 | r2 = r8;
0x00013a18 mov r1, sb | r1 = sb;
0x00013a1a blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00013a1c str r0, [sp, 0x18] | var_18h = r0;
0x00013a1e cmp r0, 0 |
| if (r0 != 0) {
0x00013a20 bne 0x13acc | goto label_9;
| }
| }
0x00013a22 ldr r3, [sp, 0x1c] | r3 = base;
0x00013a24 ldr r3, [r3, r7] | r3 = *((r3 + r7));
0x00013a26 ldrb r2, [r3] | r2 = *(r3);
0x00013a28 cmp r2, 0x63 |
| if (r2 != 0x63) {
0x00013a2a bne 0x13b14 | goto label_10;
| }
0x00013a2c ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00013a2e cmp r2, 0x35 |
| if (r2 != 0x35) {
0x00013a30 bne 0x13b14 | goto label_10;
| }
0x00013a32 ldrb r3, [r3, 2] | r3 = *((r3 + 2));
0x00013a34 cmp r3, 0x2d |
0x00013a36 it eq |
| if (r3 != 0x2d) {
0x00013a38 moveq r2, 5 | r2 = 5;
| }
| if (r3 != 0x2d) {
0x00013a3a bne 0x13b14 | goto label_10;
| }
| label_2:
0x00013a3c ldrd r0, r1, [sp, 0x24] | __asm ("ldrd r0, r1, [var_24h_2]");
0x00013a40 movs r3, 0 | r3 = 0;
0x00013a42 bl 0x12ef4 | r0 = fcn_00012ef4 (r0, r1, r2, r3);
0x00013a46 mov r6, r0 | r6 = r0;
0x00013a48 cmp r0, 0 |
| if (r0 == 0) {
0x00013a4a beq 0x13acc | goto label_9;
| }
0x00013a4c ldr r3, [sp, 0x1c] | r3 = base;
0x00013a4e ldr r0, [r3, r7] | r0 = *((r3 + r7));
0x00013a50 blx 0x3258 | unlink (r0);
0x00013a54 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x00013a58 adds r2, r0, 1 | r2 = r0 + 1;
0x00013a5a movw r1, 0x292 | r1 = 0x292;
0x00013a5e mov r0, r8 | r0 = r8;
0x00013a60 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00013a64 ldr r3, [sp, 0x1c] | r3 = base;
0x00013a66 str r0, [r6, 0x5c] | *((r6 + 0x5c)) = r0;
0x00013a68 ldr r1, [r3, r7] | r1 = *((r3 + r7));
0x00013a6a blx 0x3300 | pthread_cond_destroy ();
0x00013a6c invalid |
0x00013a70 movs r1, 0x2d | r1 = 0x2d;
0x00013a72 str.w fp, [r6, 0x50] | __asm ("str.w fp, [r6, 0x50]");
0x00013a76 ldr r0, [r3, r7] | r0 = *((r3 + r7));
0x00013a78 blx 0x3074 | fcn_00003074 ();
0x00013a7c movs r2, 0xa | r2 = 0xa;
0x00013a7e movs r1, 0 | r1 = 0;
0x00013a80 adds r0, 1 | r0++;
0x00013a82 blx 0x32f4 | sem_init ();
0x00013a86 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00013a88 mov r1, r6 | r1 = r6;
0x00013a8a ldr r3, [pc, 0xd4] | r3 = *(0x13b62);
0x00013a8c str r0, [r6, 0x54] | *((r6 + 0x54)) = r0;
0x00013a8e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00013a90 movs r2, 0x60 | r2 = 0x60;
0x00013a92 ldr r0, [r3] | r0 = *(0x13b62);
0x00013a94 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00013a98 ldr r2, [sp, 0x24] | r2 = var_24h_2;
| if (r2 != 0) {
0x00013a9a cbz r2, 0x13aa6 |
0x00013a9c movw r1, 0x29a | r1 = 0x29a;
0x00013aa0 mov r0, r8 | r0 = r8;
0x00013aa2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x00013aa6 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x00013aa8 ldr r2, [r6, 0x54] | r2 = *((r6 + 0x54));
0x00013aaa adds r3, 1 | r3++;
0x00013aac str r3, [sp, 0x10] | var_10h_3 = r3;
0x00013aae ldr.w r3, [fp, 0xe8] | r3 = *(arg_e8h);
0x00013ab2 cmp r3, r2 |
0x00013ab4 it lo |
| if (r3 >= r2) {
0x00013ab6 movlo r3, r2 | r3 = r2;
| }
0x00013ab8 str.w r3, [fp, 0xe8] | __asm ("str.w r3, [arg_e8h]");
0x00013abc ldr r3, [r6] | r3 = *(r6);
0x00013abe cmp r3, 3 |
0x00013ac0 ittt eq |
| if (r3 != 3) {
0x00013ac2 ldreq r3, [fp, 0xf8] | r3 = *(arg_f8h);
| }
| if (r3 != 3) {
0x00013ac6 addeq r3, 1 | r3++;
| }
| if (r3 != 3) {
0x00013ac8 str.w r3, [fp, 0xf8] | __asm ("str.w r3, [arg_f8h]");
| goto label_9;
| }
| }
| label_9:
0x00013acc ldr r2, [sp, 0x1c] | r2 = base;
0x00013ace ldr r1, [r2, r7] | r1 = *((r2 + r7));
| if (r1 != 0) {
0x00013ad0 cbnz r1, 0x13b04 | goto label_11;
| }
| label_1:
0x00013ad2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00013ad4 adds r5, 1 | r5++;
| if (r3 != 0) {
0x00013ad6 cbnz r3, 0x13b18 | goto label_12;
| }
0x00013ad8 ldr r3, [sp, 0x20] | r3 = var_20h_4;
0x00013ada cmp r3, r5 |
| if (r3 <= r5) {
0x00013adc ble 0x13b18 | goto label_12;
| }
0x00013ade movs r3, 0 | r3 = 0;
0x00013ae0 lsls r7, r5, 2 | r7 = r5 << 2;
0x00013ae2 str r3, [sp, 0x24] | var_24h_2 = r3;
0x00013ae4 ldr.w r1, [r2, r5, lsl 2] | offset_0 = r5 << 2;
| r1 = *((r2 + offset_0));
0x00013ae8 ldrb r3, [r1] | r3 = *(r1);
0x00013aea cmp r3, 0x63 |
0x00013aec beq.w 0x139e6 |
| }
| label_8:
0x00013af0 ldrb r3, [r1] | r3 = *(r1);
0x00013af2 cmp r3, 0x63 |
| if (r3 != 0x63) {
0x00013af4 bne 0x13b04 | goto label_11;
| }
0x00013af6 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x00013af8 cmp r3, 0x35 |
| if (r3 != 0x35) {
0x00013afa bne 0x13b04 | goto label_11;
| }
0x00013afc ldrb r3, [r1, 2] | r3 = *((r1 + 2));
0x00013afe cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x00013b00 beq.w 0x139ee | goto label_0;
| }
| label_11:
0x00013b04 mov r2, r1 | r2 = r1;
0x00013b06 mov r0, sl | r0 = sl;
0x00013b08 movw r1, 0x2a2 | r1 = 0x2a2;
0x00013b0c bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00013b10 ldr r2, [sp, 0x1c] | r2 = base;
0x00013b12 b 0x13ad2 | goto label_1;
| label_10:
0x00013b14 movs r2, 4 | r2 = 4;
0x00013b16 b 0x13a3c | goto label_2;
| label_12:
0x00013b18 ldr.w r8, [sp, 0x10] | r8 = var_10h_3;
| label_4:
0x00013b1c cmp r2, 0 |
| if (r2 == 0) {
0x00013b1e beq.w 0x1396e | goto label_3;
| }
0x00013b22 ldr r0, [pc, 0x40] |
0x00013b24 movw r1, 0x2a6 | r1 = 0x2a6;
0x00013b28 add r0, pc | r0 = 0x27692;
0x00013b2a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00013b2e b 0x1396e | goto label_3;
| label_7:
0x00013b30 mov r8, r5 | r8 = r5;
0x00013b32 b 0x13b1c | goto label_4;
| label_6:
0x00013b34 blx 0x348c | fprintf_chk ()
0x00013b38 ldr r4, [sp, 0x138] | r4 = *(arg_138h);
0x00013b3a movs r0, r0 |
| if (r2 == 0) {
0x00013b3c cbz r2, 0x13b96 | void (*0x13b96)() ();
| }
0x00013b3e movs r1, r0 | r1 = r0;
0x00013b40 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00013b42 movs r0, r0 |
| if (r6 == 0) {
0x00013b44 cbz r6, 0x13b98 | void (*0x13b98)() ();
| }
0x00013b46 movs r1, r0 | r1 = r0;
0x00013b48 str r2, [sp, 0x300] | *(arg_2a8h) = r2;
0x00013b4a movs r0, r0 |
0x00013b4c ldr r3, [sp, 0x3b0] | r3 = *(arg_3b0h);
0x00013b4e movs r0, r0 |
0x00013b50 uxtb r6, r6 | r6 = (int8_t) r6;
0x00013b52 movs r1, r0 | r1 = r0;
0x00013b54 str.w pc, [fp, 0xfff] | __asm ("str.w pc, [arg_fffh]");
0x00013b58 str r1, [sp, 0x260] | *(arg_260h) = r1;
0x00013b5a movs r0, r0 |
0x00013b5c str r1, [sp, 0x258] | *(arg_258h_2) = r1;
0x00013b5e movs r0, r0 |
0x00013b60 lsls r4, r0, 0xc | r4 = r0 << 0xc;
0x00013b62 movs r0, r0 |
0x00013b64 str r0, [sp, 0x130] | *(arg_130h) = r0;
0x00013b66 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x13b68 */
| #include <stdint.h>
|
; (fcn) fcn.00013b68 () | void fcn_00013b68 (int16_t arg_138h, int16_t arg_280h, int16_t arg1) {
| int16_t var_8h_4;
| int16_t var_14h_4;
| int16_t var_0h;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_10h_3;
| int16_t var_14h;
| int16_t var_4h;
| r0 = arg1;
0x00013b68 ldr r3, [pc, 0x140] |
0x00013b6a movs r2, 3 | r2 = 3;
0x00013b6c push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00013b70 mov r5, r0 | r5 = r0;
0x00013b72 ldr r6, [pc, 0x13c] |
0x00013b74 sub sp, 0x1c |
0x00013b76 add r3, pc | r3 = 0x27826;
0x00013b78 movs r4, 0 | r4 = 0;
0x00013b7a add.w r0, r3, 0xd0 | r0 = r3 + 0xd0;
0x00013b7e ldr r3, [pc, 0x134] | r3 = *(0x13cb6);
0x00013b80 add r6, pc | r6 = 0x27836;
0x00013b82 movw r1, 0x2b6 | r1 = 0x2b6;
0x00013b86 ldr r3, [r6, r3] |
0x00013b88 ldr r3, [r3] | r3 = *(0x27836);
0x00013b8a str r3, [sp, 0x14] | var_14h_4 = r3;
0x00013b8c mov.w r3, 0 | r3 = 0;
0x00013b90 str r4, [sp, 8] | var_8h_4 = r4;
0x00013b92 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00013b96 invalid |
0x00013b98 adds r0, 0x84 | r0 += 0x84;
0x00013b9a cmp r3, 0 |
| if (r3 == 0) {
0x00013b9c beq 0x13c36 | goto label_4;
| }
0x00013b9e ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00013ba0 add r2, sp, 0x10 | r2 += var_10h_3;
0x00013ba2 ldr.w r0, [r5, 0x80] | r0 = *((r5 + 0x80));
0x00013ba6 add r1, sp, 0xc | r1 += var_ch_2;
0x00013ba8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00013baa mov r6, r0 | r6 = r0;
0x00013bac str r0, [sp, 8] | var_8h_2 = r0;
0x00013bae cmp r0, 0 |
| if (r0 != 0) {
0x00013bb0 bne 0x13c36 | goto label_4;
| }
0x00013bb2 ldr.w r8, [pc, 0x104] |
0x00013bb6 mov r4, r0 | r4 = r0;
0x00013bb8 ldr.w sb, [pc, 0x100] |
0x00013bbc ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00013bbe add r8, pc | r8 = 0x2787c;
0x00013bc0 add sb, pc | sb = 0x27880;
0x00013bc2 b 0x13bf6 |
| while (r3 == 0x63) {
0x00013bc4 ldrb r2, [r1, 1] | r2 = *((r1 + 1));
0x00013bc6 cmp r2, 0x2d |
| if (r2 != 0x2d) {
0x00013bc8 bne 0x13c08 | goto label_5;
| }
| label_0:
0x00013bca ldrd r0, r3, [r5, 0x80] | __asm ("ldrd r0, r3, [r5, 0x80]");
0x00013bce ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00013bd0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00013bd2 str r0, [sp, 8] | var_8h_2 = r0;
0x00013bd4 cmp r0, 0 |
| if (r0 != 0) {
0x00013bd6 bne 0x13c7a | goto label_6;
| }
0x00013bd8 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00013bda adds r6, 1 | r6++;
0x00013bdc ldr r1, [r2, r7] | r1 = *((r2 + r7));
| if (r1 != 0) {
0x00013bde cbz r1, 0x13bf4 |
| label_1:
0x00013be0 mov r2, r1 | r2 = r1;
0x00013be2 mov r0, r8 | r0 = r8;
0x00013be4 movw r1, 0x2c6 | r1 = 0x2c6;
0x00013be8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00013bec ldr r3, [sp, 8] | r3 = var_8h_2;
0x00013bee ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00013bf0 cmp r3, 0 |
| if (r3 != 0) {
0x00013bf2 bne 0x13c94 | goto label_7;
| }
| }
| label_2:
0x00013bf4 adds r4, 1 | r4++;
0x00013bf6 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x00013bf8 cmp r3, r4 |
| if (r3 <= r4) {
0x00013bfa ble 0x13c94 | goto label_7;
| }
0x00013bfc ldr.w r1, [r2, r4, lsl 2] | offset_0 = r4 << 2;
| r1 = *((r2 + offset_0));
0x00013c00 lsls r7, r4, 2 | r7 = r4 << 2;
0x00013c02 ldrb r3, [r1] | r3 = *(r1);
0x00013c04 cmp r3, 0x63 |
0x00013c06 beq 0x13bc4 |
| }
| label_5:
0x00013c08 ldrb r2, [r1] | r2 = *(r1);
0x00013c0a cmp r2, 0x63 |
| if (r2 != 0x63) {
0x00013c0c bne 0x13c1a | goto label_8;
| }
0x00013c0e ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x00013c10 cmp r0, 0x35 |
| if (r0 != 0x35) {
0x00013c12 bne 0x13c1a | goto label_8;
| }
0x00013c14 ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x00013c16 cmp r0, 0x2d |
| if (r0 == 0x2d) {
0x00013c18 beq 0x13bca | goto label_0;
| }
| label_8:
0x00013c1a cmp r3, 0x71 |
| if (r3 != 0x71) {
0x00013c1c bne 0x13c24 | goto label_9;
| }
0x00013c1e ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x00013c20 cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x00013c22 beq 0x13bca | goto label_0;
| }
| label_9:
0x00013c24 cmp r2, 0x71 |
| if (r2 != 0x71) {
0x00013c26 bne 0x13be0 | goto label_1;
| }
0x00013c28 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x00013c2a cmp r3, 0x35 |
| if (r3 != 0x35) {
0x00013c2c bne 0x13be0 | goto label_1;
| }
0x00013c2e ldrb r3, [r1, 2] | r3 = *((r1 + 2));
0x00013c30 cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x00013c32 beq 0x13bca | goto label_0;
| }
0x00013c34 b 0x13be0 | goto label_1;
| label_4:
0x00013c36 movs r6, 0 | r6 = 0;
| label_3:
0x00013c38 ldr r4, [r5] | r4 = *(r5);
0x00013c3a mov r3, r6 | r3 = r6;
0x00013c3c ldr r2, [pc, 0x80] |
0x00013c3e mov.w r1, -1 | r1 = -1;
0x00013c42 movs r0, 3 | r0 = 3;
0x00013c44 str r4, [sp] | *(sp) = r4;
0x00013c46 add r2, pc | r2 = 0x2790a;
0x00013c48 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013c4c ldr r0, [pc, 0x74] |
0x00013c4e movs r3, 3 | r3 = 3;
0x00013c50 add r2, sp, 8 | r2 += var_8h_2;
0x00013c52 movw r1, 0x2cd | r1 = 0x2cd;
0x00013c56 add r0, pc | r0 = 0x2791e;
0x00013c58 adds r0, 0xd0 | r0 += 0xd0;
0x00013c5a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00013c5e ldr r2, [pc, 0x68] |
0x00013c60 ldr r3, [pc, 0x50] | r3 = *(0x13cb4);
0x00013c62 ldr r0, [sp, 8] | r0 = var_8h_2;
0x00013c64 add r2, pc | r2 = 0x27932;
0x00013c66 ldr r3, [r2, r3] | r3 = *(0x27932);
0x00013c68 ldr r2, [r3] | r2 = *(0x27932);
0x00013c6a ldr r3, [sp, 0x14] | r3 = var_14h;
0x00013c6c eors r2, r3 | r2 ^= r3;
0x00013c6e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013c72 bne 0x13ca6 | goto label_10;
| }
0x00013c74 add sp, 0x1c |
0x00013c76 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_6:
0x00013c7a mov r3, r0 | r3 = r0;
0x00013c7c mov r2, sb | r2 = sb;
0x00013c7e movs r1, 0 | r1 = 0;
0x00013c80 movs r0, 5 | r0 = 5;
0x00013c82 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013c86 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00013c88 ldr r1, [r2, r7] | r1 = *((r2 + r7));
0x00013c8a cmp r1, 0 |
| if (r1 != 0) {
0x00013c8c bne 0x13be0 | goto label_1;
| }
0x00013c8e ldr r3, [sp, 8] | r3 = var_8h_2;
0x00013c90 cmp r3, 0 |
| if (r3 == 0) {
0x00013c92 beq 0x13bf4 | goto label_2;
| }
| label_7:
0x00013c94 cmp r2, 0 |
| if (r2 == 0) {
0x00013c96 beq 0x13c38 | goto label_3;
| }
0x00013c98 ldr r0, [pc, 0x30] |
0x00013c9a movw r1, 0x2ca | r1 = 0x2ca;
0x00013c9e add r0, pc | r0 = 0x2796e;
0x00013ca0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00013ca4 b 0x13c38 | goto label_3;
| label_10:
0x00013ca6 blx 0x348c | fprintf_chk ()
0x00013caa nop |
0x00013cac ldr r2, [sp, 8] | r2 = var_8h_2;
0x00013cae movs r0, r0 |
| if (r0 != 0) {
0x00013cb0 cbz r0, 0x13cb8 |
0x00013cb2 movs r1, r0 | r1 = r0;
0x00013cb4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00013cb6 movs r0, r0 |
| }
0x00013cb8 ldrh r6, [r6, 0x3c] | r6 = *((r6 + 0x3c));
0x00013cba movs r0, r0 |
0x00013cbc str r0, [sp, 0x280] | *(arg_280h) = r0;
0x00013cbe movs r0, r0 |
0x00013cc0 str r0, [sp, 0x138] | *(arg_138h) = r0;
0x00013cc2 movs r0, r0 |
0x00013cc4 ldr r1, [sp, 0x88] | r1 = var_4h;
0x00013cc6 movs r0, r0 |
0x00013cc8 add sp, 0xb0 |
0x00013cca movs r1, r0 | r1 = r0;
0x00013ccc ldrh r6, [r2, 0x36] | r6 = *((r2 + 0x36));
0x00013cce movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x13cd0 */
| #include <stdint.h>
|
; (fcn) fcn.00013cd0 () | void fcn_00013cd0 (int16_t arg_4h, int16_t arg_250h, int16_t arg_190h, int16_t arg_288h, int16_t arg_2d8h, int16_t arg_2f8h_2, int16_t arg_258h, int16_t arg_360h_2, int16_t arg1, int16_t arg2) {
| int16_t var_1h;
| int16_t var_ch_3;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch;
| int16_t var_20h_3;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch_3;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_40h;
| int16_t var_44h_2;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_88h;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_3;
| int16_t var_10h;
| int16_t var_14h_3;
| int16_t var_18h_3;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_2ch_2;
| int16_t var_30h_2;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
0x00013cd0 ldr.w r3, [pc, 0x6e8] |
0x00013cd4 movs r2, 3 | r2 = 3;
0x00013cd6 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00013cda mov r4, r0 | r4 = r0;
0x00013cdc ldr.w r7, [pc, 0x6e0] |
0x00013ce0 sub sp, 0x4c |
0x00013ce2 add r3, pc | r3 = 0x280a2;
0x00013ce4 mov r8, r1 | r8 = r1;
0x00013ce6 add.w r0, r3, 0xf8 | r0 = r3 + 0xf8;
0x00013cea ldr.w r3, [pc, 0x6d8] | r3 = *(0x143c6);
0x00013cee add r7, pc | r7 = 0x280b2;
0x00013cf0 ldr.w r5, [pc, 0x6d4] | r5 = "Thread_post_sem";
0x00013cf4 movw r1, 0x317 | r1 = 0x317;
0x00013cf8 movs r6, 0 | r6 = 0;
0x00013cfa ldr r3, [r7, r3] |
0x00013cfc add r5, pc | r5 += pc;
0x00013cfe ldr r3, [r3] | r3 = *(0x280b2);
0x00013d00 str r3, [sp, 0x44] | var_44h = r3;
0x00013d02 mov.w r3, 0 | r3 = 0;
0x00013d06 str r6, [sp, 0x2c] | var_2ch_2 = r6;
0x00013d08 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00013d0c ldr.w r3, [pc, 0x6bc] | r3 = *(0x143cc);
0x00013d10 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00013d12 ldr r0, [r3] | r0 = *(0x143cc);
0x00013d14 str r3, [sp, 0x10] | var_10h = r3;
0x00013d16 blx 0x3644 | r0 = fcn_00003644 ();
0x00013d1a cmp r0, 0 |
| if (r0 != 0) {
0x00013d1c bne.w 0x13fea | goto label_24;
| }
| label_4:
0x00013d20 ldr r3, [r4] | r3 = *(r4);
0x00013d22 cmp r3, 1 |
| if (r3 == 1) {
0x00013d24 bne 0x13d36 |
0x00013d26 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00013d28 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00013d2a ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00013d2c and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x00013d30 cmp r3, 0 |
| if (r3 != 0) {
0x00013d32 bne.w 0x13f2e | goto label_25;
| }
| }
0x00013d36 add r6, sp, 0x20 | r6 += var_20h_2;
0x00013d38 mov r0, r6 | r0 = r6;
0x00013d3a bl 0x3874 | fcn_00003874 (r0);
0x00013d3e ldr r2, [r4] | r2 = *(r4);
0x00013d40 add.w r3, r4, 0x1c | r3 = r4 + 0x1c;
0x00013d44 ldm.w r6, {r0, r1} | r0 = *(r6);
| r1 = *((r6 + 4));
0x00013d48 cmp r2, 1 |
0x00013d4a stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
| if (r2 == 1) {
0x00013d4e beq.w 0x13f2e | goto label_25;
| }
0x00013d52 cmp r2, 0xe |
| if (r2 == 0xe) {
0x00013d54 bne 0x13d5e |
0x00013d56 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00013d58 cmp r3, 0 |
| if (r3 != 0) {
0x00013d5a bne.w 0x13f2e | goto label_25;
| }
| }
0x00013d5e ldr.w r3, [pc, 0x670] |
0x00013d62 mov r2, r8 | r2 = r8;
0x00013d64 mov r1, r4 | r1 = r4;
0x00013d66 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00013d68 ldr r0, [r3] | r0 = *(0x143d2);
0x00013d6a str r3, [sp, 0x14] | var_14h_3 = r3;
0x00013d6c bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00013d70 ldr r7, [r4, 0x50] | r7 = *((r4 + 0x50));
0x00013d72 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00013d74 ldr.w r3, [r3, 0x84] | r3 = *(0x14456);
0x00013d78 cmp r3, 0 |
| if (r3 == 0) {
0x00013d7a beq.w 0x1409c | goto label_26;
| }
0x00013d7e ldr r3, [r4] | r3 = *(r4);
0x00013d80 cmp r3, 3 |
| if (r3 == 3) {
0x00013d82 bne 0x13d98 |
0x00013d84 ldr.w r3, [r7, 0xf0] | r3 = *((r7 + 0xf0));
| if (r3 == 0) {
0x00013d88 cbz r3, 0x13d98 | goto label_11;
| }
0x00013d8a ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00013d8c cmp r2, 1 |
| if (r2 <= 1) {
0x00013d8e ble 0x13d98 | goto label_11;
| }
0x00013d90 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x00013d92 cmp r2, 0 |
| if (r2 == 0) {
0x00013d94 beq.w 0x1433e | goto label_27;
| }
| }
| label_11:
0x00013d98 ldr.w r0, [pc, 0x638] |
0x00013d9c mov.w fp, 0 |
0x00013da0 movs r2, 3 | r2 = 3;
0x00013da2 mov.w r1, 0x102 | r1 = 0x102;
0x00013da6 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h_2]");
0x00013daa add r0, pc |
0x00013dac add.w r0, r0, 0x110 | r0 = 0x28292;
0x00013db0 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00013db4 ldr r3, [r4] | r3 = *(r4);
0x00013db6 cmp r3, 8 |
| if (r3 == 8) {
0x00013db8 beq.w 0x14144 | goto label_28;
| }
0x00013dbc cmp r3, 0xa |
| if (r3 == 0xa) {
0x00013dbe beq.w 0x140a8 | goto label_29;
| }
0x00013dc2 cmp r3, 3 |
| if (r3 == 3) {
0x00013dc4 beq.w 0x14222 | goto label_30;
| }
0x00013dc8 ldr.w r3, [r7, 0xe8] | r3 = *((r7 + 0xe8));
0x00013dcc movw r2, 0x4240 |
0x00013dd0 movt r2, 0xf | r2 = 0xf4240;
0x00013dd4 adds r3, 1 | r3++;
0x00013dd6 cmp r3, r2 |
| if (r3 == r2) {
0x00013dd8 beq.w 0x14012 | goto label_31;
| }
0x00013ddc mov r8, fp | r8 = fp;
0x00013dde mov r6, fp | r6 = fp;
0x00013de0 str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h_3]");
0x00013de4 str.w r3, [r7, 0xe8] | __asm ("str.w r3, [r7, 0xe8]");
| label_5:
0x00013de8 str r3, [sp, 8] | var_8h_3 = r3;
0x00013dea add.w sl, sp, 0x38 | sl += var_38h_2;
0x00013dee ldr.w r3, [pc, 0x5e8] |
0x00013df2 mov.w sb, 0 | sb = 0;
0x00013df6 movs r2, 1 | r2 = 1;
0x00013df8 mov r0, sl | r0 = sl;
0x00013dfa add r3, pc | r3 = 0x281d8;
0x00013dfc str r3, [sp, 4] | var_44h = r3;
0x00013dfe ldr.w r3, [pc, 0x5dc] |
0x00013e02 add r3, pc | r3 = 0x281e4;
0x00013e04 str r3, [sp] | *(sp) = r3;
0x00013e06 movs r3, 0xb | r3 = 0xb;
0x00013e08 mov r1, r3 | r1 = r3;
0x00013e0a blx 0x3378 | r0 = shutdown ();
| label_9:
0x00013e0e cmp r0, 0xa |
| if (r0 > 0xa) {
0x00013e10 bgt.w 0x1436e | goto label_32;
| }
0x00013e14 ldr r1, [sp, 0x18] | r1 = var_18h_3;
0x00013e16 cmp r1, 0 |
| if (r1 > 0) {
0x00013e18 ble 0x13e54 |
0x00013e1a ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00013e1c ldr.w fp, [r3, 0x88] | fp = *((r3 + 0x88));
0x00013e20 cmp.w fp, 0 |
| if (fp != 0) {
0x00013e24 beq 0x13e34 |
0x00013e26 ldr.w r0, [r3, 0x90] | r0 = *((r3 + 0x90));
0x00013e2a mov r2, r8 | r2 = r8;
0x00013e2c mov r3, r6 | r3 = r6;
0x00013e2e blx fp | fp (r0, r2, r3);
0x00013e30 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00013e32 str r0, [sp, 0x30] | var_30h_2 = r0;
| }
0x00013e34 ldrd r0, r3, [r3, 0x80] | __asm ("ldrd r0, r3, [r3, 0x80]");
0x00013e38 mov r1, sl | r1 = sl;
0x00013e3a str r6, [sp] | *(sp) = r6;
0x00013e3c ldr r2, [sp, 0x18] | r2 = var_18h_3;
0x00013e3e ldr.w sl, [r3, 0xc] | sl = *((r3 + 0xc));
0x00013e42 mov r3, r8 | r3 = r8;
0x00013e44 blx sl | sl (r0, r1, r2, r3);
0x00013e46 str r0, [sp, 0x30] | var_30h_2 = r0;
0x00013e48 cmp r0, 0 |
| if (r0 != 0) {
0x00013e4a bne.w 0x14388 | goto label_33;
| }
| label_16:
0x00013e4e ldr.w r3, [r7, 0xe8] | r3 = *((r7 + 0xe8));
0x00013e52 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
| }
| label_14:
0x00013e54 cmp.w sb, 0 |
| if (sb != 0) {
0x00013e58 beq 0x13e6c |
0x00013e5a ldr.w r0, [pc, 0x584] |
0x00013e5e mov.w r1, 0x19c | r1 = 0x19c;
0x00013e62 ldr.w r2, [r8, sb, lsl 2] | offset_0 = sb << 2;
| r2 = *((r8 + offset_0));
0x00013e66 add r0, pc | r0 = 0x2824c;
0x00013e68 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
| if (r6 != 0) {
| label_17:
0x00013e6c cbz r6, 0x13e7e |
0x00013e6e ldr.w r0, [pc, 0x574] |
0x00013e72 mov r2, r6 | r2 = r6;
0x00013e74 mov.w r1, 0x19e | r1 = 0x19e;
0x00013e78 add r0, pc | r0 = 0x28262;
0x00013e7a bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x00013e7e cmp.w r8, 0 |
| if (r8 != 0) {
0x00013e82 beq 0x13e94 |
0x00013e84 ldr.w r0, [pc, 0x560] |
0x00013e88 mov r2, r8 | r2 = r8;
0x00013e8a mov.w r1, 0x1a0 | r1 = 0x1a0;
0x00013e8e add r0, pc | r0 = 0x2827a;
0x00013e90 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
| label_10:
0x00013e94 ldr.w r0, [pc, 0x554] |
0x00013e98 movs r3, 3 | r3 = 3;
0x00013e9a add r2, sp, 0x30 | r2 += var_30h_2;
0x00013e9c movw r1, 0x1a1 | r1 = 0x1a1;
0x00013ea0 add r0, pc |
0x00013ea2 add.w r0, r0, 0x110 | r0 = 0x283a0;
0x00013ea6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00013eaa ldr r2, [sp, 0x30] | r2 = var_30h_2;
0x00013eac ldr r3, [r4] | r3 = *(r4);
0x00013eae cmp r2, 0 |
0x00013eb0 it eq |
| if (r2 == 0) {
0x00013eb2 cmpeq r3, 3 | __asm ("cmpeq r3, 3");
| }
| if (r2 == 0) {
0x00013eb4 beq.w 0x14022 | goto label_34;
| }
| label_6:
0x00013eb8 cmp r3, 3 |
| if (r3 != 3) {
0x00013eba bne 0x13f9c | goto label_7;
| }
0x00013ebc ldr r7, [r4, 0x50] | r7 = *((r4 + 0x50));
0x00013ebe ldr.w r3, [r7, 0xf0] | r3 = *((r7 + 0xf0));
0x00013ec2 ldr.w r2, [r7, 0xf8] | r2 = *((r7 + 0xf8));
0x00013ec6 cmp r3, 0 |
| if (r3 == 0) {
0x00013ec8 beq.w 0x140a0 | goto label_35;
| }
| label_12:
0x00013ecc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00013ece cmp r3, r2 |
| if (r3 > r2) {
0x00013ed0 bgt.w 0x140a0 | goto label_35;
| }
0x00013ed4 add r7, sp, 0x34 | r7 += var_34h_2;
0x00013ed6 movs r3, 0 | r3 = 0;
0x00013ed8 str r3, [sp, 0x34] | var_34h_2 = r3;
| do {
| label_0:
0x00013eda ldr r3, [sp, 0x14] | r3 = var_14h_3;
0x00013edc mov r1, r7 | r1 = r7;
0x00013ede ldr r0, [r3] | r0 = *(r3);
0x00013ee0 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00013ee4 cmp r0, 0 |
| if (r0 == 0) {
0x00013ee6 beq 0x13f9c | goto label_7;
| }
0x00013ee8 ldr r3, [sp, 0x34] | r3 = var_34h_2;
0x00013eea ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x00013eec ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00013eee ldr r2, [r6, 0x50] | r2 = *((r6 + 0x50));
0x00013ef0 cmp r2, r3 |
0x00013ef2 bne 0x13eda |
| } while (r2 != r3);
0x00013ef4 ldr r3, [r6] | r3 = *(r6);
0x00013ef6 cmp r3, 3 |
| if (r3 != 3) {
0x00013ef8 bne 0x13eda | goto label_0;
| }
0x00013efa ldr r3, [sp, 0x14] | r3 = var_14h_3;
0x00013efc mov r1, r6 | r1 = r6;
0x00013efe ldr r0, [r3] | r0 = *(r3);
0x00013f00 bl 0xd778 | fcn_0000d778 (r0, r1);
0x00013f04 mov r0, r6 | r0 = r6;
0x00013f06 bl 0x12dec | fcn_00012dec (r0);
0x00013f0a ldr.w r0, [pc, 0x4e4] |
0x00013f0e mov r2, r6 | r2 = r6;
0x00013f10 movw r1, 0x422 | r1 = 0x422;
0x00013f14 add r0, pc | r0 = 0x2830a;
0x00013f16 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00013f1a ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00013f1c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00013f1e ldr.w r3, [r3, 0x84] | r3 = *((r3 + 0x84));
0x00013f22 cmp r3, 0 |
| if (r3 == 0) {
0x00013f24 beq 0x13f9c | goto label_7;
| }
0x00013f26 mov r0, r6 | r0 = r6;
0x00013f28 bl 0x13448 | fcn_00013448 (r0);
0x00013f2c b 0x13f9c | goto label_7;
| label_25:
0x00013f2e ldr.w r3, [pc, 0x4a0] | r3 = *(0x143d2);
0x00013f32 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00013f34 ldr r0, [r3] | r0 = *(0x143d2);
0x00013f36 ldr r3, [r0] | r3 = *(0x143d2);
0x00013f38 mov r6, r3 | r6 = r3;
| if (r3 != 0) {
0x00013f3a cbnz r3, 0x13f72 | goto label_36;
| }
| do {
| label_2:
0x00013f3c mov r2, r8 | r2 = r8;
0x00013f3e mov r1, r4 | r1 = r4;
0x00013f40 bl 0xd638 | fcn_0000d638 (r0, r1, r2, r3);
0x00013f44 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00013f46 ldr r0, [r3] | r0 = *(r3);
0x00013f48 blx 0x35b4 | r0 = fcn_000035b4 ();
| if (r0 == 0) {
0x00013f4c cbz r0, 0x13fa8 | goto label_37;
| }
| label_3:
0x00013f4e blx 0x2f10 | strerror (r0);
0x00013f52 ldr.w r2, [pc, 0x4a0] |
0x00013f56 mov r3, r0 | r3 = r0;
0x00013f58 movs r1, 0 | r1 = 0;
0x00013f5a movs r0, 5 | r0 = 5;
0x00013f5c add r2, pc | r2 = 0x28356;
0x00013f5e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013f62 b 0x13fa8 | goto label_37;
| label_1:
0x00013f64 ldr r1, [r1, 0x50] | r1 = *((r1 + 0x50));
0x00013f66 ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x00013f68 cmp r1, r2 |
| if (r1 == r2) {
0x00013f6a beq 0x13f80 | goto label_38;
| }
0x00013f6c ldr r6, [r6] | r6 = *(r6);
0x00013f6e cmp r6, 0 |
0x00013f70 beq 0x13f3c |
| } while (r6 == 0);
| label_36:
0x00013f72 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00013f74 ldr r2, [r1] | r2 = *(r1);
0x00013f76 cmp r2, 1 |
0x00013f78 it ne |
| if (r2 == 1) {
0x00013f7a cmpne r2, 0xe | __asm ("cmpne r2, 0xe");
| goto label_39;
| }
| if (r2 == 1) {
| label_39:
0x00013f7c beq 0x13f64 | goto label_1;
| }
0x00013f7e b 0x13f3c | goto label_2;
| label_38:
0x00013f80 mov r0, r4 | r0 = r4;
0x00013f82 bl 0x12dec | fcn_00012dec (r0);
0x00013f86 ldr.w r0, [pc, 0x470] |
0x00013f8a mov r2, r4 | r2 = r4;
0x00013f8c movw r1, 0x422 | r1 = 0x422;
0x00013f90 add r0, pc | r0 = 0x2838e;
0x00013f92 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00013f96 mvn r3, 0x11 | r3 = ~0x11;
0x00013f9a str r3, [sp, 0x2c] | var_2ch_2 = r3;
| label_7:
0x00013f9c ldr r3, [sp, 0x10] | r3 = var_10h;
0x00013f9e ldr r0, [r3] | r0 = *(r3);
0x00013fa0 blx 0x35b4 | r0 = fcn_000035b4 ();
0x00013fa2 add.w r8, r8, r0, lsl 8 | r8 += (r0 << 8);
| if (r2 != 1) {
0x00013fa6 bne 0x13f4e | goto label_3;
| }
| label_37:
0x00013fa8 ldr.w r3, [pc, 0x450] | r3 = *(0x143fc);
0x00013fac ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00013fae ldr r0, [r3] | r0 = *(0x143fc);
0x00013fb0 bl 0xb5d4 | r0 = fcn_0000b5d4 (r0);
0x00013fb4 cbnz r0, 0x14000 |
| while (1) {
0x00013fb6 ldr.w r0, [pc, 0x448] |
0x00013fba movs r3, 3 | r3 = 3;
0x00013fbc add r2, sp, 0x2c | r2 += var_2ch_2;
0x00013fbe mov.w r1, 0x390 | r1 = 0x390;
0x00013fc2 add r0, pc | r0 = 0x283c8;
0x00013fc4 adds r0, 0xf8 | r0 += 0xf8;
0x00013fc6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00013fca ldr.w r2, [pc, 0x438] |
0x00013fce ldr r3, [pc, 0x3f4] | r3 = *(0x143c6);
0x00013fd0 ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
0x00013fd2 add r2, pc | r2 = 0x283dc;
0x00013fd4 ldr r3, [r2, r3] | r3 = *(0x283dc);
0x00013fd6 ldr r2, [r3] | r2 = *(0x283dc);
0x00013fd8 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00013fda eors r2, r3 | r2 ^= r3;
0x00013fdc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013fe0 bne.w 0x143b6 | goto label_40;
| }
0x00013fe4 add sp, 0x4c |
0x00013fe6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x00013fea blx 0x2f10 | strerror (r0);
0x00013fee ldr.w r2, [pc, 0x418] |
0x00013ff2 mov r3, r0 | r3 = r0;
0x00013ff4 mov r1, r6 | r1 = r6;
0x00013ff6 movs r0, 5 | r0 = 5;
0x00013ff8 add r2, pc | r2 = 0x28406;
0x00013ffa bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00013ffe b 0x13d20 | goto label_4;
0x00014000 ldr.w r2, [pc, 0x408] |
0x00014004 mov r3, r0 | r3 = r0;
0x00014006 movs r1, 0 | r1 = 0;
0x00014008 movs r0, 5 | r0 = 5;
0x0001400a add r2, pc | r2 = 0x2841a;
0x0001400c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014010 b 0x13fb6 |
| }
| label_31:
0x00014012 mov r3, fp | r3 = fp;
0x00014014 mov r6, fp | r6 = fp;
0x00014016 mov r8, fp | r8 = fp;
0x00014018 str.w fp, [r7, 0xe8] | __asm ("str.w fp, [r7, 0xe8]");
0x0001401c str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h_3]");
0x00014020 b 0x13de8 | goto label_5;
| label_34:
0x00014022 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00014024 movs r2, 1 | r2 = 1;
0x00014026 ldr r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x00014028 str r2, [r4, 0x58] | *((r4 + 0x58)) = r2;
0x0001402a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001402c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00014030 str r1, [sp, 8] | var_8h_3 = r1;
0x00014032 cmp r3, 4 |
| if (r3 > 4) {
0x00014034 bgt.w 0x1434c | goto label_41;
| }
0x00014038 ldr r3, [pc, 0x3d4] |
0x0001403a add r3, pc | r3 = 0x2844e;
0x0001403c str r3, [sp, 4] | var_44h = r3;
0x0001403e ldr r3, [pc, 0x3d4] |
0x00014040 add r3, pc | r3 = 0x2845a;
| label_13:
0x00014042 str r3, [sp] | *(sp) = r3;
0x00014044 add.w sl, sp, 0x38 | sl += var_38h_2;
0x00014048 movs r3, 0xb | r3 = 0xb;
0x0001404a mov r0, sl | r0 = sl;
0x0001404c mov r1, r3 | r1 = r3;
0x0001404e blx 0x3378 | r0 = shutdown ();
0x00014052 cmp r0, 0xa |
| if (r0 > 0xa) {
0x00014054 bgt.w 0x14398 | goto label_42;
| }
0x00014058 ldr r6, [pc, 0x3bc] |
0x0001405a mov r0, sl | r0 = sl;
0x0001405c blx 0x3258 | unlink (r0);
0x00014060 movw r1, 0x359 | r1 = 0x359;
0x00014064 adds r2, r0, 1 | r2 = r0 + 1;
0x00014066 add r6, pc | r6 = 0x28482;
0x00014068 movs r7, 0 | r7 = 0;
0x0001406a mov r0, r6 | r0 = r6;
0x0001406c bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00014070 mov r1, sl | r1 = sl;
0x00014072 str r0, [r4, 0x5c] | *((r4 + 0x5c)) = r0;
0x00014074 blx 0x3300 | pthread_cond_destroy ();
0x00014078 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x0001407a mov.w r1, 0x35c | r1 = 0x35c;
0x0001407e mov r0, r6 | r0 = r6;
0x00014080 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00014084 mov r0, r6 | r0 = r6;
0x00014086 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00014088 movw r1, 0x35e | r1 = 0x35e;
0x0001408c str r7, [r4, 0x3c] | *((r4 + 0x3c)) = r7;
0x0001408e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00014092 add.w r0, r4, 0x24 | r0 = r4 + 0x24;
0x00014096 str r7, [r4, 0x34] | *((r4 + 0x34)) = r7;
0x00014098 blx 0x3620 | fcn_00003620 ();
| label_26:
0x0001409c ldr r3, [r4] | r3 = *(r4);
0x0001409e b 0x13eb8 | goto label_6;
| label_35:
0x000140a0 adds r2, 1 | r2++;
0x000140a2 str.w r2, [r7, 0xf8] | __asm ("str.w r2, [r7, 0xf8]");
0x000140a6 b 0x13f9c | goto label_7;
| label_29:
0x000140a8 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000140aa mov.w r1, 0x136 | r1 = 0x136;
0x000140ae ldr.w r8, [pc, 0x36c] |
0x000140b2 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x000140b6 add r8, pc | r8 = 0x284d8;
0x000140b8 mov r0, r8 | r0 = r8;
0x000140ba cmp r3, 4 |
0x000140bc ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000140be ite gt |
| if (r3 <= 4) {
0x000140c0 movgt r2, 4 | r2 = 4;
| }
| if (r3 > 4) {
0x000140c2 movle r2, 3 | r2 = 3;
| }
0x000140c4 adds r3, r2, r3 | r3 = r2 + r3;
0x000140c6 lsl.w sl, r3, 2 | sl = r3 << 2;
0x000140ca str r3, [sp, 0x18] | var_18h_3 = r3;
0x000140cc mov r2, sl | r2 = sl;
0x000140ce bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000140d2 mov r6, r0 | r6 = r0;
0x000140d4 cmp r0, 0 |
| if (r0 == 0) {
0x000140d6 beq.w 0x14336 | goto label_43;
| }
0x000140da mov r0, r8 | r0 = r8;
0x000140dc mov r2, sl | r2 = sl;
0x000140de movw r1, 0x137 | r1 = 0x137;
0x000140e2 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000140e6 mov r8, r0 | r8 = r0;
0x000140e8 cmp r0, 0 |
| if (r0 == 0) {
0x000140ea beq.w 0x14358 | goto label_44;
| }
0x000140ec strh r5, [r6, 8] | *((r6 + 8)) = r5;
0x000140ee movs r3, 4 | r3 = 4;
0x000140f0 add.w r2, r4, 0x14 | r2 = r4 + 0x14;
0x000140f4 str r4, [r0] | *(r0) = r4;
0x000140f6 str r3, [r6] | *(r6) = r3;
0x000140f8 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000140fa add.w r2, r4, 0x34 | r2 = r4 + 0x34;
0x000140fe str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00014100 str r2, [r0, 8] | *((r0 + 8)) = r2;
0x00014102 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00014104 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00014106 cmp r3, 0 |
| if (r3 <= 0) {
0x00014108 ble.w 0x143b0 | goto label_45;
| }
0x0001410c add.w r3, r0, 8 | r3 = r0 + 8;
0x00014110 mov sl, fp | sl = fp;
0x00014112 mov sb, r3 | sb = r3;
0x00014114 add.w fp, r6, 8 |
| do {
0x00014118 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0001411a ldr.w r3, [r3, sl, lsl 2] | offset_1 = sl << 2;
| r3 = *((r3 + offset_1));
0x0001411e str r3, [sb, 4]! | *((sb += 4)) = r3;
0x00014122 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00014124 ldr.w r0, [r3, sl, lsl 2] | offset_2 = sl << 2;
| r0 = *((r3 + offset_2));
0x00014128 blx 0x3258 | unlink (r0);
0x0001412c adds r0, 1 | r0++;
0x0001412e add.w r2, sl, 4 | r2 = sl + 4;
0x00014132 str r0, [fp, 4]! | *(arg_4h) = r0;
0x00014136 add.w sl, sl, 1 | sl++;
0x0001413a ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0001413c cmp sl, r3 |
0x0001413e blt 0x14118 |
| } while (sl < r3);
0x00014140 mov sb, r2 | sb = r2;
0x00014142 b 0x142b8 | goto label_15;
| label_28:
0x00014144 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00014146 movw r1, 0x109 | r1 = 0x109;
0x0001414a ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0001414c ldr.w r8, [pc, 0x2d0] |
0x00014150 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00014154 add r8, pc | r8 = 0x28578;
0x00014156 cmp r3, 4 |
0x00014158 mov r0, r8 | r0 = r8;
0x0001415a ite gt |
| if (r3 <= 4) {
0x0001415c movgt r3, 4 | r3 = 4;
| }
| if (r3 > 4) {
0x0001415e movle r3, 3 | r3 = 3;
| }
0x00014160 add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x00014164 lsl.w sl, r3, 2 | sl = r3 << 2;
0x00014168 str r3, [sp, 0x18] | var_18h_3 = r3;
0x0001416a mov r2, sl | r2 = sl;
0x0001416c bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00014170 mov r6, r0 | r6 = r0;
0x00014172 cmp r0, 0 |
| if (r0 == 0) {
0x00014174 beq.w 0x14336 | goto label_43;
| }
0x00014178 mov r0, r8 | r0 = r8;
0x0001417a mov r2, sl | r2 = sl;
0x0001417c mov.w r1, 0x10a | r1 = 0x10a;
0x00014180 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00014184 mov r8, r0 | r8 = r0;
0x00014186 cmp r0, 0 |
| if (r0 == 0) {
0x00014188 beq.w 0x14358 | goto label_44;
| }
0x0001418c movs r3, 4 | r3 = 4;
0x0001418e add.w r2, r4, 0x14 | r2 = r4 + 0x14;
0x00014192 str r4, [r0] | *(r0) = r4;
0x00014194 str r3, [r6] | *(r6) = r3;
0x00014196 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x00014198 add.w r2, r4, 0x34 | r2 = r4 + 0x34;
0x0001419c str r3, [r6, 4] | *((r6 + 4)) = r3;
0x0001419e str r2, [r0, 8] | *((r0 + 8)) = r2;
0x000141a0 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x000141a2 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000141a4 cmp r3, 0 |
| if (r3 <= 0) {
0x000141a6 ble.w 0x143b0 | goto label_45;
| }
0x000141aa add.w r3, r4, 0x40 | r3 = r4 + 0x40;
0x000141ae mov.w sl, 0x10 | sl = 0x10;
0x000141b2 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x000141b4 mov r3, r5 | r3 = r5;
0x000141b6 mov.w sb, 3 | sb = 3;
0x000141ba mov r5, r7 | r5 = r7;
0x000141bc mov r7, r6 | r7 = r6;
0x000141be mov r6, r3 | r6 = r3;
0x000141c0 b 0x141e0 |
| while (r2 <= 4) {
0x000141c2 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x000141c4 add r2, r1 | r2 += r1;
0x000141c6 movs r1, 4 | r1 = 4;
| label_8:
0x000141c8 str.w r2, [r8, sl] | __asm ("str.w r2, [r8, sl]");
0x000141cc add.w fp, fp, 1 |
0x000141d0 str.w r1, [r7, sl] | __asm ("str.w r1, [r7, sl]");
0x000141d4 add.w sl, sl, 8 | sl += 8;
0x000141d8 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x000141da cmp fp, r2 |
| if (fp >= r2) {
0x000141dc bge.w 0x1437e | goto label_46;
| }
0x000141e0 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x000141e2 ldr.w r2, [r2, fp, lsl 2] | offset_3 = fp << 2;
| r2 = *((r2 + offset_3));
0x000141e6 str.w r2, [r8, sb, lsl 2] | __asm ("str.w r2, [r8, sb, lsl 2]");
0x000141ea ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x000141ec ldr.w r0, [r2, fp, lsl 2] | offset_4 = fp << 2;
| r0 = *((r2 + offset_4));
0x000141f0 blx 0x3258 | unlink (r0);
0x000141f4 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000141f6 adds r0, 1 | r0++;
0x000141f8 str.w r0, [r7, sb, lsl 2] | __asm ("str.w r0, [r7, sb, lsl 2]");
0x000141fc lsl.w r1, fp, 2 | r1 = fp << 2;
0x00014200 add.w sb, sb, 2 | sb += 2;
0x00014204 ldr.w r2, [r2, 0x9c] | r2 = *((r2 + 0x9c));
0x00014208 cmp r2, 4 |
0x0001420a ble 0x141c2 |
| }
0x0001420c ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0001420e cmp r2, 1 |
0x00014210 ittet ne |
| if (r2 == 1) {
0x00014212 ldrne r2, [r4, 0x4c] | r2 = *((r4 + 0x4c));
| }
| if (r2 == 1) {
0x00014214 addne r1, fp, fp, lsl 1 | r1 = fp + (fp << 1);
| }
| if (r2 == 1) {
0x00014218 ldrne r2, [sp, 0x1c] | r2 = var_1ch_2;
| }
| if (r2 != 1) {
0x0001421a add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
| }
0x0001421e movs r1, 0xc | r1 = 0xc;
0x00014220 b 0x141c8 | goto label_8;
| label_30:
0x00014222 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00014224 mov.w r1, 0x150 | r1 = 0x150;
0x00014228 ldr.w r8, [pc, 0x1f8] |
0x0001422c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00014230 add r8, pc | r8 = 0x28658;
0x00014232 mov r0, r8 | r0 = r8;
0x00014234 cmp r3, 4 |
0x00014236 itete gt |
| if (r3 <= 4) {
0x00014238 movgt sb, 0x20 | sb = 0x20;
| }
| if (r3 <= 4) {
0x0001423c movgt sb, 0x1c | sb = 0x1c;
| }
| if (r3 > 4) {
0x00014240 movs r3, 8 | r3 = 8;
| }
| if (r3 <= 4) {
0x00014242 movs r3, 7 | r3 = 7;
| }
0x00014244 mov r2, sb | r2 = sb;
0x00014246 str r3, [sp, 0x18] | var_18h_3 = r3;
0x00014248 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0001424c mov r6, r0 | r6 = r0;
0x0001424e cmp r0, 0 |
| if (r0 == 0) {
0x00014250 beq 0x14336 | goto label_43;
| }
0x00014252 mov r0, r8 | r0 = r8;
0x00014254 mov r2, sb | r2 = sb;
0x00014256 movw r1, 0x151 | r1 = 0x151;
0x0001425a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0001425e mov r8, r0 | r8 = r0;
0x00014260 cmp r0, 0 |
| if (r0 == 0) {
0x00014262 beq 0x14358 | goto label_44;
| }
0x00014264 mov.w sb, 4 | sb = 4;
0x00014268 add.w r3, r4, 0x14 | r3 = r4 + 0x14;
0x0001426c str r4, [r0] | *(r0) = r4;
0x0001426e str.w sb, [r6] | __asm ("str.w sb, [r6]");
0x00014272 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x00014274 str.w sb, [r6, 4] | __asm ("str.w sb, [r6, 4]");
0x00014278 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0001427a str.w r0, [r8, 8] | __asm ("str.w r0, [r8, 8]");
0x0001427e blx 0x3258 | unlink (r0);
0x00014282 add.w r3, r4, 0x38 | r3 = r4 + 0x38;
0x00014286 adds r0, 1 | r0++;
0x00014288 str r0, [r6, 8] | *((r6 + 8)) = r0;
0x0001428a str.w r3, [r8, 0xc] | __asm ("str.w r3, [r8, 0xc]");
0x0001428e str.w sb, [r6, 0xc] | __asm ("str.w sb, [r6, 0xc]");
0x00014292 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00014294 str.w r3, [r8, 0x10] | __asm ("str.w r3, [r8, 0x10]");
0x00014298 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0001429a str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x0001429c add.w r3, r4, 0x40 | r3 = r4 + 0x40;
0x000142a0 str.w r3, [r8, 0x14] | __asm ("str.w r3, [r8, 0x14]");
0x000142a4 add.w r3, r4, 0x44 | r3 = r4 + 0x44;
0x000142a8 str.w sb, [r6, 0x14] | __asm ("str.w sb, [r6, 0x14]");
0x000142ac str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
0x000142b0 str.w sb, [r6, 0x18] | __asm ("str.w sb, [r6, 0x18]");
0x000142b4 mov.w sb, 7 | sb = 7;
| label_15:
0x000142b8 ldr.w r3, [r7, 0xe8] | r3 = *((r7 + 0xe8));
0x000142bc movw r2, 0x4240 |
0x000142c0 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x000142c2 movt r2, 0xf | r2 = 0xf4240;
0x000142c6 adds r3, 1 | r3++;
0x000142c8 cmp r3, r2 |
0x000142ca it eq |
| if (r3 != r2) {
0x000142cc moveq r3, 0 | r3 = 0;
| }
0x000142ce str.w r3, [r7, 0xe8] | __asm ("str.w r3, [r7, 0xe8]");
0x000142d2 ldr.w r2, [r1, 0x9c] | r2 = *((r1 + 0x9c));
0x000142d6 cmp r2, 4 |
| if (r2 <= 4) {
0x000142d8 ble.w 0x13de8 | goto label_5;
| }
0x000142dc add.w sl, r4, 0x24 | sl = r4 + 0x24;
0x000142e0 movs r3, 0 | r3 = 0;
0x000142e2 mov r0, sl | r0 = sl;
0x000142e4 str r3, [sp, 0x34] | var_34h_2 = r3;
0x000142e6 bl 0xda6c | r0 = fcn_0000da6c (r0);
0x000142ea mov fp, r0 |
0x000142ec ldr r0, [pc, 0x138] |
0x000142ee mov r2, fp | r2 = fp;
0x000142f0 movw r1, 0x17f | r1 = 0x17f;
0x000142f4 add r0, pc | r0 = 0x28720;
0x000142f6 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000142fa str.w r0, [r8, sb, lsl 2] | __asm ("str.w r0, [r8, sb, lsl 2]");
0x000142fe str r0, [sp, 0x34] | var_34h_2 = r0;
0x00014300 cmp r0, 0 |
| if (r0 == 0) {
0x00014302 beq 0x143a8 | goto label_47;
| }
0x00014304 mov r1, sl | r1 = sl;
0x00014306 add r0, sp, 0x34 | r0 += var_34h_2;
0x00014308 bl 0xdc44 | fcn_0000dc44 (r0, r1);
0x0001430c ldr r3, [pc, 0x11c] |
0x0001430e add.w sl, sp, 0x38 | sl += var_38h_2;
0x00014312 str r0, [sp, 0x30] | var_30h_2 = r0;
0x00014314 mov r0, sl | r0 = sl;
0x00014316 str.w fp, [r6, sb, lsl 2] | __asm ("str.w fp, [r6, sb, lsl 2]");
0x0001431a ldr.w r2, [r7, 0xe8] | r2 = *((r7 + 0xe8));
0x0001431e add r3, pc | r3 = 0x2874e;
0x00014320 strd r3, r2, [sp, 4] | __asm ("strd r3, r2, [var_44h]");
0x00014324 movs r2, 1 | r2 = 1;
0x00014326 ldr r3, [pc, 0x108] |
0x00014328 add r3, pc | r3 = 0x2875e;
0x0001432a str r3, [sp] | *(sp) = r3;
0x0001432c movs r3, 0xb | r3 = 0xb;
0x0001432e mov r1, r3 | r1 = r3;
0x00014330 blx 0x3378 | shutdown ();
0x00014334 b 0x13e0e | goto label_9;
| label_43:
0x00014336 mvn r3, 0x62 | r3 = ~0x62;
0x0001433a str r3, [sp, 0x30] | var_30h_2 = r3;
0x0001433c b 0x13e94 | goto label_10;
| label_27:
0x0001433e ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x00014340 cmp r2, 0 |
| if (r2 != 0) {
0x00014342 bne.w 0x13d98 | goto label_11;
| }
0x00014346 ldr.w r2, [r7, 0xf8] | r2 = *((r7 + 0xf8));
0x0001434a b 0x13ecc | goto label_12;
| label_41:
0x0001434c ldr r3, [pc, 0xe4] |
0x0001434e add r3, pc | r3 = 0x28786;
0x00014350 str r3, [sp, 4] | var_44h = r3;
0x00014352 ldr r3, [pc, 0xe4] |
0x00014354 add r3, pc | r3 = 0x28792;
0x00014356 b 0x14042 | goto label_13;
| label_44:
0x00014358 ldr r0, [pc, 0xe0] |
0x0001435a mvn r3, 0x62 | r3 = ~0x62;
0x0001435e mov r2, r6 | r2 = r6;
0x00014360 mov.w r1, 0x19e | r1 = 0x19e;
0x00014364 str r3, [sp, 0x30] | var_30h_2 = r3;
0x00014366 add r0, pc | r0 = 0x287a6;
0x00014368 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0001436c b 0x13e94 | goto label_10;
| label_32:
0x0001436e ldr r2, [pc, 0xd0] |
0x00014370 mov r3, r0 | r3 = r0;
0x00014372 movs r1, 0 | r1 = 0;
0x00014374 movs r0, 5 | r0 = 5;
0x00014376 add r2, pc | r2 = 0x287bc;
0x00014378 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001437c b 0x13e54 | goto label_14;
| label_46:
0x0001437e mov r3, r6 | r3 = r6;
0x00014380 mov r6, r7 | r6 = r7;
0x00014382 mov r7, r5 | r7 = r5;
0x00014384 mov r5, r3 | r5 = r3;
0x00014386 b 0x142b8 | goto label_15;
| label_33:
0x00014388 ldr r2, [pc, 0xb8] |
0x0001438a mov r3, r0 | r3 = r0;
0x0001438c movs r1, 0 | r1 = 0;
0x0001438e movs r0, 5 | r0 = 5;
0x00014390 add r2, pc | r2 = 0x287d8;
0x00014392 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014396 b 0x13e4e | goto label_16;
| label_42:
0x00014398 ldr r2, [pc, 0xac] |
0x0001439a mov r3, r0 | r3 = r0;
0x0001439c movs r1, 0 | r1 = 0;
0x0001439e movs r0, 5 | r0 = 5;
0x000143a0 add r2, pc | r2 = 0x287ec;
0x000143a2 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000143a6 b 0x13f9c | goto label_7;
| label_47:
0x000143a8 mvn r3, 0x62 | r3 = ~0x62;
0x000143ac str r3, [sp, 0x30] | var_30h_2 = r3;
0x000143ae b 0x13e6c | goto label_17;
| label_45:
0x000143b0 mov.w sb, 3 | sb = 3;
0x000143b4 b 0x142b8 | goto label_15;
| label_40:
0x000143b6 blx 0x348c | fprintf_chk ()
0x000143ba nop |
0x000143bc ldr r0, [sp, 0x258] | r0 = *(arg_190h);
0x000143be movs r0, r0 |
0x000143c0 add r7, sp, 0x288 | r7 += arg_288h;
0x000143c2 movs r1, r0 | r1 = r0;
0x000143c4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000143c6 movs r0, r0 |
0x000143c8 add r7, sp, 0x250 | r7 += arg_250h;
0x000143ca movs r1, r0 | r1 = r0;
0x000143cc lsls r0, r1, 0xc | r0 = r1 << 0xc;
0x000143ce movs r0, r0 |
0x000143d0 lsls r4, r0, 0xc | r4 = r0 << 0xc;
0x000143d2 movs r0, r0 |
0x000143d4 str r7, [sp, 0x338] | *(arg_258h) = r7;
0x000143d6 movs r0, r0 |
0x000143d8 ldrh r6, [r7, 0x2c] | r6 = *((r7 + 0x2c));
0x000143da movs r0, r0 |
0x000143dc ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x000143de movs r0, r0 |
0x000143e0 ldrh r6, [r1, 0x28] | r6 = *((r1 + 0x28));
0x000143e2 movs r0, r0 |
0x000143e4 ldrh r4, [r7, 0x26] | r4 = *((r7 + 0x26));
0x000143e6 movs r0, r0 |
0x000143e8 ldrh r6, [r4, 0x26] | r6 = *((r4 + 0x26));
0x000143ea movs r0, r0 |
0x000143ec str r6, [sp, 0x360] | *(arg_360h_2) = r6;
0x000143ee movs r0, r0 |
0x000143f0 ldrh r0, [r4, 0x22] | r0 = *((r4 + 0x22));
0x000143f2 movs r0, r0 |
0x000143f4 ldrh r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x000143f6 movs r0, r0 |
0x000143f8 ldrh r4, [r4, 0x1e] | r4 = *((r4 + 0x1e));
0x000143fa movs r0, r0 |
0x000143fc lsls r4, r2, 0xc | r4 = r2 << 0xc;
0x000143fe movs r0, r0 |
0x00014400 str r5, [sp, 0x2d8] | *(arg_2d8h) = r5;
0x00014402 movs r0, r0 |
0x00014404 add r4, sp, 0x2f8 | r4 += arg_2f8h_2;
0x00014406 movs r1, r0 | r1 = r0;
0x00014408 ldrh r0, [r6, 0x1e] | r0 = *((r6 + 0x1e));
0x0001440a movs r0, r0 |
0x0001440c ldrh r6, [r2, 0x26] | r6 = *((r2 + 0x26));
0x0001440e movs r0, r0 |
0x00014410 ldrh r6, [r7, 0x1a] | r6 = *((r7 + 0x1a));
0x00014412 movs r0, r0 |
0x00014414 ldr r4, [r6, 0x44] | r4 = *((r6 + 0x44));
0x00014416 movs r0, r0 |
0x00014418 ldrh r6, [r1, 0x18] | r6 = *((r1 + 0x18));
0x0001441a movs r0, r0 |
0x0001441c ldrh r6, [r7, 0x14] | r6 = *((r7 + 0x14));
0x0001441e movs r0, r0 |
0x00014420 ldrh r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x00014422 movs r0, r0 |
0x00014424 ldrh r4, [r0, 0xa] | r4 = *((r0 + 0xa));
0x00014426 movs r0, r0 |
0x00014428 ldrh r0, [r0, 4] | r0 = *((r0 + 4));
0x0001442a movs r0, r0 |
0x0001442c ldrh r6, [r2, 4] | r6 = *((r2 + 4));
0x0001442e movs r0, r0 |
0x00014430 ldr r4, [r1, 0x18] | r4 = *((r1 + 0x18));
0x00014432 movs r0, r0 |
0x00014434 ldrh r6, [r4, 2] | r6 = *((r4 + 2));
0x00014436 movs r0, r0 |
0x00014438 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x0001443a movs r0, r0 |
0x0001443c ldrh r6, [r1] | r6 = *(r1);
0x0001443e movs r0, r0 |
0x00014440 ldr r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x00014442 movs r0, r0 |
0x00014444 ldrh r0, [r6, 8] | r0 = *((r6 + 8));
0x00014446 movs r0, r0 |
0x00014448 ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x0001444a movs r0, r0 |
0x0001444c ldr r3, [pc, 0x250] |
0x0001444e movs r2, 3 | r2 = 3;
0x00014450 push.w {r4, r5, r6, r7, r8, lr} |
0x00014454 sub sp, 0x78 |
0x00014456 ldr r5, [pc, 0x24c] |
0x00014458 mov r6, r1 | r6 = r1;
0x0001445a add r3, pc | r3 = 0x28afe;
0x0001445c movw r1, 0x42a | r1 = 0x42a;
0x00014460 str r0, [sp, 0xc] | var_ch_3 = r0;
0x00014462 add.w r0, r3, 0x12c | r0 = r3 + 0x12c;
0x00014466 ldr r3, [pc, 0x240] | r3 = *(0x146aa);
0x00014468 add r5, pc | r5 = 0x28b12;
0x0001446a ldr r4, [pc, 0x240] |
0x0001446c ldr r3, [r5, r3] |
0x0001446e add r4, pc | r4 = 0x28b20;
0x00014470 ldr r3, [r3] | r3 = *(0x28b12);
0x00014472 str r3, [sp, 0x74] | var_74h = r3;
0x00014474 mov.w r3, 0 | r3 = 0;
0x00014478 bl 0xfb54 | r0 = fcn_0000fb54 (r0, r1, r2);
0x0001447c bl 0x132c8 | fcn_000132c8 ();
0x00014480 ldr r0, [pc, 0x22c] | r0 = *(0x146b0);
0x00014482 mov r3, r4 | r3 = r4;
0x00014484 ldr r2, [pc, 0x22c] |
0x00014486 add r1, sp, 0xc | r1 += var_ch_3;
0x00014488 ldr r3, [r4, r0] | r3 = *(0x28b20);
0x0001448a add r2, pc | r2 = 0x28b42;
0x0001448c ldr r0, [r3] | r0 = *(0x28b20);
0x0001448e bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
| if (r0 == 0) {
0x00014492 cbz r0, 0x144e4 | goto label_18;
| }
0x00014494 ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x00014496 mov r7, sp | r7 = sp;
0x00014498 mov r0, r7 | r0 = r7;
0x0001449a ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x0001449c bl 0x38d8 | r0 = fcn_000038d8 (r0);
0x000144a0 ldm.w r7, {r0, r1} | r0 = *(r7);
| r1 = *((r7 + 4));
0x000144a4 ldr.w r8, [r4, 0xe0] | r8 = *((r4 + 0xe0));
0x000144a8 add.w r3, r5, 0x20 | r3 = r5 + 0x20;
0x000144ac stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000144b0 cmp.w r8, 0 |
| if (r8 == 0) {
0x000144b4 beq 0x144e4 | goto label_18;
| }
0x000144b6 movs r3, 0 | r3 = 0;
0x000144b8 add r7, sp, 0x10 | r7 += var_10h_2;
0x000144ba mov r5, r3 | r5 = r3;
0x000144bc str r3, [sp, 0x10] | var_10h_2 = r3;
0x000144be b 0x144cc |
| while (r0 != 0) {
0x000144c0 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x000144c2 ldr.w r3, [r4, 0xe0] | r3 = *((r4 + 0xe0));
0x000144c6 ldr r5, [r2, 8] | r5 = *((r2 + 8));
0x000144c8 cmp r5, r3 |
| if (r5 == r3) {
0x000144ca beq 0x14514 | goto label_48;
| }
0x000144cc ldr.w r0, [r4, 0xe4] | r0 = *((r4 + 0xe4));
0x000144d0 mov r1, r7 | r1 = r7;
0x000144d2 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x000144d6 cmp r0, 0 |
0x000144d8 bne 0x144c0 |
| }
0x000144da ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000144dc cbnz r3, 0x14514 |
| while (r5 == 0) {
| label_19:
0x000144de movs r3, 0 | r3 = 0;
0x000144e0 str.w r3, [r4, 0xe0] | __asm ("str.w r3, [r4, 0xe0]");
| label_18:
0x000144e4 ldr r0, [pc, 0x1d0] |
0x000144e6 movs r3, 3 | r3 = 3;
0x000144e8 movs r2, 0 | r2 = 0;
0x000144ea movw r1, 0x491 | r1 = 0x491;
0x000144ee add r0, pc |
0x000144f0 add.w r0, r0, 0x12c | r0 = 0x28cd6;
0x000144f2 strb r6, [r2, 2] | *((r2 + 2)) = r6;
0x000144f4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000144f8 ldr r2, [pc, 0x1c0] |
0x000144fa ldr r3, [pc, 0x1ac] | r3 = *(0x146aa);
0x000144fc add r2, pc | r2 = 0x28bbc;
0x000144fe ldr r3, [r2, r3] | r3 = *(0x28bbc);
0x00014500 ldr r2, [r3] | r2 = *(0x28bbc);
0x00014502 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00014504 eors r2, r3 | r2 ^= r3;
0x00014506 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001450a bne.w 0x1469a | goto label_49;
| }
0x0001450e add sp, 0x78 |
0x00014510 pop.w {r4, r5, r6, r7, r8, pc} |
| label_48:
0x00014514 ldr.w r7, [r8] | r7 = *(r8);
0x00014518 cmp r7, 3 |
| if (r7 == 3) {
0x0001451a beq 0x14556 | goto label_50;
| }
| label_20:
0x0001451c cmp r5, 0 |
0x0001451e beq 0x144de |
| }
| label_21:
0x00014520 ldr r2, [pc, 0x19c] |
0x00014522 mov.w r1, -1 | r1 = -1;
0x00014526 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00014528 movs r0, 4 | r0 = 4;
0x0001452a add r2, pc | r2 = 0x28bee;
0x0001452c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001452e invalid |
0x00014532 ldr.w r0, [r4, 0xe4] | r0 = *((r4 + 0xe4));
0x00014536 bl 0xd778 | fcn_0000d778 (r0, r1);
0x0001453a mov r0, r5 | r0 = r5;
0x0001453c bl 0x12dec | fcn_00012dec (r0);
0x00014540 ldr r0, [pc, 0x180] |
0x00014542 mov r2, r5 | r2 = r5;
0x00014544 movw r1, 0x422 | r1 = 0x422;
0x00014548 add r0, pc | r0 = 0x28c10;
0x0001454a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0001454e movs r3, 0 | r3 = 0;
0x00014550 str.w r3, [r4, 0xe0] | __asm ("str.w r3, [r4, 0xe0]");
0x00014554 b 0x144e4 | goto label_18;
| label_50:
0x00014556 cmp r6, 1 |
| if (r6 == 1) {
0x00014558 beq 0x145b0 | goto label_51;
| }
0x0001455a adds r3, r6, 1 | r3 = r6 + 1;
| if (r3 == r6) {
0x0001455c beq 0x1456c | goto label_52;
| }
0x0001455e ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x00014562 cmp r3, 0 |
| if (r3 != 0) {
0x00014564 bne 0x144de | goto label_19;
| }
0x00014566 str.w r3, [r8, 0x3c] | __asm ("str.w r3, [r8, 0x3c]");
0x0001456a b 0x144de | goto label_19;
| label_52:
0x0001456c ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x00014570 cmp r2, 0 |
| if (r2 == 0) {
0x00014572 beq 0x14600 | goto label_53;
| }
0x00014574 ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x00014578 mov r1, r6 | r1 = r6;
0x0001457a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001457c mov r0, r7 | r0 = r7;
0x0001457e str r6, [sp, 0x18] | var_18h_2 = r6;
0x00014580 movs r6, 0 | r6 = 0;
0x00014582 ldr r3, [r3] | r3 = *(r3);
0x00014584 str r2, [sp, 0x14] | var_14h_2 = r2;
0x00014586 ldr r2, [pc, 0x140] |
0x00014588 str r6, [sp, 0x1c] | var_1ch = r6;
0x0001458a add r2, pc | r2 = 0x28c58;
0x0001458c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014590 ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x00014594 add r1, sp, 0x14 | r1 += var_14h_2;
0x00014596 ldr.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x0001459a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_22:
0x0001459c ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x000145a0 cmp r3, 0 |
| if (r3 != 0) {
0x000145a2 bne 0x1451c | goto label_20;
| }
| label_23:
0x000145a4 movs r3, 0 | r3 = 0;
0x000145a6 str.w r3, [r8, 0x3c] | __asm ("str.w r3, [r8, 0x3c]");
0x000145aa cmp r5, 0 |
| if (r5 != 0) {
0x000145ac bne 0x14520 | goto label_21;
| }
0x000145ae b 0x144de | goto label_19;
| label_51:
0x000145b0 ldr.w r2, [r8, 0x40] | r2 = *((r8 + 0x40));
0x000145b4 cmp r2, 0 |
| if (r2 != 0) {
0x000145b6 bne 0x144de | goto label_19;
| }
0x000145b8 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x000145bc cmp r1, 0 |
| if (r1 == 0) {
0x000145be beq 0x14632 | goto label_54;
| }
0x000145c0 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000145c2 mov r0, r7 | r0 = r7;
0x000145c4 ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x000145c8 ldr r3, [r3] | r3 = *(r3);
0x000145ca str r1, [sp, 0x20] | var_20h_3 = r1;
0x000145cc ldr.w r1, [r8, 0x34] | r1 = *((r8 + 0x34));
0x000145d0 str r1, [sp, 0x54] | var_54h = r1;
0x000145d2 ldr.w r1, [r8, 0x3c] | r1 = *((r8 + 0x3c));
0x000145d6 str r1, [sp, 0x30] | var_30h = r1;
0x000145d8 ldr.w r1, [r8, 0x38] | r1 = *((r8 + 0x38));
0x000145dc str r2, [sp, 0x34] | var_74h = r2;
0x000145de ldr.w r2, [r8, 0x44] | r2 = *((r8 + 0x44));
0x000145e2 str r1, [sp, 0x2c] | var_2ch_3 = r1;
0x000145e4 mov.w r1, -1 | r1 = -1;
0x000145e8 str r2, [sp, 0x38] | var_38h = r2;
0x000145ea ldr r2, [pc, 0xe0] |
0x000145ec add r2, pc | r2 = 0x28cbe;
0x000145ee bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000145f2 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000145f6 add r1, sp, 0x20 | r1 += var_20h_3;
0x000145f8 ldr.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x000145fa movs r0, r3 | r0 = r3;
0x000145fc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000145fe b 0x1459c | goto label_22;
| label_53:
0x00014600 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00014604 cmp r3, 0 |
| if (r3 == 0) {
0x00014606 beq 0x1459c | goto label_22;
| }
0x00014608 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001460a mov r0, r7 | r0 = r7;
0x0001460c ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x00014610 ldr r3, [r3] | r3 = *(r3);
0x00014612 str r2, [sp, 0x44] | var_44h_2 = r2;
0x00014614 ldr r2, [pc, 0xb8] |
0x00014616 str r1, [sp, 0x28] | var_28h = r1;
0x00014618 mov r1, r6 | r1 = r6;
0x0001461a str r6, [sp, 0x40] | var_40h = r6;
0x0001461c add r2, pc | r2 = 0x28cf0;
0x0001461e str r7, [sp, 0x48] | var_48h = r7;
0x00014620 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014624 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00014628 add r1, sp, 0x20 | r1 += var_20h_3;
0x0001462a ldr.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x0001462e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014630 b 0x1459c | goto label_22;
| label_54:
0x00014632 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00014636 cmp r3, 0 |
| if (r3 == 0) {
0x00014638 beq 0x145a4 | goto label_23;
| }
0x0001463a movs r2, 0x4c | r2 = 0x4c;
0x0001463c add r0, sp, 0x24 | r0 += var_24h;
0x0001463e blx 0x30d8 | fcn_000030d8 ();
0x00014642 movw r3, 0x514d |
0x00014646 add r6, sp, 0x30 | r6 += var_30h;
0x00014648 movt r3, 0x4453 | r3 = 0x4453514d;
0x0001464c str r3, [sp, 0x20] | var_20h_3 = r3;
0x0001464e ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x00014652 ldr.w ip, [r4, 0xc] | ip = *((r4 + 0xc));
0x00014656 str r3, [sp, 0x28] | var_28h = r3;
0x00014658 ldr.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x0001465c str r3, [sp, 0x70] | var_70h = r3;
0x0001465e ldr.w r3, [r8, 0x3c] | r3 = *((r8 + 0x3c));
0x00014662 str r3, [sp, 0x4c] | var_4ch = r3;
0x00014664 ldr.w r3, [r8, 0x38] | r3 = *((r8 + 0x38));
0x00014666 adds r0, 0x38 | r0 += 0x38;
0x00014668 str r3, [sp, 0x48] | var_48h = r3;
0x0001466a ldr.w r3, [r8, 0x44] | r3 = *((r8 + 0x44));
0x0001466e str r3, [sp, 0x54] | var_54h = r3;
0x00014670 add.w r3, r8, 0x24 | r3 = r8 + 0x24;
0x00014674 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00014676 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x0001467a mov r0, r7 | r0 = r7;
0x0001467c ldr r2, [pc, 0x54] |
0x0001467e mov.w r1, -1 | r1 = -1;
0x00014682 ldr.w r3, [ip] | r3 = *(ip);
0x00014686 add r2, pc | r2 = 0x28d5e;
0x00014688 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001468c ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00014690 add r1, sp, 0x20 | r1 += var_20h_3;
0x00014692 ldr.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00014696 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014698 b 0x1459c | goto label_22;
| label_49:
0x0001469a blx 0x348c | fprintf_chk ()
0x0001469e nop |
0x000146a0 str r1, [sp, 0x78] | var_78h = r1;
0x000146a2 movs r0, r0 |
0x000146a4 add r0, sp, 0xa0 | r0 += var_10h;
0x000146a6 movs r1, r0 | r1 = r0;
0x000146a8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000146aa movs r0, r0 |
0x000146ac add r0, sp, 0x88 | r0 += var_88h;
0x000146ae movs r1, r0 | r1 = r0;
0x000146b0 lsls r0, r4, 0xd | r0 = r4 << 0xd;
0x000146b2 movs r0, r0 |
0x000146b4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x146d8 */
| #include <stdint.h>
|
; (fcn) fcn.000146d8 () | void fcn_000146d8 (int16_t arg1) {
| int16_t var_4ch;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x000146d8 invalid |
0x000146dc ldr r4, [pc, 0xa4] |
0x000146de sub sp, 0xc |
0x000146e0 movs r2, 3 | r2 = 3;
0x000146e2 mov.w r1, 0x700 | r1 = 0x700;
0x000146e6 ldr r0, [pc, 0xa0] | r0 = *(0x1478a);
0x000146e8 add r4, pc | r4 = 0x28e70;
0x000146ea ldr r3, [pc, 0xa0] |
0x000146ec ldr r0, [r4, r0] |
0x000146ee add r3, pc | r3 = 0x28e80;
0x000146f0 ldr r0, [r0] | r0 = *(0x28e70);
0x000146f2 str r0, [sp, 4] | var_4h = r0;
0x000146f4 mov.w r0, 0 | r0 = 0;
0x000146f8 add.w r0, r3, 0x144 | r0 = r3 + 0x144;
0x000146fc bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00014700 ldr r0, [r6, 0x78] | r0 = *((r6 + 0x78));
0x00014702 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00014704 cmp r3, 0 |
| if (r3 <= 0) {
0x00014706 ble 0x14750 | goto label_0;
| }
0x00014708 ldr r5, [pc, 0x84] |
0x0001470a movs r3, 0 | r3 = 0;
0x0001470c mov r7, sp | r7 = sp;
0x0001470e str r3, [sp] | *(sp) = r3;
0x00014710 add r5, pc | r5 = 0x28ea4;
0x00014712 b 0x14740 |
| while (r0 != 0) {
0x00014714 ldr r3, [sp] | r3 = *(sp);
0x00014716 mov.w r1, 0x708 | r1 = 0x708;
0x0001471a mov r0, r5 | r0 = r5;
0x0001471c ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x0001471e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00014720 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00014724 ldr r3, [r4] | r3 = *(r4);
0x00014726 movw r1, 0x709 | r1 = 0x709;
0x0001472a mov r0, r5 | r0 = r5;
0x0001472c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0001472e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00014732 mov r0, r5 | r0 = r5;
0x00014734 ldr r2, [r4] | r2 = *(r4);
0x00014736 movw r1, 0x70a | r1 = 0x70a;
0x0001473a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0001473e ldr r0, [r6, 0x78] | r0 = *((r6 + 0x78));
0x00014740 mov r1, r7 | r1 = r7;
0x00014742 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00014746 cmp r0, 0 |
0x00014748 bne 0x14714 |
| }
0x0001474a ldr r0, [r6, 0x78] | r0 = *((r6 + 0x78));
0x0001474c bl 0xd94c | fcn_0000d94c (r0);
| label_0:
0x00014750 ldr r2, [pc, 0x40] |
0x00014752 ldr r3, [pc, 0x34] | r3 = *(0x1478a);
0x00014754 add r2, pc | r2 = 0x28eec;
0x00014756 ldr r3, [r2, r3] | r3 = *(0x28eec);
0x00014758 ldr r2, [r3] | r2 = *(0x28eec);
0x0001475a ldr r3, [sp, 4] | r3 = var_4h;
0x0001475c eors r2, r3 | r2 ^= r3;
0x0001475e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00014762 bne 0x1477e |
0x00014764 ldr r0, [pc, 0x30] |
0x00014766 movs r3, 3 | r3 = 3;
0x00014768 movs r2, 0 | r2 = 0;
0x0001476a movw r1, 0x70e | r1 = 0x70e;
0x0001476e add r0, pc |
0x00014770 add.w r0, r0, 0x144 | r0 = 0x2904e;
0x00014774 add sp, 0xc |
0x00014776 pop.w {r4, r5, r6, r7, lr} |
0x0001477a b.w 0xfbf4 | void (*0xfbf4)() ();
| }
0x0001477e blx 0x348c | fprintf_chk ()
0x00014782 nop |
0x00014784 adr r5, 0x2a0 | r5 = 0x2a0;
0x00014786 movs r1, r0 | r1 = r0;
0x00014788 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0001478a movs r0, r0 |
0x0001478c ldrh r2, [r1, 0x34] | r2 = *((r1 + 0x34));
0x0001478e movs r0, r0 |
0x00014790 strh r4, [r4, 0x22] | *((r4 + 0x22)) = r4;
0x00014792 movs r0, r0 |
0x00014794 adr r5, 0xf0 | r5 = 0xf0;
0x00014796 movs r1, r0 | r1 = r0;
0x00014798 ldrh r2, [r1, 0x30] | r2 = *((r1 + 0x30));
0x0001479a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x1479c */
| #include <stdint.h>
|
; (fcn) fcn.0001479c () | void fcn_0001479c (int16_t arg1) {
| int16_t var_0h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int32_t var_18h;
| int32_t var_18h_2;
| int16_t var_20h_2;
| int16_t var_80h;
| int16_t var_98h;
| int16_t var_4ch;
| r0 = arg1;
0x0001479c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000147a0 mov r5, r0 | r5 = r0;
0x000147a2 ldr r4, [pc, 0x144] |
0x000147a4 sub sp, 0x54 |
0x000147a6 movs r2, 3 | r2 = 3;
0x000147a8 movw r1, 0x716 | r1 = 0x716;
0x000147ac ldr r0, [pc, 0x13c] | r0 = *(0x148ec);
0x000147ae add r4, pc | r4 = 0x2909c;
0x000147b0 ldr r3, [pc, 0x13c] |
0x000147b2 ldr r0, [r4, r0] |
0x000147b4 add r3, pc | r3 = 0x290a8;
0x000147b6 ldr r0, [r0] | r0 = *(0x2909c);
0x000147b8 str r0, [sp, 0x4c] | var_4ch = r0;
0x000147ba mov.w r0, 0 | r0 = 0;
0x000147be add.w r0, r3, 0x160 | r0 = r3 + 0x160;
0x000147c2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000147c6 ldr.w r0, [r5, 0xe4] | r0 = *((r5 + 0xe4));
0x000147ca mov r6, r0 | r6 = r0;
0x000147cc cmp r0, 0 |
| if (r0 == 0) {
0x000147ce beq 0x148a0 | goto label_1;
| }
0x000147d0 ldr r2, [pc, 0x120] |
0x000147d2 movs r3, 0 | r3 = 0;
0x000147d4 ldr.w sb, [pc, 0x120] |
0x000147d8 add r7, sp, 0x10 | r7 += var_68h;
0x000147da ldr.w r8, [pc, 0x120] |
0x000147de mov r6, r3 | r6 = r3;
0x000147e0 add r2, pc | r2 = 0x290d8;
0x000147e2 str r3, [sp, 0x10] | var_68h = r3;
0x000147e4 add sb, pc | sb = 0x290e0;
0x000147e6 str r2, [sp, 0xc] | var_64h = r2;
0x000147e8 add r8, pc | r8 = 0x290ea;
0x000147ea b 0x14828 |
| while (r3 != 0) {
0x000147ec ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000147ee mvn r1, 0xa | r1 = ~0xa;
0x000147f2 ldr r0, [r4] | r0 = *(r4);
0x000147f4 movs r2, 0 | r2 = 0;
0x000147f6 strd r1, r2, [sp, 0x18] | __asm ("strd r1, r2, [var_18h]");
0x000147fa str r3, [sp, 0x14] | var_6ch = r3;
0x000147fc bl 0x5774 | r0 = fcn_00005774 (r0);
0x00014800 mov r3, r0 | r3 = r0;
0x00014802 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00014804 mov.w r1, -1 | r1 = -1;
0x00014808 mov r2, r8 | r2 = r8;
0x0001480a ldr r0, [r0] | r0 = *(r0);
0x0001480c str r0, [sp] | *(sp) = r0;
0x0001480e movs r0, 3 | r0 = 3;
0x00014810 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014814 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00014816 add r1, sp, 0x14 | r1 += var_6ch;
0x00014818 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0001481a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_0:
0x0001481c mov r0, r4 | r0 = r4;
0x0001481e adds r6, 1 | r6++;
0x00014820 bl 0x12dec | fcn_00012dec (r0);
0x00014824 ldr.w r0, [r5, 0xe4] | r0 = *((r5 + 0xe4));
0x00014828 mov r1, r7 | r1 = r7;
0x0001482a bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x0001482e cmp r0, 0 |
| if (r0 == 0) {
0x00014830 beq 0x14898 | goto label_2;
| }
0x00014832 ldr r3, [sp, 0x10] | r3 = var_68h;
0x00014834 ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x00014836 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00014838 cmp r3, 0 |
0x0001483a bne 0x147ec |
| }
0x0001483c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001483e cmp r3, 0 |
| if (r3 == 0) {
0x00014840 beq 0x1481c | goto label_0;
| }
0x00014842 ldr r3, [sp, 0xc] | r3 = var_64h;
0x00014844 add.w ip, sp, 0x20 |
0x00014848 ldr.w fp, [r4, 0x14] | fp = *((r4 + 0x14));
0x0001484c mvn sl, 0xa | sl = ~0xa;
0x00014850 add.w lr, r3, 0x178 | lr = r3 + 0x178;
0x00014854 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00014858 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0001485c str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_80h]");
0x00014860 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00014864 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00014868 ldm.w lr, {r0, r1, r2} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
0x0001486c stm.w ip, {r0, r1, r2} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
0x00014870 ldr r0, [r4] | r0 = *(r4);
0x00014872 str.w sl, [sp, 0x40] | __asm ("str.w sl, [var_98h]");
0x00014876 bl 0x5774 | fcn_00005774 (r0);
0x0001487a ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0001487c mov r3, r0 | r3 = r0;
0x0001487e mov.w r1, -1 | r1 = -1;
0x00014882 movs r0, 3 | r0 = 3;
0x00014884 ldr r2, [r2] | r2 = *(r2);
0x00014886 str r2, [sp] | *(sp) = r2;
0x00014888 mov r2, sb | r2 = sb;
0x0001488a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001488e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00014890 add r1, sp, 0x20 | r1 += var_20h_2;
0x00014892 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00014894 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014896 b 0x1481c | goto label_0;
| label_2:
0x00014898 ldr.w r0, [r5, 0xe4] | r0 = *((r5 + 0xe4));
0x0001489c bl 0xd94c | fcn_0000d94c (r0);
| label_1:
0x000148a0 ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
0x000148a2 mov r3, r6 | r3 = r6;
0x000148a4 ldr r2, [pc, 0x58] |
0x000148a6 mov.w r1, -1 | r1 = -1;
0x000148aa movs r0, 3 | r0 = 3;
0x000148ac ldr r4, [r4] | r4 = *(r4);
0x000148ae add r2, pc | r2 = 0x291b2;
0x000148b0 str r4, [sp] | *(sp) = r4;
0x000148b2 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000148b6 ldr r2, [pc, 0x4c] |
0x000148b8 ldr r3, [pc, 0x30] | r3 = *(0x148ec);
0x000148ba add r2, pc | r2 = 0x291c4;
0x000148bc ldr r3, [r2, r3] | r3 = *(0x291c4);
0x000148be ldr r2, [r3] | r2 = *(0x291c4);
0x000148c0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000148c2 eors r2, r3 | r2 ^= r3;
0x000148c4 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000148c8 bne 0x148e4 |
0x000148ca ldr r0, [pc, 0x3c] |
0x000148cc movs r3, 3 | r3 = 3;
0x000148ce movs r2, 0 | r2 = 0;
0x000148d0 movw r1, 0x73e | r1 = 0x73e;
0x000148d4 add r0, pc |
0x000148d6 add.w r0, r0, 0x160 | r0 = 0x29342;
0x000148da add sp, 0x54 |
0x000148dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000148e0 b.w 0xfbf4 | void (*0xfbf4)() ();
| }
0x000148e4 blx 0x348c | fprintf_chk ()
0x000148e8 adr r4, 0x388 | r4 = 0x388;
0x000148ea movs r1, r0 | r1 = r0;
0x000148ec lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000148ee movs r0, r0 |
0x000148f0 ldrh r4, [r0, 0x2e] | r4 = *((r0 + 0x2e));
0x000148f2 movs r0, r0 |
0x000148f4 ldrh r0, [r3, 0x2c] | r0 = *((r3 + 0x2c));
0x000148f6 movs r0, r0 |
0x000148f8 strh r0, [r3, 0x2c] | *((r3 + 0x2c)) = r0;
0x000148fa movs r0, r0 |
0x000148fc strh r4, [r2, 0x2c] | *((r2 + 0x2c)) = r4;
0x000148fe movs r0, r0 |
0x00014900 strh r2, [r6, 0x26] | *((r6 + 0x26)) = r2;
0x00014902 movs r0, r0 |
0x00014904 adr r3, 0x358 | r3 = 0x358;
0x00014906 movs r1, r0 | r1 = r0;
0x00014908 ldrh r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x0001490a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x1490c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0001490c () | void fcn_0001490c (int16_t arg_0h, int16_t arg_d4h, int16_t arg1) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_40h;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_0h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_a0h;
| int16_t var_4ch;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| r0 = arg1;
0x0001490c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00014910 mov r5, r0 | r5 = r0;
0x00014912 ldr r0, [pc, 0x1ec] |
0x00014914 sub sp, 0x34 |
0x00014916 movs r6, 0 | r6 = 0;
0x00014918 movs r2, 3 | r2 = 3;
0x0001491a ldr r3, [pc, 0x1e8] | r3 = *(0x14b06);
0x0001491c movw r1, 0x95d | r1 = 0x95d;
0x00014920 ldr r4, [pc, 0x1e4] |
0x00014922 add r0, pc | r0 = 0x29428;
0x00014924 ldr.w sl, [pc, 0x1e4] |
0x00014926 adr r1, 0x390 | r1 = 0x390;
0x00014928 ldr r3, [r0, r3] |
0x0001492a add r4, pc | r4 = 0x29436;
0x0001492c add.w r0, r4, 0x1a4 | r0 = r4 + 0x1a4;
0x00014930 add sl, pc | sl = 0x29440;
0x00014932 ldr r3, [r3] | r3 = *(0x29428);
0x00014934 str r3, [sp, 0x2c] | var_2ch = r3;
0x00014936 mov.w r3, 0 | r3 = 0;
0x0001493a str r6, [sp, 0x1c] | var_1ch = r6;
0x0001493c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00014940 movs r2, 3 | r2 = 3;
0x00014942 add.w r0, r4, 0x1bc | r0 = r4 + 0x1bc;
0x00014946 movw r1, 0x2da | r1 = 0x2da;
0x0001494a str r6, [sp, 0x20] | var_20h = r6;
0x0001494c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00014950 ldr.w r3, [r5, 0x84] | r3 = *((r5 + 0x84));
0x00014954 cmp r3, 0 |
| if (r3 == 0) {
0x00014956 beq 0x14a0a | goto label_65;
| }
0x00014958 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0001495a add r2, sp, 0x28 | r2 += var_28h;
0x0001495c ldr.w r0, [r5, 0x80] | r0 = *((r5 + 0x80));
0x00014960 add r1, sp, 0x24 | r1 += var_24h;
0x00014962 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00014964 mov r7, r0 | r7 = r0;
0x00014966 str r0, [sp, 0x20] | var_20h = r0;
0x00014968 cmp r0, 0 |
| if (r0 != 0) {
0x0001496a bne 0x14a0a | goto label_65;
| }
0x0001496c ldr r3, [pc, 0x1a0] |
0x0001496e mov r6, r0 | r6 = r0;
0x00014970 ldr r1, [pc, 0x1a0] |
0x00014972 ldr.w fp, [pc, 0x1a4] | fp = fcn.000081f4;
0x00014976 add r3, pc | r3 = 0x2948a;
0x00014978 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0001497a add r1, pc | r1 = 0x29492;
0x0001497c strd r1, sl, [sp, 0xc] | __asm ("strd r1, sl, [sp, 0xc]");
0x00014980 add fp, pc |
0x00014982 mov sl, r3 | sl = r3;
0x00014984 b 0x149bc |
| while (r8 == 0x73) {
0x00014986 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00014988 cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x0001498a bne 0x149d4 | goto label_66;
| }
| label_0:
0x0001498c ldrd r0, r3, [r5, 0x80] | __asm ("ldrd r0, r3, [r5, 0x80]");
0x00014990 mov r1, r4 | r1 = r4;
0x00014992 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00014994 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014996 str r0, [sp, 0x20] | var_20h = r0;
0x00014998 cmp r0, 0 |
| if (r0 != 0) {
0x0001499a bne 0x14a94 | goto label_67;
| }
0x0001499c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0001499e adds r7, 1 | r7++;
0x000149a0 ldr.w r4, [r2, sb] | r4 = *((r2 + sb));
| if (r4 != 0) {
0x000149a4 cbz r4, 0x149ba |
| label_1:
0x000149a6 mov r2, r4 | r2 = r4;
0x000149a8 mov.w r1, 0x2ec | r1 = 0x2ec;
0x000149ac mov r0, fp | r0 = fp;
0x000149ae bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000149b2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000149b4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000149b6 cmp r3, 0 |
| if (r3 != 0) {
0x000149b8 bne 0x14ab2 | goto label_68;
| }
| }
| label_2:
0x000149ba adds r6, 1 | r6++;
0x000149bc ldr r3, [sp, 0x28] | r3 = var_28h;
0x000149be cmp r3, r6 |
| if (r3 <= r6) {
0x000149c0 ble 0x14ab2 | goto label_68;
| }
0x000149c2 ldr.w r4, [r2, r6, lsl 2] | offset_0 = r6 << 2;
| r4 = *((r2 + offset_0));
0x000149c6 lsl.w sb, r6, 2 | sb = r6 << 2;
0x000149ca ldrb.w r8, [r4] | r8 = *(r4);
0x000149ce cmp.w r8, 0x73 |
0x000149d2 beq 0x14986 |
| }
| label_66:
0x000149d4 ldrb r3, [r4] | r3 = *(r4);
0x000149d6 cmp r3, 0x73 |
| if (r3 == 0x73) {
0x000149d8 beq 0x14ac8 | goto label_69;
| }
| label_4:
0x000149da ldr r1, [sp, 0xc] | r1 = var_ch;
0x000149dc movs r2, 4 | r2 = 4;
0x000149de mov r0, r4 | r0 = r4;
0x000149e0 str r3, [sp, 0x14] | var_14h = r3;
0x000149e2 blx 0x3698 | r0 = fcn_00003698 ();
0x000149e6 cmp r0, 0 |
| if (r0 == 0) {
0x000149e8 beq 0x1498c | goto label_0;
| }
0x000149ea cmp.w r8, 0x72 |
0x000149ee ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r8 != 0x72) {
0x000149f0 bne 0x149f8 | goto label_70;
| }
0x000149f2 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000149f4 cmp r2, 0x2d |
| if (r2 == 0x2d) {
0x000149f6 beq 0x1498c | goto label_0;
| }
| label_70:
0x000149f8 cmp r3, 0x72 |
| if (r3 != 0x72) {
0x000149fa bne 0x149a6 | goto label_1;
| }
0x000149fc ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000149fe cmp r3, 0x35 |
| if (r3 != 0x35) {
0x00014a00 bne 0x149a6 | goto label_1;
| }
0x00014a02 ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x00014a04 cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x00014a06 beq 0x1498c | goto label_0;
| }
0x00014a08 b 0x149a6 | goto label_1;
| label_65:
0x00014a0a movs r7, 0 | r7 = 0;
| label_3:
0x00014a0c ldr r1, [r5] | r1 = *(r5);
0x00014a0e mov r3, r7 | r3 = r7;
0x00014a10 ldr r2, [pc, 0x108] |
0x00014a12 movs r0, 3 | r0 = 3;
0x00014a14 str r1, [sp] | *(sp) = r1;
0x00014a16 mov.w r1, -1 | r1 = -1;
0x00014a1a add r2, pc | r2 = 0x2953a;
0x00014a1c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014a20 ldr r0, [pc, 0xfc] |
0x00014a22 add r2, sp, 0x20 | r2 += var_20h;
0x00014a24 movw r1, 0x2f3 | r1 = 0x2f3;
0x00014a28 movs r3, 3 | r3 = 3;
0x00014a2a add r0, pc |
0x00014a2c add.w r0, r0, 0x1bc | r0 = 0x2970a;
0x00014a30 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00014a32 invalid |
0x00014a36 ldr r0, [r5, 0x70] | r0 = *((r5 + 0x70));
0x00014a38 str r3, [sp, 0x1c] | var_1ch = r3;
0x00014a3a bl 0x4f0c | fcn_00004f0c (r0, r1, r2);
0x00014a3e ldr r0, [r5, 0x74] | r0 = *((r5 + 0x74));
0x00014a40 bl 0x4f0c | fcn_00004f0c (r0, r1, r2);
0x00014a44 ldr r3, [pc, 0xdc] | r3 = *(0x14b24);
0x00014a46 movs r1, 0 | r1 = 0;
0x00014a48 str r1, [r5, 0x5c] | *((r5 + 0x5c)) = r1;
0x00014a4a mov r1, r5 | r1 = r5;
0x00014a4c ldr r2, [pc, 0xd8] |
0x00014a4e ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00014a52 add r2, pc | r2 = 0x2957e;
0x00014a54 ldr r0, [r3] | r0 = *(0x14b24);
0x00014a56 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x00014a5a cmp r0, 0 |
| if (r0 == 0) {
0x00014a5c beq 0x14aec | goto label_71;
| }
0x00014a5e ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x00014a60 bl 0x1479c | fcn_0001479c (r0);
| label_6:
0x00014a64 ldr r0, [pc, 0xc4] |
0x00014a66 movs r3, 3 | r3 = 3;
0x00014a68 add r2, sp, 0x1c | r2 += var_1ch;
0x00014a6a movw r1, 0x96b | r1 = 0x96b;
0x00014a6e add r0, pc |
0x00014a70 add.w r0, r0, 0x1a4 | r0 = 0x29742;
0x00014a74 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00014a78 ldr r2, [pc, 0xb4] |
0x00014a7a ldr r3, [pc, 0x88] | r3 = *(0x14b06);
0x00014a7c ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00014a7e add r2, pc | r2 = 0x295b2;
0x00014a80 ldr r3, [r2, r3] | r3 = *(0x295b2);
0x00014a82 ldr r2, [r3] | r2 = *(0x295b2);
0x00014a84 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00014a86 eors r2, r3 | r2 ^= r3;
0x00014a88 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014a8c bne 0x14afc | goto label_72;
| }
0x00014a8e add sp, 0x34 |
0x00014a90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_67:
0x00014a94 mov r3, r0 | r3 = r0;
0x00014a96 mov r2, sl | r2 = sl;
0x00014a98 movs r1, 0 | r1 = 0;
0x00014a9a movs r0, 5 | r0 = 5;
0x00014a9c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014aa0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00014aa2 ldr.w r4, [r2, sb] | r4 = *((r2 + sb));
0x00014aa6 cmp r4, 0 |
| if (r4 != 0) {
0x00014aa8 bne.w 0x149a6 | goto label_1;
| }
0x00014aac ldr r3, [sp, 0x20] | r3 = var_20h;
0x00014aae cmp r3, 0 |
| if (r3 == 0) {
0x00014ab0 beq 0x149ba | goto label_2;
| }
| label_68:
0x00014ab2 ldr.w sl, [sp, 0x10] | sl = var_10h;
0x00014ab6 cmp r2, 0 |
| if (r2 == 0) {
0x00014ab8 beq 0x14a0c | goto label_3;
| }
0x00014aba ldr r0, [pc, 0x78] |
0x00014abc mov.w r1, 0x2f0 | r1 = 0x2f0;
0x00014ac0 add r0, pc | r0 = 0x295fa;
0x00014ac2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00014ac6 b 0x14a0c | goto label_3;
| label_69:
0x00014ac8 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x00014aca cmp r2, 0x35 |
| if (r2 == 0x35) {
0x00014acc beq 0x14ae2 | goto label_73;
| }
| label_5:
0x00014ace cmp r3, 0x73 |
| if (r3 != 0x73) {
0x00014ad0 bne 0x149da | goto label_4;
| }
0x00014ad2 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x00014ad4 cmp r2, 0x63 |
| if (r2 != 0x63) {
0x00014ad6 bne 0x149da | goto label_4;
| }
0x00014ad8 ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x00014ada cmp r2, 0x2d |
| if (r2 == 0x2d) {
0x00014adc beq.w 0x1498c | goto label_0;
| }
0x00014ae0 b 0x149da | goto label_4;
| label_73:
0x00014ae2 ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x00014ae4 cmp r2, 0x2d |
| if (r2 == 0x2d) {
0x00014ae6 beq.w 0x1498c | goto label_0;
| }
0x00014aea b 0x14ace | goto label_5;
| label_71:
0x00014aec ldr r2, [pc, 0x48] |
0x00014aee mov.w r1, -1 | r1 = -1;
0x00014af2 movs r0, 5 | r0 = 5;
0x00014af4 add r2, pc | r2 = 0x29630;
0x00014af6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014afa b 0x14a64 | goto label_6;
| label_72:
0x00014afc blx 0x348c | fprintf_chk ()
0x00014b00 adr r3, 0x1b8 | r3 = 0x1b8;
0x00014b02 movs r1, r0 | r1 = r0;
0x00014b04 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00014b06 movs r0, r0 |
0x00014b08 ldrh r6, [r1, 0x22] | r6 = *((r1 + 0x22));
0x00014b0a movs r0, r0 |
0x00014b0c adr r3, 0x180 | r3 = 0x180;
0x00014b0e movs r1, r0 | r1 = r0;
0x00014b10 strh r6, [r1, 0x22] | *((r1 + 0x22)) = r6;
0x00014b12 movs r0, r0 |
0x00014b14 str r6, [r6, 0x28] | *((r6 + 0x28)) = r6;
0x00014b16 movs r0, r0 |
0x00014b18 strh r4, [r6, 0xe] | *((r6 + 0xe)) = r4;
0x00014b1a movs r0, r0 |
0x00014b1c strh r6, [r3, 0x1e] | *((r3 + 0x1e)) = r6;
0x00014b1e movs r0, r0 |
0x00014b20 ldrh r6, [r1, 0x1a] | r6 = *((r1 + 0x1a));
0x00014b22 movs r0, r0 |
0x00014b24 lsls r0, r4, 0xd | r0 = r4 << 0xd;
0x00014b26 movs r0, r0 |
0x00014b28 b 0x15102 |
0x00015102 subs r3, 0xac | r3 -= 0xac;
0x00015104 ldr.w r2, [fp, r3] | r2 = *((fp + r3));
0x00015108 ldr.w sl, [r2] | sl = *(r2);
0x0001510c cmp.w sl, 0 |
| if (sl != 0) {
0x00015110 bne.w 0x1559a | goto label_74;
| }
0x00015114 movw r1, 0x4dd3 |
0x00015118 ldr.w r3, [pc, 0xb98] |
| /* if there is a right shift of 4, then it's a division by 1/250 */
0x0001511c movt r1, 0x1062 | r1 = 0x10624dd3;
0x00015120 str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x00015124 str r1, [sp, 0x14] | var_14h = r1;
0x00015126 movw r1, 0x514d |
0x0001512a movt r1, 0x4453 | r1 = 0x4453514d;
0x0001512c adcs r3, r2 | __asm ("adcs r3, r2");
0x0001512e add r3, pc |
0x00015130 str r1, [sp, 0x30] | var_30h = r1;
0x00015132 movs r5, 0xa | r5 = 0xa;
0x00015134 add r1, sp, 0x50 | r1 += var_50h;
0x00015136 add r4, sp, 0x70 | r4 += var_70h;
0x00015138 mov r8, sl | r8 = sl;
0x0001513a mov fp, r2 |
0x0001513c str r1, [sp, 0xc] | var_ch = r1;
0x0001513e add.w r1, r3, 0x250 | r1 = r3 + 0x250;
0x00015142 add.w r3, r3, 0x278 | r3 = 0x2b05e;
0x00015146 str r1, [sp, 0x10] | var_10h = r1;
0x00015148 str r3, [sp, 0x18] | var_18h = r3;
| label_8:
0x0001514a mov.w r3, -1 | r3 = -1;
0x0001514e ldr.w r0, [sb] | r0 = *(sb);
0x00015152 strd r3, r3, [sp, 0x50] | __asm ("strd r3, r3, [sp, 0x50]");
0x00015156 blx 0x35b4 | r0 = fcn_000035b4 ();
0x0001515a cmp r0, 0 |
| if (r0 != 0) {
0x0001515c bne.w 0x15626 | goto label_75;
| }
| label_14:
0x00015160 movs r2, 3 | r2 = 3;
0x00015162 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00015164 movw r1, 0xb3c | r1 = 0xb3c;
0x00015168 strd r8, r8, [sp, 0x68] | __asm ("strd r8, r8, [sp, 0x68]");
0x0001516c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00015170 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00015172 str.w r8, [sp, 0x58] | __asm ("str.w r8, [var_0h]");
0x00015176 umull r2, r3, r3, r5 | r2:r3 = r3 * r5;
0x0001517a mov.w r2, 0x3e8 | r2 = 0x3e8;
0x0001517e lsrs r3, r3, 6 | r3 >>= 6;
0x00015180 str r3, [sp, 0x68] | var_68h = r3;
0x00015182 mls r3, r2, r3, r5 | __asm ("mls r3, r2, r3, r5");
0x00015184 strh r3, [r2, r4] | *((r2 + r4)) = r3;
0x00015186 mul r3, r2, r3 | r3 = r2 * r3;
0x0001518a str r3, [sp, 0x6c] | var_6ch = r3;
0x0001518c bl 0x18f44 | fcn_00018f44 ();
0x00015190 str r0, [sp, 0x54] | var_54h = r0;
0x00015192 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00015194 beq.w 0x1563c | goto label_76;
| }
| label_15:
0x00015198 ldr.w r0, [sb] | r0 = *(sb);
0x0001519c blx 0x3644 | r0 = fcn_00003644 ();
0x000151a0 cmp r0, 0 |
| if (r0 != 0) {
0x000151a2 bne.w 0x15610 | goto label_77;
| }
| label_13:
0x000151a6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000151a8 cmp r3, 0 |
| if (r3 <= 0) {
0x000151aa ble.w 0x15380 | goto label_16;
| }
0x000151ac strh r1, [r5, 6] | *((r5 + 6)) = r1;
0x000151ae ldr r7, [sp, 0x58] | r7 = var_0h;
0x000151b0 cmp r7, 0 |
| if (r7 != 0) {
0x000151b2 bne.w 0x15380 | goto label_16;
| }
0x000151b6 ldr r2, [sp, 8] | r2 = var_8h;
0x000151b8 add r1, sp, 0x54 | r1 += var_54h;
0x000151ba ldr.w r3, [pc, 0xafc] | r3 = *(0x15cba);
0x000151be ldr r5, [r2, r3] | r5 = *((r2 + r3));
0x000151c0 ldr.w r2, [pc, 0xaf8] | r2 = *(0x00015cbc);
0x000151c4 ldr r0, [r5] | r0 = *(r5);
0x000151c6 add r2, pc | r2 += pc;
0x000151c8 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x000151cc cmp r0, 0 |
| if (r0 == 0) {
0x000151ce beq.w 0x15380 | goto label_16;
| }
0x000151d2 ldr r3, [r5] | r3 = *(r5);
0x000151d4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000151d6 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000151d8 cmp r6, 0 |
| if (r6 == 0) {
0x000151da beq.w 0x15380 | goto label_16;
| }
0x000151de ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000151e0 mov.w r1, -1 | r1 = -1;
0x000151e4 ldr.w r2, [pc, 0xad8] |
0x000151e8 movs r0, 3 | r0 = 3;
0x000151ea ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000151ec add r2, pc | r2 = 0x2aeb0;
0x000151ee sbfx r3, r3, 6, 4 | __asm ("sbfx r3, r3, 6, 4");
0x000151f2 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000151f6 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x000151f8 ldrh r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000151fa and r2, r3, 0x340 | r2 = r3 & 0x340;
0x000151fe and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x00015202 cmp r3, 0x80 |
0x00015204 it ne |
| if (r3 != 0x80) {
0x00015206 cmpne r2, 0x40 | __asm ("cmpne r2, 0x40");
| }
| if (r3 != 0x80) {
0x00015208 bne.w 0x156b8 | goto label_78;
| }
0x0001520c ldr.w r0, [pc, 0xab4] |
0x00015210 mov.w sl, -1 | sl = -1;
0x00015214 ldr r3, [r6] | r3 = *(r6);
0x00015216 movs r2, 3 | r2 = 3;
0x00015218 movw r1, 0xa73 | r1 = 0xa73;
0x0001521c str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x00015220 add r0, pc |
0x00015222 add.w r0, r0, 0x260 | r0 = 0x2b148;
0x00015226 str r3, [sp, 0x1c] | var_1ch = r3;
0x00015228 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0001522c ldr r3, [r6, 0x78] | r3 = *((r6 + 0x78));
0x0001522e cmp r3, 0 |
| if (r3 == 0) {
0x00015230 beq.w 0x15898 | goto label_79;
| }
0x00015234 ldr.w sl, [r6, 0xc] | sl = *((r6 + 0xc));
| label_25:
0x00015238 ldr.w r3, [r6, 0x108] | r3 = *((r6 + 0x108));
0x0001523c cmp r3, 0 |
| if (r3 <= 0) {
0x0001523e ble.w 0x157fa | goto label_80;
| }
0x00015242 ldr r2, [r6, 0x74] | r2 = *((r6 + 0x74));
0x00015244 ldr.w r3, [r6, 0x10c] | r3 = *((r6 + 0x10c));
0x00015248 ldr.w r0, [pc, 0xa7c] |
0x0001524c ldr.w r3, [r3, r2, lsl 2] | offset_1 = r2 << 2;
| r3 = *((r3 + offset_1));
0x00015250 movs r2, 6 | r2 = 6;
0x00015252 add r0, pc | r0 = 0x2af1e;
0x00015254 mov r1, r3 | r1 = r3;
0x00015256 mov r5, r3 | r5 = r3;
0x00015258 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001525a blx 0x3698 | r0 = fcn_00003698 ();
0x0001525e cmp r0, 0 |
| if (r0 != 0) {
0x00015260 bne.w 0x15856 | goto label_81;
| }
0x00015264 mov r3, r5 | r3 = r5;
0x00015266 adds r3, 6 | r3 += 6;
0x00015268 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001526a movw r3, 0x75b | r3 = 0x75b;
0x0001526e mov r5, r3 | r5 = r3;
0x00015270 ldrh.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00015274 and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x00015278 cmp r3, 0x40 |
| if (r3 != 0x40) {
0x0001527a bne.w 0x1580e | goto label_82;
| }
| label_18:
0x0001527e movs r2, 4 | r2 = 4;
0x00015280 add r1, sp, 0x64 | r1 += var_64h;
0x00015282 str r2, [sp, 0x64] | var_64h = r2;
0x00015284 add r3, sp, 0x60 | r3 += var_60h;
0x00015286 ldr.w r0, [sl, 0x1c] | r0 = *((sl + 0x1c));
0x0001528a str r1, [sp] | *(sp) = r1;
0x0001528c movs r1, 1 | r1 = 1;
0x0001528e blx 0x36d4 | fcn_000036d4 ();
0x00015292 str r0, [sp, 0x5c] | var_5ch = r0;
0x00015294 cmp r0, 0 |
| if (r0 != 0) {
0x00015296 bne.w 0x15b08 | goto label_83;
| }
0x0001529a ldr r0, [sp, 0x60] | r0 = var_60h;
0x0001529c str r0, [sp, 0x5c] | var_5ch = r0;
0x0001529e cmp r0, 0 |
| if (r0 != 0) {
0x000152a0 bne.w 0x15b08 | goto label_83;
| }
0x000152a4 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000152a6 ldr r0, [r3, 0x1c] | r0 = *((r3 + 0x1c));
0x000152a8 bl 0x85d4 | fcn_000085d4 (r0);
0x000152ac ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x000152ae movs r2, 4 | r2 = 4;
0x000152b0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000152b2 cmp r1, 0 |
| if (r1 == 0) {
0x000152b4 beq.w 0x16014 | goto label_84;
| }
0x000152b8 cmp r3, 0 |
| if (r3 == 0) {
0x000152ba beq.w 0x15b82 | goto label_85;
| }
0x000152be ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000152c0 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000152c2 cmp r3, 0 |
| if (r3 == 0) {
0x000152c4 beq.w 0x15b82 | goto label_85;
| }
0x000152c8 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000152ca movs r2, 5 | r2 = 5;
0x000152cc adds r0, 0x1c | r0 += 0x1c;
0x000152ce movs r1, 1 | r1 = 1;
0x000152d0 bfi r3, r2, 6, 4 | value_2 = BIT_MASK (6, 4);
| value_3 = r2 & value_2;
| value_2 = ~value_2;
| r3 &= value_2;
| r3 |= value_3;
0x000152d4 strh r3, [r0, -0xc] | *((r0 - 0xc)) = r3;
0x000152d8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000152da bl 0xf86c | fcn_0000f86c (r0, r1, r2, r3, r4);
0x000152de str r0, [sp, 0x5c] | var_5ch = r0;
0x000152e0 adds r0, 1 | r0++;
| if (r0 != 1) {
0x000152e2 bne.w 0x15b82 | goto label_85;
| }
| label_35:
0x000152e6 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000152e8 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000152ea and r3, r3, 0x380 | r3 &= 0x380;
0x000152ee cmp r3, 0x80 |
| if (r3 == 0x80) {
0x000152f0 beq 0x15356 | goto label_49;
| }
| do {
| label_7:
0x000152f2 ldr.w r2, [pc, 0x9d8] |
0x000152f6 mov.w r1, -1 | r1 = -1;
0x000152fa mov r0, r6 | r0 = r6;
0x000152fc add r2, pc | r2 = 0x2afce;
0x000152fe bl 0x14e9c | fcn_00014e9c (r0, r1, r2, r3, r4, r5);
0x00015302 b 0x15356 | goto label_49;
| label_19:
0x00015304 ldr.w r2, [sl, 0xac] | r2 = *((sl + 0xac));
0x00015308 ldr.w r0, [sl, 0x38] | r0 = *((sl + 0x38));
0x0001530c ldr.w r1, [sl, 0x1c] | r1 = *((sl + 0x1c));
0x00015310 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00015312 ldr r5, [r2, 0x24] | r5 = *((r2 + 0x24));
0x00015314 cmp r3, 2 |
0x00015316 mov r3, r5 | r3 = r5;
0x00015318 itett gt |
| if (r3 <= 2) {
0x0001531a ldrgt r5, [r2, 0x30] | r5 = *((r2 + 0x30));
| }
| if (r3 <= 2) {
0x0001531c strdle r8, r8, [sp] | __asm ("strdle r8, r8, [sp]");
| }
| if (r3 <= 2) {
0x00015320 strgt r5, [sp, 4] | var_4h = r5;
| }
| if (r3 > 2) {
0x00015322 ldr r2, [r2, 0x2c] | r2 = *((r2 + 0x2c));
| }
0x00015324 it gt |
| if (r3 <= 2) {
0x00015326 strgt r2, [sp] | *(sp) = r2;
| }
0x00015328 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0001532a bl 0x18764 | r0 = fcn_00018764 (r0, r1, r2, r3, r4, r5);
0x0001532e cmp r0, 1 |
0x00015330 str r0, [sp, 0x5c] | var_5ch = r0;
| if (r0 == 1) {
0x00015332 beq.w 0x15ac8 | goto label_86;
| }
| label_39:
0x00015336 cmp r0, 0 |
0x00015338 it ne |
| if (r0 != 0) {
0x0001533a cmnne r0, 0x16 | __asm ("cmnne r0, 0x16");
| }
0x0001533e ite ne |
| if (r0 == 0) {
0x00015340 movne r3, 1 | r3 = 1;
| }
| if (r0 != 0) {
0x00015342 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
| label_32:
0x00015344 cbz r3, 0x15352 | goto label_20;
| }
0x00015346 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00015348 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001534a and r3, r3, 0x380 | r3 &= 0x380;
0x0001534e cmp r3, 0x80 |
0x00015350 bne 0x152f2 |
| } while (r3 != 0x80);
| label_20:
0x00015352 adds r0, 3 | r0 += 3;
| if (r0 == 3) {
0x00015354 beq 0x152f2 | goto label_7;
| }
| label_49:
0x00015356 ldr.w r0, [pc, 0x978] |
0x0001535a movs r3, 3 | r3 = 3;
0x0001535c add r2, sp, 0x5c | r2 += var_5ch;
0x0001535e movw r1, 0xb32 | r1 = 0xb32;
0x00015362 add r0, pc |
0x00015364 add.w r0, r0, 0x260 | r0 = 0x2b298;
0x00015368 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001536c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0001536e ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00015370 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00015372 str r2, [sp, 0x50] | var_50h = r2;
0x00015374 and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x00015378 cmp.w r3, 0x100 |
| if (r3 == 0x100) {
0x0001537c beq.w 0x1582a | goto label_87;
| }
| label_16:
0x00015380 movs r5, 0 | r5 = 0;
| label_17:
0x00015382 ldr.w r6, [pc, 0x950] | r6 = *(0x00015cd4);
0x00015386 movs r2, 3 | r2 = 3;
0x00015388 movw r1, 0xa5d | r1 = 0xa5d;
0x0001538c ldr r0, [sp, 0x18] | r0 = var_18h;
0x0001538e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00015392 add r6, pc | r6 += pc;
0x00015394 mov r0, r4 | r0 = r4;
0x00015396 adds r6, 0x20 | r6 += 0x20;
0x00015398 bl 0x38d8 | fcn_000038d8 (r0);
0x0001539c ldm.w r6, {r2, r3} | r2 = *(r6);
| r3 = *((r6 + 4));
0x000153a0 ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x000153a4 bl 0x393c | fcn_0000393c (r0);
0x000153a8 ldr.w r3, [pc, 0x92c] |
0x000153ac add r3, pc |
0x000153ae ldr r3, [r3] | r3 = *(0x2b088);
0x000153b0 cmp r0, r3 |
0x000153b2 asr.w r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x000153b6 sbcs r1, r2 | __asm ("sbcs r1, r2");
| if (r0 < r3) {
0x000153b8 blt.w 0x1556a | goto label_88;
| }
0x000153bc add r7, sp, 0x38 | r7 += var_38h;
0x000153be mov r0, r7 | r0 = r7;
0x000153c0 bl 0x38d8 | r0 = fcn_000038d8 (r0);
0x000153c4 ldm.w r7, {r0, r1} | r0 = *(r7);
| r1 = *((r7 + 4));
0x000153c8 stm.w r6, {r0, r1} | *(r6) = r0;
| *((r6 + 4)) = r1;
0x000153cc ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x000153d0 bl 0x4a54 | r0 = fcn_00004a54 ();
0x000153d4 ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x000153d8 movs r3, 0 | r3 = 0;
0x000153da movs r2, 1 | r2 = 1;
0x000153dc bl 0x4c50 | fcn_00004c50 (r0, r1, r2, r3);
| label_10:
0x000153e0 ldr.w r0, [pc, 0x8f8] |
0x000153e4 movs r3, 3 | r3 = 3;
0x000153e6 movs r2, 0 | r2 = 0;
0x000153e8 movw r1, 0xa67 | r1 = 0xa67;
0x000153ec add r0, pc |
0x000153ee add.w r0, r0, 0x278 | r0 = 0x2b344;
0x000153f2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000153f6 ldr.w r0, [sb] | r0 = *(sb);
0x000153f8 movs r0, r0 |
0x000153fa blx 0x35b4 | r0 = fcn_000035b4 ();
0x000153fe cmp r0, 0 |
| if (r0 != 0) {
0x00015400 bne.w 0x155fa | goto label_89;
| }
| label_12:
0x00015404 ldr.w r0, [pc, 0x8d8] |
0x00015408 movs r3, 3 | r3 = 3;
0x0001540a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0001540c movw r1, 0xbd5 | r1 = 0xbd5;
0x00015410 add r0, pc |
0x00015412 add.w r0, r0, 0x250 | r0 = 0x2b344;
0x00015416 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001541a ldr.w r0, [sb] | r0 = *(sb);
0x0001541e blx 0x3644 | r0 = fcn_00003644 ();
0x00015422 cmp r0, 0 |
| if (r0 != 0) {
0x00015424 bne.w 0x15578 | goto label_90;
| }
0x00015428 ldr.w r3, [fp] | r3 = *(fp);
0x0001542c cmp r3, 0 |
| if (r3 != 0) {
0x0001542e bne.w 0x15596 | goto label_91;
| }
| label_11:
0x00015432 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00015434 cmp r3, 0 |
| if (r3 != 0) {
0x00015436 beq 0x15514 |
0x00015438 ldr r2, [sp, 8] | r2 = var_8h;
0x0001543a add r1, sp, 0x54 | r1 += var_54h;
0x0001543c ldr.w r3, [pc, 0x878] | r3 = *(0x15cb8);
0x00015440 ldr r6, [r2, r3] | r6 = *((r2 + r3));
0x00015442 ldr.w r2, [pc, 0x8a0] | r2 = *(0x00015ce4);
0x00015446 ldr r0, [r6] | r0 = *(r6);
0x00015448 add r2, pc | r2 += pc;
0x0001544a bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x0001544e cmp r0, 0 |
| if (r0 == 0) {
0x00015450 beq.w 0x158b8 | goto label_92;
| }
0x00015454 ldr r3, [r6] | r3 = *(r6);
0x00015456 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015458 ldr r7, [r3, 8] | r7 = *((r3 + 8));
0x0001545a cmp r7, 0 |
| if (r7 == 0) {
0x0001545c beq.w 0x15a10 | goto label_93;
| }
0x00015460 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00015462 adds r0, r1, 1 | r0 = r1 + 1;
| if (r0 == r1) {
0x00015464 beq.w 0x1569a | goto label_94;
| }
0x00015468 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0001546a ldr r3, [r1, 0x78] | r3 = *((r1 + 0x78));
0x0001546c str r1, [sp, 0x20] | var_20h = r1;
0x0001546e ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00015470 cmp r2, 0 |
0x00015472 str r2, [sp, 0x1c] | var_1ch = r2;
| if (r2 > 0) {
0x00015474 ble 0x154dc |
0x00015476 ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x00015478 cmp r0, 0 |
| if (r0 == 0) {
0x0001547a beq 0x154dc | goto label_27;
| }
0x0001547c ldr r3, [r3] | r3 = *(r3);
0x0001547e ldr.w sl, [r3, 8] | sl = *((r3 + 8));
0x00015482 ldrd r3, r6, [sl, 4] | __asm ("ldrd r3, r6, [sl, 4]");
0x00015486 mov r0, r3 | r0 = r3;
0x00015488 str r3, [sp, 0x24] | var_24h = r3;
0x0001548a blx 0x3258 | unlink (r0);
0x0001548e ldr.w r2, [sl] | r2 = *(sl);
0x00015492 cmp r0, r6 |
0x00015494 it eq |
| if (r0 != r6) {
0x00015496 moveq r6, 0 | r6 = 0;
| }
0x00015498 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0001549a movs r0, 3 | r0 = 3;
0x0001549c str r2, [sp, 0x20] | var_20h = r2;
0x0001549e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000154a0 ldr r3, [r1] | r3 = *(r1);
0x000154a2 mov.w r1, -1 | r1 = -1;
0x000154a6 str r2, [sp] | *(sp) = r2;
0x000154a8 ldr.w r2, [pc, 0x83c] |
0x000154ac add r2, pc | r2 = 0x2b198;
0x000154ae bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000154b2 mov r2, r6 | r2 = r6;
0x000154b4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000154b6 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000154b8 ldr r6, [r7, 0x14] | r6 = *((r7 + 0x14));
0x000154ba ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x000154bc blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000154be cmp r0, 0 |
| if (r0 == 0) {
0x000154c0 beq.w 0x159d2 | goto label_95;
| }
0x000154c4 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000154c6 ldr.w r3, [r0, 0x84] | r3 = *((r0 + 0x84));
| if (r3 != 0) {
0x000154ca cbz r3, 0x154d4 |
0x000154cc mov r1, sl | r1 = sl;
0x000154ce bl 0xaaa8 | fcn_0000aaa8 (r0, r1);
0x000154d2 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
| }
0x000154d4 ldr r0, [r0, 0x78] | r0 = *((r0 + 0x78));
0x000154d6 mov r1, sl | r1 = sl;
0x000154d8 bl 0xd800 | fcn_0000d800 (r0, r1);
| }
| if (r5 != 0) {
| label_27:
0x000154dc cbz r5, 0x1550c |
0x000154de ldrb r3, [r5] | r3 = *(r5);
0x000154e0 and r3, r3, 0xf0 | r3 &= 0xf0;
0x000154e4 cmp r3, 0x20 |
| if (r3 == 0x20) {
0x000154e6 beq.w 0x158d0 | goto label_96;
| }
0x000154ea cmp r3, 0x90 |
0x000154ec itt eq |
| if (r3 != 0x90) {
0x000154ee addeq sl, sp, 0x68 | sl += var_68h;
| }
| if (r3 == 0x90) {
0x000154f2 str.w r8, [sp, 0x68] | __asm ("str.w r8, [var_68h]");
| }
| if (r3 == 0x90) {
0x000154f6 beq 0x15528 | goto label_97;
| }
0x000154f8 cmp r3, 0xb0 |
0x000154fa itt eq |
| if (r3 != 0xb0) {
0x000154fc addeq sl, sp, 0x68 | sl += var_68h;
| }
| if (r3 == 0xb0) {
0x00015500 str.w r8, [sp, 0x68] | __asm ("str.w r8, [var_68h]");
| }
| if (r3 == 0xb0) {
0x00015504 beq 0x15550 | goto label_98;
| }
0x00015506 cmp r3, 0xe0 |
| if (r3 == 0xe0) {
0x00015508 beq.w 0x159e6 | goto label_99;
| }
| }
| label_9:
0x0001550c ldr.w r3, [fp] | r3 = *(fp);
| label_26:
0x00015510 cmp r3, 0 |
| if (r3 != 0) {
0x00015512 bne 0x15596 | goto label_91;
| }
| }
0x00015514 mov.w r5, 0x3e8 | r5 = 0x3e8;
0x00015518 b 0x1514a | goto label_8;
| do {
0x0001551a ldr r3, [sp, 0x68] | r3 = var_68h;
0x0001551c ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0001551e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00015520 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00015522 cmp r2, r3 |
| if (r2 == r3) {
0x00015524 beq.w 0x15d7c | goto label_100;
| }
| label_97:
0x00015528 ldr.w r0, [r7, 0xe4] | r0 = *((r7 + 0xe4));
0x0001552c mov r1, sl | r1 = sl;
0x0001552e bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00015532 cmp r0, 0 |
0x00015534 bne 0x1551a |
| } while (r0 != 0);
0x00015536 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015538 mov r0, r5 | r0 = r5;
0x0001553a ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0001553c bl 0xbda0 | fcn_0000bda0 (r0, r1);
0x00015540 b 0x1550c | goto label_9;
| do {
0x00015542 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00015544 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x00015546 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00015548 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x0001554a cmp r2, r3 |
| if (r2 == r3) {
0x0001554c beq.w 0x15eae | goto label_101;
| }
| label_98:
0x00015550 ldr.w r0, [r7, 0xe4] | r0 = *((r7 + 0xe4));
0x00015554 mov r1, sl | r1 = sl;
0x00015556 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00015558 invalid |
0x0001555c bne 0x15542 |
| } while (r2 != r3);
| label_38:
0x0001555e ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015560 mov r0, r5 | r0 = r5;
0x00015562 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00015564 bl 0xbed0 | fcn_0000bed0 (r0, r1);
0x00015568 b 0x1550c | goto label_9;
| label_88:
0x0001556a movs r3, 0 | r3 = 0;
0x0001556c ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x00015570 mov r2, r3 | r2 = r3;
0x00015572 bl 0x4c50 | fcn_00004c50 (r0, r1, r2, r3);
0x00015576 b 0x153e0 | goto label_10;
| label_90:
0x00015578 blx 0x2f10 | strerror (r0);
0x0001557c ldr.w r2, [pc, 0x76c] |
0x00015580 mov r3, r0 | r3 = r0;
0x00015582 movs r1, 0 | r1 = 0;
0x00015584 movs r0, 5 | r0 = 5;
0x00015586 add r2, pc | r2 = 0x2b276;
0x00015588 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001558c ldr.w r3, [fp] | r3 = *(fp);
0x00015590 cmp r3, 0 |
| if (r3 == 0) {
0x00015592 beq.w 0x15432 | goto label_11;
| }
| label_91:
0x00015596 ldr.w fp, [sp, 8] | fp = var_8h;
| label_74:
0x0001559a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0001559c movs r4, 0 | r4 = 0;
0x0001559e ldr.w r0, [sb] | r0 = *(sb);
0x000155a2 str r4, [r3] | *(r3) = r4;
0x000155a4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000155a6 str r4, [r3] | *(r3) = r4;
0x000155a8 blx 0x35b4 | r0 = fcn_000035b4 ();
0x000155ac cmp r0, 0 |
| if (r0 != 0) {
0x000155ae bne.w 0x15a3a | goto label_102;
| }
| label_29:
0x000155b2 ldr.w r3, [pc, 0x73c] |
0x000155b6 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x000155ba ldr r3, [r3] | r3 = *(0x15cf2);
0x000155bc cmp r3, 0 |
| if (r3 != 0) {
0x000155be bne.w 0x15a2c | goto label_103;
| }
| label_28:
0x000155c2 ldr.w r0, [pc, 0x730] |
0x000155c6 movs r3, 3 | r3 = 3;
0x000155c8 movs r2, 0 | r2 = 0;
0x000155ca movw r1, 0x8e4 | r1 = 0x8e4;
0x000155ce add r0, pc |
0x000155d0 add.w r0, r0, 0x238 | r0 = 0x2b500;
0x000155d4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000155d8 ldr.w r2, [pc, 0x71c] |
0x000155dc ldr.w r3, [pc, 0x6b8] | r3 = *(0x15c98);
0x000155e0 add r2, pc | r2 = 0x2b2dc;
0x000155e2 ldr r3, [r2, r3] | r3 = *(0x2b2dc);
0x000155e4 ldr r2, [r3] | r2 = *(0x2b2dc);
0x000155e6 ldr r3, [sp, 0xd4] | r3 = *(arg_d4h);
0x000155e8 eors r2, r3 | r2 ^= r3;
0x000155ea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000155ee bne.w 0x164dc | goto label_104;
| }
0x000155f2 movs r0, 0 | r0 = 0;
0x000155f4 add sp, 0xdc |
0x000155f6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_89:
0x000155fa blx 0x2f10 | strerror (r0);
0x000155fe ldr.w r2, [pc, 0x6fc] |
0x00015602 mov r3, r0 | r3 = r0;
0x00015604 movs r1, 0 | r1 = 0;
0x00015606 movs r0, 5 | r0 = 5;
0x00015608 add r2, pc | r2 = 0x2b30a;
0x0001560a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001560e b 0x15404 | goto label_12;
| label_77:
0x00015610 blx 0x2f10 | strerror (r0);
0x00015614 ldr.w r2, [pc, 0x6e8] |
0x00015618 mov r3, r0 | r3 = r0;
0x0001561a movs r1, 0 | r1 = 0;
0x0001561c movs r0, 5 | r0 = 5;
0x0001561e add r2, pc | r2 = 0x2b322;
0x00015620 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015624 b 0x151a6 | goto label_13;
| label_75:
0x00015626 blx 0x2f10 | strerror (r0);
0x0001562a ldr.w r2, [pc, 0x6d8] |
0x0001562e mov r3, r0 | r3 = r0;
0x00015630 movs r1, 0 | r1 = 0;
0x00015632 movs r0, 5 | r0 = 5;
0x00015634 add r2, pc | r2 = 0x2b33e;
0x00015636 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001563a b 0x15160 | goto label_14;
| label_76:
0x0001563c ldr r2, [sp, 8] | r2 = var_8h;
0x0001563e add r1, sp, 0x68 | r1 += var_68h;
0x00015640 ldr.w r3, [pc, 0x6c4] | r3 = *(0x15d08);
0x00015644 movs r0, 0 | r0 = 0;
0x00015646 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00015648 ldr r2, [r3] | r2 = *(0x15d08);
0x0001564a add r3, sp, 0x58 | r3 += var_0h;
0x0001564c bl 0x8f84 | fcn_00008f84 (r0, r1, r2, r3);
0x00015650 ldr r3, [sp, 0x58] | r3 = var_0h;
0x00015652 str r0, [sp, 0x54] | var_54h = r0;
0x00015654 str r3, [sp, 0x50] | var_50h = r3;
0x00015656 ldr.w r3, [fp] | r3 = *(fp);
0x0001565a orrs r0, r3 | r0 |= r3;
| if (r0 != r3) {
0x0001565c bne.w 0x15198 | goto label_15;
| }
0x00015660 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00015662 cmp r3, 0 |
| if (r3 > 0) {
0x00015664 bgt 0x1566e | goto label_105;
| }
0x00015666 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00015668 cmp r3, 0 |
| if (r3 <= 0) {
0x0001566a ble.w 0x15198 | goto label_15;
| }
| label_105:
0x0001566e ldr.w r5, [pc, 0x69c] |
0x00015672 movs r2, 3 | r2 = 3;
0x00015674 movs r1, 0x68 | r1 = 0x68;
0x00015676 add r5, pc | r5 = 0x2b388;
0x00015678 adds r5, 0x80 | r5 += 0x80;
0x0001567a mov r0, r5 | r0 = r5;
0x0001567c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00015680 movw r0, 0x86a0 |
0x00015684 movt r0, 1 | r0 = 0x186a0;
0x00015688 blx 0x3174 | pthread_create (r0, r1, r2, r3);
0x0001568c mov r0, r5 | r0 = r5;
0x0001568e movs r3, 3 | r3 = 3;
0x00015690 movs r2, 0 | r2 = 0;
0x00015692 movs r1, 0x6e | r1 = 0x6e;
0x00015694 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00015698 b 0x15198 | goto label_15;
| label_94:
0x0001569a ldr.w r2, [pc, 0x674] |
0x0001569e movs r0, 3 | r0 = 3;
0x000156a0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000156a2 add r2, pc | r2 = 0x2b3b8;
0x000156a4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000156a8 ldr.w r2, [pc, 0x668] |
0x000156ac mov r0, r7 | r0 = r7;
0x000156ae ldr r1, [sp, 0x50] | r1 = var_50h;
0x000156b0 add r2, pc | r2 = 0x2b3c8;
0x000156b2 bl 0x14e9c | fcn_00014e9c (r0, r1, r2, r3, r4, r5);
0x000156b6 b 0x1550c | goto label_9;
| label_78:
0x000156b8 ldr.w r0, [r1, 0x9c] | r0 = *((r1 + 0x9c));
0x000156bc adds r1, 0x1c | r1 += 0x1c;
0x000156be ldr r2, [sp, 0xc] | r2 = var_ch;
0x000156c0 bl 0x5c80 | fcn_00005c80 (r0, r1, r2, r3);
0x000156c4 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000156c6 mov r5, r0 | r5 = r0;
0x000156c8 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000156ca and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x000156ce cmp.w r3, 0x100 |
| if (r3 == 0x100) {
0x000156d2 beq.w 0x1588e | goto label_106;
| }
| label_21:
0x000156d6 cmp r5, 0 |
| if (r5 == 0) {
0x000156d8 beq.w 0x15380 | goto label_16;
| }
0x000156dc ldrb r3, [r5] | r3 = *(r5);
0x000156de and ip, r3, 0xf0 |
0x000156e2 cmp.w ip, 0x30 |
| if (ip == 0x30) {
0x000156e6 beq.w 0x15a64 | goto label_107;
| }
0x000156ea cmp.w ip, 0x60 |
| if (ip == 0x60) {
0x000156ee beq 0x157d6 | goto label_108;
| }
| if (ip < 0x60) {
0x000156f0 bls 0x1570e | goto label_109;
| }
0x000156f2 cmp.w ip, 0x70 |
| if (ip == 0x70) {
0x000156f6 beq.w 0x164e0 | goto label_110;
| }
0x000156fa cmp.w ip, 0xd0 |
| if (ip != 0xd0) {
0x000156fe bne.w 0x15382 | goto label_17;
| }
0x00015702 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00015704 mov r0, r5 | r0 = r5;
0x00015706 bl 0xbc68 | fcn_0000bc68 (r0);
0x0001570a str r0, [sp, 0x50] | var_50h = r0;
0x0001570c b 0x15380 | goto label_16;
| label_109:
0x0001570e and r2, r3, 0xe0 | r2 = r3 & 0xe0;
0x00015712 cmp r2, 0x40 |
| if (r2 != 0x40) {
0x00015714 bne.w 0x15382 | goto label_17;
| }
0x00015718 lsrs r3, r3, 4 | r3 >>= 4;
0x0001571a mov sl, r5 | sl = r5;
0x0001571c strd r8, r8, [r4] | __asm ("strd r8, r8, [r4]");
0x00015720 str r3, [sp, 0x20] | var_20h = r3;
0x00015722 ldr.w r3, [pc, 0x5f4] | r3 = *(0x00015d18);
0x00015726 strd r8, r8, [r4, 8] | __asm ("strd r8, r8, [r4, 8]");
0x0001572a add r3, pc | r3 += pc;
0x0001572c str r3, [sp, 0x1c] | var_1ch = r3;
0x0001572e mov lr, r3 | lr = r3;
0x00015730 ldm.w sl!, {r0, r1, r2, r3} | r0 = *(sl!);
| r1 = *((sl! + 4));
| r2 = *((sl! + 8));
| r3 = *((sl! + 12));
0x00015734 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00015738 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001573a str r1, [sp, 0x24] | var_24h = r1;
0x0001573c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0001573e str r2, [sp, 0x1c] | var_1ch = r2;
0x00015740 ldm.w sl, {r0, r1, r2, r3} | r0 = *(sl);
| r1 = *((sl + 4));
| r2 = *((sl + 8));
| r3 = *((sl + 12));
0x00015744 stm.w lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x00015748 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0001574a cmp r2, 4 |
| if (r2 > 4) {
0x0001574c bgt.w 0x15a72 | goto label_63;
| }
0x00015750 movs r3, 0 | r3 = 0;
0x00015752 str r3, [sp, 0x34] | var_34h = r3;
0x00015754 str r3, [sp, 0x1c] | var_1ch = r3;
| label_30:
0x00015756 cmp.w ip, 0x50 |
| if (ip == 0x50) {
0x0001575a beq.w 0x15f16 | goto label_111;
| }
0x0001575e cmp.w ip, 0x40 |
| if (ip == 0x40) {
0x00015762 beq.w 0x16006 | goto label_112;
| }
| label_31:
0x00015766 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch]");
0x0001576a cmp r2, 5 |
0x0001576c it ne |
| if (r2 == 5) {
0x0001576e orrne r3, r3, 1 | r3 |= 1;
| }
0x00015772 cmp r3, 0 |
| if (r3 == 0) {
0x00015774 beq.w 0x15380 | goto label_16;
| }
0x00015778 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0001577a str.w r8, [sp, 0x64] | __asm ("str.w r8, [var_64h]");
| if (r3 != 0) {
0x0001577e cbz r3, 0x157a0 |
0x00015780 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00015782 mov.w r1, -1 | r1 = -1;
0x00015786 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00015788 movs r0, 3 | r0 = 3;
0x0001578a ldr r3, [r3] | r3 = *(r3);
0x0001578c str r2, [sp] | *(sp) = r2;
0x0001578e ldr.w r2, [pc, 0x58c] |
0x00015792 add r2, pc | r2 = 0x2b4b4;
0x00015794 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015798 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0001579a ldr r0, [r6, 0x24] | r0 = *((r6 + 0x24));
0x0001579c ldr r1, [sp, 0x24] | r1 = var_24h;
0x0001579e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| }
0x000157a0 add r1, sp, 0x64 | r1 += var_64h;
0x000157a2 str r5, [sp, 0x20] | var_20h = r5;
0x000157a4 ldr.w sl, [sp, 0x24] | sl = var_24h;
0x000157a8 mov r5, r1 | r5 = r1;
0x000157aa b 0x157b8 |
| while (r0 != 0) {
0x000157ac ldr r3, [sp, 0x64] | r3 = var_64h;
0x000157ae ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000157b0 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000157b2 cmp sl, r2 |
| if (sl == r2) {
0x000157b4 beq.w 0x15e2c | goto label_113;
| }
0x000157b8 ldr.w r0, [r6, 0xe4] | r0 = *((r6 + 0xe4));
0x000157bc mov r1, r5 | r1 = r5;
0x000157be bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x000157c2 cmp r0, 0 |
0x000157c4 bne 0x157ac |
| }
0x000157c6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000157c8 cmp r3, 4 |
| if (r3 <= 4) {
0x000157ca ble.w 0x15380 | goto label_16;
| }
| label_37:
0x000157ce mov r0, r4 | r0 = r4;
0x000157d0 blx 0x3620 | fcn_00003620 ();
0x000157d4 b 0x15380 | goto label_16;
| label_108:
0x000157d6 mov r0, r5 | r0 = r5;
0x000157d8 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000157da bl 0x4600 | fcn_00004600 (r0, r1);
0x000157de movs r5, 0 | r5 = 0;
0x000157e0 str r0, [sp, 0x50] | var_50h = r0;
0x000157e2 b 0x15382 | goto label_17;
| label_22:
0x000157e4 ldr.w r0, [pc, 0x538] |
0x000157e8 movs r2, 6 | r2 = 6;
0x000157ea ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000157ec add r0, pc | r0 = 0x2b510;
0x000157ee mov r1, r5 | r1 = r5;
0x000157f0 blx 0x3698 | r0 = fcn_00003698 ();
0x000157f4 cmp r0, 0 |
| if (r0 == 0) {
0x000157f6 beq.w 0x1609e | goto label_114;
| }
| label_80:
0x000157fa movw r3, 0x75b | r3 = 0x75b;
0x000157fe mov r5, r3 | r5 = r3;
| label_23:
0x00015800 ldrh.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00015804 and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x00015808 cmp r3, 0x40 |
| if (r3 == 0x40) {
0x0001580a beq.w 0x1527e | goto label_18;
| }
| label_82:
0x0001580e cmp r3, 0x80 |
| if (r3 == 0x80) {
0x00015810 beq.w 0x15304 | goto label_19;
| }
0x00015814 cmp r3, 0xc0 |
| if (r3 == 0xc0) {
0x00015816 beq.w 0x15c56 | goto label_115;
| }
0x0001581a ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0001581c cmp r0, 0 |
0x0001581e it ne |
| if (r0 == 0) {
0x00015820 cmnne r0, 0x16 | __asm ("cmnne r0, 0x16");
| goto label_116;
| }
| if (r0 != 0) {
| label_116:
0x00015824 bne.w 0x152f2 | goto label_7;
| }
0x00015828 b 0x15352 | goto label_20;
| label_87:
0x0001582a adds r2, 1 | r2++;
0x0001582c it eq |
| if (r2 == 1) {
0x0001582e moveq r5, 0 | r5 = 0;
| goto label_117;
| }
| if (r2 != 1) {
| label_117:
0x00015830 bne.w 0x15380 | goto label_16;
| }
| label_24:
0x00015834 ldr.w r2, [pc, 0x4ec] |
0x00015838 mov.w r1, -1 | r1 = -1;
0x0001583c movs r0, 3 | r0 = 3;
0x0001583e add r2, pc | r2 = 0x2b566;
0x00015840 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015844 ldr.w r2, [pc, 0x4e0] |
0x00015848 mov.w r1, -1 | r1 = -1;
0x0001584c mov r0, r6 | r0 = r6;
0x0001584e add r2, pc | r2 = 0x2b57a;
0x00015850 bl 0x14e9c | fcn_00014e9c (r0, r1, r2, r3, r4, r5);
0x00015854 b 0x156d6 | goto label_21;
| label_81:
0x00015856 ldr.w r0, [pc, 0x4d4] |
0x0001585a movs r2, 5 | r2 = 5;
0x0001585c ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0001585e add r0, pc | r0 = 0x2b590;
0x00015860 mov r1, r5 | r1 = r5;
0x00015862 blx 0x3698 | r0 = fcn_00003698 ();
0x00015866 cmp r0, 0 |
| if (r0 == 0) {
0x00015868 beq.w 0x15abc | goto label_118;
| }
0x0001586c ldr.w r0, [pc, 0x4c0] |
0x00015870 movs r2, 6 | r2 = 6;
0x00015872 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00015874 add r0, pc | r0 = 0x2b5a8;
0x00015876 mov r1, r5 | r1 = r5;
0x00015878 blx 0x3698 | r0 = fcn_00003698 ();
0x0001587c cmp r0, 0 |
| if (r0 != 0) {
0x0001587e bne 0x157e4 | goto label_22;
| }
0x00015880 mov r3, r5 | r3 = r5;
0x00015882 adds r3, 6 | r3 += 6;
0x00015884 str r3, [sp, 0x1c] | var_1ch = r3;
0x00015886 movw r3, 0x22b3 | r3 = 0x22b3;
0x0001588a mov r5, r3 | r5 = r3;
0x0001588c b 0x15800 | goto label_23;
| label_106:
0x0001588e ldr r3, [sp, 0x50] | r3 = var_50h;
0x00015890 adds r3, 1 | r3++;
| if (r3 != 1) {
0x00015892 bne.w 0x156d6 | goto label_21;
| }
0x00015896 b 0x15834 | goto label_24;
| label_79:
0x00015898 ldr.w r2, [pc, 0x498] |
0x0001589c mov r1, sl | r1 = sl;
0x0001589e movs r0, 5 | r0 = 5;
0x000158a0 add r2, pc | r2 = 0x2b5d8;
0x000158a2 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000158a6 ldr.w sl, [r6, 0xc] | sl = *((r6 + 0xc));
0x000158aa ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x000158ae cmp r3, 0 |
0x000158b0 it eq |
| if (r3 != 0) {
0x000158b2 moveq r3, 4 | r3 = 4;
| }
0x000158b4 str r3, [r6, 0x78] | *((r6 + 0x78)) = r3;
0x000158b6 b 0x15238 | goto label_25;
| label_92:
0x000158b8 ldr.w r2, [pc, 0x47c] |
0x000158bc mov.w r1, -1 | r1 = -1;
0x000158c0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000158c2 movs r0, 3 | r0 = 3;
0x000158c4 add r2, pc | r2 = 0x2b600;
0x000158c6 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000158ca ldr.w r3, [fp] | r3 = *(fp);
0x000158ce b 0x15510 | goto label_26;
| label_96:
0x000158d0 ldr.w r0, [pc, 0x468] |
0x000158d4 movs r2, 3 | r2 = 3;
0x000158d6 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x000158d8 mov.w r6, -1 | r6 = -1;
0x000158dc movw r1, 0x77c | r1 = 0x77c;
0x000158e0 str r6, [sp, 0x64] | var_64h = r6;
0x000158e2 add r0, pc |
0x000158e4 and r3, r3, 1 | r3 &= 1;
0x000158e8 add.w r0, r0, 0x288 | r0 = 0x2b8aa;
0x000158ec str r3, [sp, 0x1c] | var_1ch = r3;
0x000158ee bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000158f2 ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x000158f4 ldrh r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000158f6 and r3, r3, 0x3c0 | r3 &= 0x3c0;
0x000158fa cmp.w r3, 0x100 |
| if (r3 == 0x100) {
0x000158fe beq.w 0x15f64 | goto label_119;
| }
0x00015900 strh r1, [r6, 0x18] | *((r6 + 0x18)) = r1;
| label_40:
0x00015902 ldr.w r0, [pc, 0x43c] |
0x00015906 movw r1, 0x7a3 | r1 = 0x7a3;
0x0001590a movs r3, 3 | r3 = 3;
0x0001590c add r2, sp, 0x64 | r2 += var_64h;
0x0001590e add r0, pc |
0x00015910 add.w r0, r0, 0x288 | r0 = 0x2b8dc;
0x00015914 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00015918 ldr r1, [sp, 0x64] | r1 = var_64h;
0x0001591a str r1, [sp, 0x50] | var_50h = r1;
0x0001591c cmp r1, 0 |
| if (r1 != 0) {
0x0001591e bne.w 0x15c88 | goto label_120;
| }
0x00015922 ldr.w r3, [r7, 0x108] | r3 = *((r7 + 0x108));
0x00015926 cmp r3, 0 |
| if (r3 > 0) {
0x00015928 ble 0x15948 |
0x0001592a ldr r2, [r7, 0x74] | r2 = *((r7 + 0x74));
0x0001592c cmp r3, r2 |
| if (r3 <= r2) {
0x0001592e ble 0x15948 | goto label_121;
| }
0x00015930 ldr.w r3, [r7, 0x10c] | r3 = *((r7 + 0x10c));
0x00015934 mov.w r1, -1 | r1 = -1;
0x00015938 movs r0, 3 | r0 = 3;
0x0001593a ldr.w r3, [r3, r2, lsl 2] | offset_4 = r2 << 2;
| r3 = *((r3 + offset_4));
0x0001593e ldr.w r2, [pc, 0x404] |
0x00015942 add r2, pc | r2 = 0x2b68c;
0x00015944 bl 0x9a28 | fcn_00009a28 (r0, r1);
| }
| label_121:
0x00015948 ldr r1, [r7, 0x44] | r1 = *((r7 + 0x44));
0x0001594a cmp r1, 0 |
| if (r1 == 0) {
0x0001594c beq.w 0x15b12 | goto label_122;
| }
0x00015950 add r6, sp, 0x80 | r6 += var_80h;
0x00015952 movs r2, 0x38 | r2 = 0x38;
0x00015954 movs r1, 0 | r1 = 0;
0x00015956 mov r0, r6 | r0 = r6;
0x00015958 blx 0x30d8 | fcn_000030d8 ();
0x0001595c ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0001595e mov.w r1, -1 | r1 = -1;
0x00015962 ldr r2, [pc, 0x3e4] |
0x00015964 movs r0, 3 | r0 = 3;
0x00015966 ldr r3, [r3] | r3 = *(r3);
0x00015968 add r2, pc | r2 = 0x2b6b6;
0x0001596a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001596e ldr.w r3, [r7, 0x108] | r3 = *((r7 + 0x108));
0x00015972 cmp r3, 0 |
| if (r3 > 0) {
0x00015974 ble 0x1597e |
0x00015976 ldr r2, [r7, 0x74] | r2 = *((r7 + 0x74));
0x00015978 cmp r3, r2 |
| if (r3 > r2) {
0x0001597a bgt.w 0x160ac | goto label_123;
| }
| }
0x0001597e ldr r3, [r7] | r3 = *(r7);
| label_46:
0x00015980 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00015982 mov r1, r6 | r1 = r6;
0x00015984 str r3, [sp, 0x84] | var_84h = r3;
0x00015986 ldr r3, [r7, 0x78] | r3 = *((r7 + 0x78));
0x00015988 ldr r0, [r7, 0x58] | r0 = *((r7 + 0x58));
0x0001598a strd r3, r2, [sp, 0x88] | __asm ("strd r3, r2, [sp, 0x88]");
0x0001598e ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x00015990 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00015992 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00015994 strd r8, r8, [r7, 0x44] | __asm ("strd r8, r8, [r7, 0x44]");
| if (r3 != 0) {
0x00015998 cbz r3, 0x159bc |
| label_34:
0x0001599a ldr r6, [pc, 0x3b0] |
0x0001599c ldr.w sl, [r7, 0xc] | sl = *((r7 + 0xc));
0x000159a0 add r6, pc | r6 = 0x2b6f2;
| label_44:
0x000159a2 ldr r2, [pc, 0x3ac] |
0x000159a4 mov.w r1, -1 | r1 = -1;
0x000159a8 ldr.w r3, [sl] | r3 = *(sl);
0x000159ac movs r0, 3 | r0 = 3;
0x000159ae add r2, pc | r2 = 0x2b704;
0x000159b0 bl 0x9a28 | r0 = fcn_00009a28 (r0, r1);
0x000159b4 ldrd r3, r0, [r7, 0x28] | __asm ("ldrd r3, r0, [r7, 0x28]");
0x000159b8 mov r1, r6 | r1 = r6;
0x000159ba blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
| }
| label_33:
0x000159bc ldr.w sl, [r7, 0xc] | sl = *((r7 + 0xc));
| label_45:
0x000159c0 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x000159c4 cmp r3, 4 |
| if (r3 > 4) {
0x000159c6 bgt.w 0x15f3e | goto label_124;
| }
| label_36:
0x000159ca mov r0, r5 | r0 = r5;
0x000159cc bl 0x6dbc | fcn_00006dbc (r0);
0x000159d0 b 0x1550c | goto label_9;
| label_95:
0x000159d2 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000159d4 mov.w r1, -1 | r1 = -1;
0x000159d8 ldr r2, [pc, 0x378] |
0x000159da movs r0, 3 | r0 = 3;
0x000159dc ldr r3, [r3] | r3 = *(r3);
0x000159de add r2, pc | r2 = 0x2b736;
0x000159e0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000159e4 b 0x154dc | goto label_27;
| label_99:
0x000159e6 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
| if (r3 != 0) {
0x000159e8 cbz r3, 0x15a08 |
0x000159ea ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000159ec mov.w r1, -1 | r1 = -1;
0x000159f0 ldr r2, [pc, 0x364] |
0x000159f2 movs r0, 3 | r0 = 3;
0x000159f4 ldr r3, [r3] | r3 = *(r3);
0x000159f6 add r2, pc | r2 = 0x2b752;
0x000159f8 bl 0x9a28 | r0 = fcn_00009a28 (r0, r1);
0x000159fc ldrd r3, r0, [r7, 0x30] | __asm ("ldrd r3, r0, [r7, 0x30]");
0x00015a00 add.w r1, r5, 0x10 | r1 = r5 + 0x10;
0x00015a04 ldrb r2, [r5, 8] | r2 = *((r5 + 8));
0x00015a06 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
0x00015a08 mov r0, r5 | r0 = r5;
0x00015a0a bl 0x6138 | fcn_00006138 (r0);
0x00015a0e b 0x1550c | goto label_9;
| label_93:
0x00015a10 ldr r2, [pc, 0x348] |
0x00015a12 mov.w r1, -1 | r1 = -1;
0x00015a16 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00015a18 movs r0, 5 | r0 = 5;
0x00015a1a add r2, pc | r2 = 0x2b77a;
0x00015a1c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015a20 ldr r0, [sp, 0x54] | r0 = var_54h;
0x00015a22 bl 0x8988 | fcn_00008988 (r0);
0x00015a26 ldr.w r3, [fp] | r3 = *(fp);
0x00015a2a b 0x15510 | goto label_26;
| label_103:
0x00015a2c ldr r3, [pc, 0x330] | r3 = *(0x15d60);
0x00015a2e ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x00015a32 ldr r0, [r3] | r0 = *(0x15d60);
0x00015a34 bl 0xb5d4 | fcn_0000b5d4 (r0);
0x00015a38 b 0x155c2 | goto label_28;
| label_102:
0x00015a3a blx 0x2f10 | strerror (r0);
0x00015a3e ldr r2, [pc, 0x324] |
0x00015a40 mov r3, r0 | r3 = r0;
0x00015a42 mov r1, r4 | r1 = r4;
0x00015a44 movs r0, 5 | r0 = 5;
0x00015a46 add r2, pc | r2 = 0x2b7b0;
0x00015a48 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015a4c b 0x155b2 | goto label_29;
| label_107:
0x00015a64 mov r0, r5 | r0 = r5;
0x00015a66 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00015a68 bl 0x3fd8 | fcn_00003fd8 (r0, r1, r2, r3);
0x00015a6c movs r5, 0 | r5 = 0;
0x00015a6e str r0, [sp, 0x50] | var_50h = r0;
0x00015a70 b 0x15382 | goto label_17;
| label_63:
0x00015a72 ldr r3, [pc, 0x2f8] |
0x00015a74 add.w sl, sp, 0x40 | sl += var_40h;
0x00015a78 mov r0, sl | r0 = sl;
0x00015a7a add r3, pc |
0x00015a7c add.w r1, r3, 0x10 | r1 = r3 + 0x10;
0x00015a80 ldrb r7, [r3, 8] | r7 = *((r3 + 8));
0x00015a82 str r3, [sp, 0x1c] | var_1ch = r3;
0x00015a84 blx 0x351c | SSL_CTX_set_ex_data ();
0x00015a88 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00015a8a cmp r7, 0x7f |
0x00015a8c ldrb.w ip, [r5] | ip = *(r5);
0x00015a90 ldr r3, [r3, 0xc] | r3 = *(0x2b7f8);
0x00015a92 and ip, ip, 0xf0 |
0x00015a96 str r3, [sp, 0x34] | var_34h = r3;
0x00015a98 ite le |
| if (r7 > 0x7f) {
0x00015a9a movle r3, 0 | r3 = 0;
| }
| if (r7 <= 0x7f) {
0x00015a9c movgt r3, 1 | r3 = 1;
| }
0x00015a9e cmp.w ip, 0x70 |
0x00015aa2 str r3, [sp, 0x1c] | var_1ch = r3;
0x00015aa4 ldm.w sl, {r0, r1, r2, r3} | r0 = *(sl);
| r1 = *((sl + 4));
| r2 = *((sl + 8));
| r3 = *((sl + 12));
0x00015aa8 stm.w r4, {r0, r1, r2, r3} | *(r4) = r0;
| *((r4 + 4)) = r1;
| *((r4 + 8)) = r2;
| *((r4 + 12)) = r3;
| if (ip != 0x70) {
0x00015aac bne.w 0x15756 | goto label_30;
| }
| label_64:
0x00015ab0 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00015ab2 mov r0, r5 | r0 = r5;
0x00015ab4 bl 0x4874 | fcn_00004874 (r0, r1);
0x00015ab8 str r0, [sp, 0x50] | var_50h = r0;
0x00015aba b 0x15766 | goto label_31;
| label_118:
0x00015abc mov r3, r5 | r3 = r5;
0x00015abe adds r3, 5 | r3 += 5;
0x00015ac0 str r3, [sp, 0x1c] | var_1ch = r3;
0x00015ac2 movs r3, 0x50 | r3 = 0x50;
0x00015ac4 mov r5, r3 | r5 = r3;
0x00015ac6 b 0x15800 | goto label_23;
| label_86:
0x00015ac8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00015aca ldrb r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00015acc lsls r5, r2, 0x1f | r5 = r2 << 0x1f;
| if (r5 >= r2) {
0x00015ace bmi 0x15ada |
0x00015ad0 ldr.w r2, [r3, 0xb0] | r2 = *((r3 + 0xb0));
0x00015ad4 cmp r2, 0 |
| if (r2 == 0) {
0x00015ad6 beq.w 0x1630e | goto label_125;
| }
| }
| label_58:
0x00015ada ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00015adc cmp r2, 0 |
| if (r2 == 0) {
0x00015ade beq.w 0x15f22 | goto label_126;
| }
0x00015ae2 ldrh r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00015ae4 movs r0, 3 | r0 = 3;
0x00015ae6 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00015ae8 bfi r2, r0, 6, 4 | value_5 = BIT_MASK (6, 4);
| value_6 = r0 & value_5;
| value_5 = ~value_5;
| r2 &= value_5;
| r2 |= value_6;
0x00015aec add.w r0, r3, 0x1c | r0 = r3 + 0x1c;
0x00015af0 strh r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| label_41:
0x00015af2 bl 0xe808 | r0 = fcn_0000e808 (r0, r1);
0x00015af6 cmp r0, 0 |
0x00015af8 it ne |
| if (r0 != 0) {
0x00015afa cmnne r0, 0x16 | __asm ("cmnne r0, 0x16");
| }
0x00015afe str r0, [sp, 0x5c] | var_5ch = r0;
0x00015b00 ite ne |
| if (r0 == 0) {
0x00015b02 movne r3, 1 | r3 = 1;
| }
| if (r0 != 0) {
0x00015b04 moveq r3, 0 | r3 = 0;
| }
0x00015b06 b 0x15344 | goto label_32;
| label_83:
0x00015b08 adds.w r3, r0, 0x16 | r3 = r0 + 0x16;
0x00015b0c it ne |
| if (r3 == r0) {
0x00015b0e movne r3, 1 | r3 = 1;
| }
0x00015b10 b 0x15344 | goto label_32;
| label_122:
0x00015b12 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x00015b14 ldr.w sl, [r7, 0xc] | sl = *((r7 + 0xc));
0x00015b18 cmp r3, 0 |
| if (r3 == 0) {
0x00015b1a beq.w 0x1608e | goto label_127;
| }
0x00015b1c strh r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
0x00015b1e movs r2, 0x50 | r2 = 0x50;
0x00015b20 add r0, sp, 0x84 | r0 += var_84h;
0x00015b22 blx 0x30d8 | fcn_000030d8 ();
0x00015b26 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00015b28 mov.w r1, -1 | r1 = -1;
0x00015b2c ldr r2, [pc, 0x240] |
0x00015b2e movs r0, 3 | r0 = 3;
0x00015b30 str r3, [sp, 0x80] | var_80h = r3;
0x00015b32 add r2, pc | r2 = 0x2b8a6;
0x00015b34 ldr.w r3, [sl] | r3 = *(sl);
0x00015b38 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015b3c ldr.w r3, [r7, 0x108] | r3 = *((r7 + 0x108));
0x00015b40 add.w ip, sp, 0x90 |
0x00015b44 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00015b46 ldr r6, [r7, 0x4c] | r6 = *((r7 + 0x4c));
0x00015b48 cmp r3, 0 |
0x00015b4a ittet gt |
| if (r3 <= 0) {
0x00015b4c ldrgt r2, [r7, 0x74] | r2 = *((r7 + 0x74));
| }
| if (r3 <= 0) {
0x00015b4e ldrgt r3, [r7, 0x10c] | r3 = *((r7 + 0x10c));
| }
| if (r3 <= 0) {
0x00015b52 ldrgt r3, [r7] | r3 = *(r7);
| }
| if (r3 > 0) {
0x00015b54 ldr.w r3, [r3, r2, lsl 2] | offset_7 = r2 << 2;
| r3 = *((r3 + offset_7));
| }
0x00015b58 ldr r2, [r7, 0x78] | r2 = *((r7 + 0x78));
0x00015b5a str r3, [sp, 0xa0] | var_a0h = r3;
0x00015b5c add.w r3, r5, 0x10 | r3 = r5 + 0x10;
0x00015b60 strd r2, r1, [sp, 0xa4] | __asm ("strd r2, r1, [sp, 0xa4]");
0x00015b64 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00015b66 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00015b68 movs r7, r1 | r7 = r1;
0x00015b6a add r1, sp, 0x80 | r1 += var_80h;
0x00015b6c ldrb r3, [r5, 8] | r3 = *((r5 + 8));
0x00015b6e ldr r0, [r7, 0x58] | r0 = *((r7 + 0x58));
0x00015b70 str r3, [sp, 0x8c] | var_8ch = r3;
0x00015b72 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00015b74 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00015b76 strd r8, r8, [r7, 0x4c] | __asm ("strd r8, r8, [r7, 0x4c]");
0x00015b7a cmp r3, 0 |
| if (r3 == 0) {
0x00015b7c beq.w 0x159bc | goto label_33;
| }
0x00015b80 b 0x1599a | goto label_34;
| label_85:
0x00015b82 mov r3, r5 | r3 = r5;
0x00015b84 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00015b86 movs r2, 0 | r2 = 0;
0x00015b88 mov r1, r4 | r1 = r4;
0x00015b8a mov r0, r5 | r0 = r5;
0x00015b8c bl 0xb70c | r0 = fcn_0000b70c (r0, r1, r2, r3);
0x00015b90 mov r3, r0 | r3 = r0;
0x00015b92 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x00015b94 mov r2, r5 | r2 = r5;
0x00015b96 ldr.w r1, [r0, 0xac] | r1 = *((r0 + 0xac));
0x00015b9a adds r0, 0x1c | r0 += 0x1c;
0x00015b9c bl 0x185a4 | r0 = fcn_000185a4 (r0, r1, r2, r3);
0x00015ba0 cmp r0, 0 |
| if (r0 == 0) {
0x00015ba2 beq.w 0x16124 | goto label_128;
| }
0x00015ba6 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00015ba8 ldr.w r1, [r3, 0xb0] | r1 = *((r3 + 0xb0));
| if (r1 != 0) {
0x00015bac cbz r1, 0x15bca |
0x00015bae ldr r0, [r3, 0x38] | r0 = *((r3 + 0x38));
0x00015bb0 blx 0x327c | r0 = SHA1_Final ();
0x00015bb4 cmp r0, 1 |
0x00015bb6 str r0, [sp, 0x5c] | var_5ch = r0;
| if (r0 != 1) {
0x00015bb8 beq 0x15bc8 |
0x00015bba ldr r2, [pc, 0x1b8] |
0x00015bbc mov.w r1, -1 | r1 = -1;
0x00015bbe adds r1, 0xff | r1 += 0xff;
0x00015bc0 movs r0, 3 | r0 = 3;
0x00015bc2 add r2, pc | r2 = 0x2b93c;
0x00015bc4 bl 0x9a28 | fcn_00009a28 (r0, r1);
| }
0x00015bc8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| }
0x00015bca ldr.w r2, [r3, 0xac] | r2 = *((r3 + 0xac));
0x00015bce ldr r0, [r3, 0x38] | r0 = *((r3 + 0x38));
0x00015bd0 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00015bd2 ldr r5, [r2, 4] | r5 = *((r2 + 4));
0x00015bd4 ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x00015bd6 cmp r5, 2 |
0x00015bd8 itett gt |
| if (r5 <= 2) {
0x00015bda ldrgt r5, [r2, 0x30] | r5 = *((r2 + 0x30));
| }
| if (r5 <= 2) {
0x00015bdc strdle r8, r8, [sp] | __asm ("strdle r8, r8, [sp]");
| }
| if (r5 <= 2) {
0x00015be0 strgt r5, [sp, 4] | var_4h = r5;
| }
| if (r5 > 2) {
0x00015be2 ldr r2, [r2, 0x2c] | r2 = *((r2 + 0x2c));
| }
0x00015be4 it gt |
| if (r5 <= 2) {
0x00015be6 strgt r2, [sp] | *(sp) = r2;
| }
0x00015be8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00015bea bl 0x18764 | r0 = fcn_00018764 (r0, r1, r2, r3, r4, r5);
0x00015bee cmn.w r0, 0x16 |
0x00015bf2 str r0, [sp, 0x5c] | var_5ch = r0;
| if (r0 == 0x16) {
0x00015bf4 beq.w 0x16362 | goto label_129;
| }
0x00015bf8 adds r1, r0, 3 | r1 = r0 + 3;
| if (r1 == r0) {
0x00015bfa beq.w 0x16124 | goto label_128;
| }
0x00015bfe subs r3, r0, 0 | r3 = r0 - 0;
0x00015c00 it ne |
| if (r3 == r0) {
0x00015c02 movne r3, 1 | r3 = 1;
| }
0x00015c04 cmp r0, 1 |
| if (r0 != 1) {
0x00015c06 bne.w 0x15344 | goto label_32;
| }
0x00015c0a ldrd r3, r0, [r6, 8] | __asm ("ldrd r3, r0, [r6, 8]");
0x00015c0e cmp r3, 0 |
| if (r3 == 0) {
0x00015c10 beq.w 0x16108 | goto label_130;
| }
0x00015c14 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00015c16 movs r2, 3 | r2 = 3;
0x00015c18 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00015c1a adds r0, 0x1c | r0 += 0x1c;
0x00015c1c bfi r3, r2, 6, 4 | value_8 = BIT_MASK (6, 4);
| value_9 = r2 & value_8;
| value_8 = ~value_8;
| r3 &= value_8;
| r3 |= value_9;
0x00015c20 strh r3, [r0, -0xc] | *((r0 - 0xc)) = r3;
0x00015c24 bl 0xe808 | fcn_0000e808 (r0, r1);
0x00015c28 str r0, [sp, 0x5c] | var_5ch = r0;
0x00015c2a adds r0, 1 | r0++;
| if (r0 == 1) {
0x00015c2c beq.w 0x152e6 | goto label_35;
| }
| label_48:
0x00015c30 ldr r5, [r6, 0xc] | r5 = *((r6 + 0xc));
0x00015c32 ldrb r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00015c34 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 >= r3) {
0x00015c36 bmi 0x15c42 |
0x00015c38 ldr.w r3, [r5, 0xb0] | r3 = *((r5 + 0xb0));
0x00015c3c cmp r3, 0 |
| if (r3 == 0) {
0x00015c3e beq.w 0x164ce | goto label_131;
| }
| }
| label_62:
0x00015c42 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x00015c44 cmp r0, 0 |
0x00015c46 it ne |
| if (r0 != 0) {
0x00015c48 cmnne r0, 0x16 | __asm ("cmnne r0, 0x16");
| }
0x00015c4c ite ne |
| if (r0 == 0) {
0x00015c4e movne r3, 1 | r3 = 1;
| }
| if (r0 != 0) {
0x00015c50 moveq r3, 0 | r3 = 0;
| }
0x00015c52 b.w 0x15344 | goto label_32;
| label_115:
0x00015c56 add.w r0, sl, 0x1c | r0 = sl + 0x1c;
0x00015c5a bl 0xf5a4 | r0 = fcn_0000f5a4 (r0);
0x00015c5e adds.w r3, r0, 0x16 | r3 = r0 + 0x16;
0x00015c62 str r0, [sp, 0x5c] | var_5ch = r0;
0x00015c64 it ne |
| if (r3 == r0) {
0x00015c66 movne r3, 1 | r3 = 1;
| }
0x00015c68 cmp.w r0, -1 |
0x00015c6a subs r7, 0xff | r7 -= 0xff;
0x00015c6c ite eq |
| if (r7 != 0xff) {
0x00015c6e moveq r2, 0 | r2 = 0;
| }
| if (r7 == 0xff) {
0x00015c70 andne r2, r3, 1 | r2 = r3 & 1;
| }
0x00015c74 cmp r2, 0 |
| if (r2 != 0) {
0x00015c76 bne.w 0x1604c | goto label_132;
| }
0x00015c7a cmp r0, 0 |
0x00015c7c ite eq |
| if (r0 != 0) {
0x00015c7e moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x00015c80 andne r3, r3, 1 | r3 &= 1;
| }
0x00015c84 b.w 0x15344 | goto label_32;
| label_120:
0x00015c88 ldr r2, [pc, 0xec] |
0x00015c8a mov r0, r7 | r0 = r7;
0x00015c8c add r2, pc | r2 = 0x2ba08;
0x00015c8e bl 0x14e9c | fcn_00014e9c (r0, r1, r2, r3, r4, r5);
0x00015c92 b 0x159ca | goto label_36;
| label_100:
0x00015d7c ldr.w r0, [r7, 0xe4] | r0 = *((r7 + 0xe4));
0x00015d80 mov r1, r6 | r1 = r6;
0x00015d82 bl 0xd778 | r0 = fcn_0000d778 (r0, r1);
0x00015d86 cmp r0, 0 |
| if (r0 == 0) {
0x00015d88 beq.w 0x1624e | goto label_133;
| }
| label_53:
0x00015d8c ldr.w sl, [r7, 0xc] | sl = *((r7 + 0xc));
0x00015d90 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00015d92 ldr.w r1, [sl, 0x9c] | r1 = *((sl + 0x9c));
0x00015d96 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00015d98 cmp r1, 4 |
| if (r1 <= 4) {
0x00015d9a ble.w 0x1605a | goto label_134;
| }
0x00015d9e cmp r2, 1 |
| if (r2 == 1) {
0x00015da0 beq.w 0x16154 | goto label_135;
| }
0x00015da4 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
| if (r1 != 0) {
0x00015da6 cbz r1, 0x15e08 |
0x00015da8 ldr r3, [r3] | r3 = *(r3);
0x00015daa cmp r2, 1 |
0x00015dac ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015dae ldr r3, [r3] | r3 = *(r3);
0x00015db0 str r2, [sp, 0xa0] | var_a0h = r2;
0x00015db2 str r3, [sp, 0x8c] | var_8ch = r3;
| if (r2 <= 1) {
0x00015db4 ble.w 0x1632e | goto label_136;
| }
0x00015db8 ldr.w r0, [pc, 0x760] |
0x00015dbc lsls r2, r2, 2 | r2 <<= 2;
0x00015dbe movw r1, 0x862 | r1 = 0x862;
0x00015dc2 str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x00015dc6 add r0, pc | r0 = 0x2c2e6;
0x00015dc8 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00015dcc str r0, [sp, 0x1c] | var_1ch = r0;
0x00015dce str r0, [sp, 0xa4] | var_4ch = r0;
0x00015dd0 cmp r0, 0 |
| if (r0 != 0) {
0x00015dd2 bne.w 0x163fa | goto label_137;
| }
0x00015dd6 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00015dd8 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x00015ddc ldr.w lr, [r7, 0xc] |
0x00015de0 add.w ip, sp, 0x90 |
0x00015de4 str r2, [sp, 0x88] | var_88h = r2;
0x00015de6 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00015de8 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00015dec ldr.w r2, [pc, 0x730] |
0x00015dee movs r7, 0x30 | r7 = 0x30;
0x00015df0 ldr.w r3, [lr] | r3 = *(lr);
0x00015df4 add r2, pc | r2 = 0x2c318;
| label_59:
0x00015df6 mov.w r1, -1 | r1 = -1;
0x00015dfa movs r0, 3 | r0 = 3;
0x00015dfc bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015e00 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00015e02 add r1, sp, 0x80 | r1 += var_80h;
0x00015e04 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00015e06 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| }
| label_43:
0x00015e08 mov r0, r6 | r0 = r6;
0x00015e0a bl 0x12dec | fcn_00012dec (r0);
0x00015e0e ldr.w r0, [pc, 0x714] |
0x00015e12 mov r2, r6 | r2 = r6;
0x00015e14 movw r1, 0x422 | r1 = 0x422;
0x00015e18 add r0, pc | r0 = 0x2c342;
0x00015e1a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00015e1e ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015e20 mov r0, r5 | r0 = r5;
0x00015e22 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00015e24 bl 0xbda0 | fcn_0000bda0 (r0, r1);
0x00015e28 b.w 0x1550c | goto label_9;
| label_113:
0x00015e2c ldr.w r0, [r6, 0xe4] | r0 = *((r6 + 0xe4));
0x00015e30 mov r1, r3 | r1 = r3;
0x00015e32 ldr r5, [sp, 0x20] | r5 = var_20h;
0x00015e34 mov sl, r3 | sl = r3;
0x00015e36 bl 0xd778 | r0 = fcn_0000d778 (r0, r1);
0x00015e3a cmp r0, 0 |
| if (r0 == 0) {
0x00015e3c beq.w 0x1625e | goto label_138;
| }
0x00015e3e strh r7, [r1, 0x10] | *((r1 + 0x10)) = r7;
| label_54:
0x00015e40 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x00015e44 cmp r1, 0 |
| if (r1 == 0) {
0x00015e46 beq.w 0x161d2 | goto label_139;
| }
0x00015e4a ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00015e4c mov.w r1, -1 | r1 = -1;
0x00015e50 ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x00015e54 movs r0, 3 | r0 = 3;
0x00015e56 ldr r3, [r3] | r3 = *(r3);
0x00015e58 str r2, [sp, 0x80] | var_80h = r2;
0x00015e5a ldr.w r2, [sl, 0x34] | r2 = *((sl + 0x34));
0x00015e5e str r2, [sp, 0xb4] | var_b4h = r2;
0x00015e60 ldr.w r2, [sl, 0x3c] | r2 = *((sl + 0x3c));
0x00015e64 str r2, [sp, 0x90] | var_90h = r2;
0x00015e66 ldr.w r2, [sl, 0x38] | r2 = *((sl + 0x38));
0x00015e6a str r2, [sp, 0x8c] | var_8ch = r2;
0x00015e6c ldr.w r2, [sl, 0x40] | r2 = *((sl + 0x40));
0x00015e70 str r2, [sp, 0x94] | var_94h = r2;
0x00015e72 ldr.w r2, [sl, 0x44] | r2 = *((sl + 0x44));
0x00015e76 str r2, [sp, 0x98] | var_98h = r2;
0x00015e78 ldr.w r2, [pc, 0x6ac] |
0x00015e7c add r2, pc | r2 = 0x2c3a8;
0x00015e7e bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015e82 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00015e86 add r1, sp, 0x80 | r1 += var_80h;
0x00015e88 ldr.w r0, [sl, 0x18] | r0 = *((sl + 0x18));
0x00015e8c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_52:
0x00015e8e mov r0, sl | r0 = sl;
0x00015e90 bl 0x12dec | fcn_00012dec (r0);
0x00015e94 ldr.w r0, [pc, 0x694] |
0x00015e98 mov r2, sl | r2 = sl;
0x00015e9a movw r1, 0x422 | r1 = 0x422;
0x00015e9e add r0, pc | r0 = 0x2c3ce;
0x00015ea0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00015ea2 invalid |
0x00015ea6 cmp r3, 4 |
| if (r3 <= 4) {
0x00015ea8 ble.w 0x15380 | goto label_16;
| }
0x00015eac b 0x157ce | goto label_37;
| label_101:
0x00015eae ldr.w r0, [r7, 0xe4] | r0 = *((r7 + 0xe4));
0x00015eb2 mov r1, r6 | r1 = r6;
0x00015eb4 bl 0xd778 | r0 = fcn_0000d778 (r0, r1);
0x00015eb8 cmp r0, 0 |
| if (r0 == 0) {
0x00015eba beq.w 0x1626e | goto label_140;
| }
| label_55:
0x00015ebe ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00015ec0 cmp r3, 0 |
| if (r3 == 0) {
0x00015ec2 beq.w 0x161c8 | goto label_141;
| }
| label_51:
0x00015ec6 ldr.w sl, [pc, 0x668] |
0x00015eca mov.w r1, -1 | r1 = -1;
0x00015ece ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015ed0 movs r0, 3 | r0 = 3;
0x00015ed2 add sl, pc | sl = 0x2c408;
0x00015ed4 ldr r3, [r3] | r3 = *(r3);
0x00015ed6 mov r2, sl | r2 = sl;
0x00015ed8 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015edc ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00015ede cmp r1, 0 |
| if (r1 == 0) {
0x00015ee0 beq.w 0x160b6 | goto label_142;
| }
0x00015ee4 add r3, sp, 0x80 | r3 += var_80h;
0x00015ee6 movs r1, 0 | r1 = 0;
0x00015ee8 mov r0, r3 | r0 = r3;
0x00015eea movs r2, 0x38 | r2 = 0x38;
0x00015eec blx 0x30d8 | fcn_000030d8 ();
0x00015ef0 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00015ef2 mov r1, r0 | r1 = r0;
0x00015ef4 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00015ef6 str r3, [sp, 0x80] | var_80h = r3;
0x00015ef8 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00015efa blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_47:
0x00015efc mov r0, r6 | r0 = r6;
0x00015efe bl 0x12dec | fcn_00012dec (r0);
0x00015f02 ldr.w r0, [pc, 0x630] |
0x00015f06 mov r2, r6 | r2 = r6;
0x00015f08 movw r1, 0x422 | r1 = 0x422;
0x00015f0c add r0, pc | r0 = 0x2c446;
0x00015f0e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00015f12 b.w 0x1555e | goto label_38;
| label_111:
0x00015f16 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00015f18 mov r0, r5 | r0 = r5;
0x00015f1a bl 0x43f4 | fcn_000043f4 (r0, r1, r2, r3);
0x00015f1e str r0, [sp, 0x50] | var_50h = r0;
0x00015f20 b 0x15766 | goto label_31;
| label_126:
0x00015f22 ldrh r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00015f24 movs r1, 4 | r1 = 4;
0x00015f26 mov r0, r3 | r0 = r3;
0x00015f28 bfi r2, r1, 6, 4 | value_10 = BIT_MASK (6, 4);
| value_11 = r1 & value_10;
| value_10 = ~value_10;
| r2 &= value_10;
| r2 |= value_11;
0x00015f2c strh r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| label_42:
0x00015f2e ldrd r2, r3, [r6, 0x12c] | __asm ("ldrd r2, r3, [r6, 0x12c]");
0x00015f32 ldr r1, [r6, 0x78] | r1 = *((r6 + 0x78));
0x00015f34 bl 0x69f8 | fcn_000069f8 (r0, r1, r2, r3);
0x00015f38 str r0, [sp, 0x5c] | var_5ch = r0;
0x00015f3a b.w 0x15336 | goto label_39;
| label_124:
0x00015f3e add.w r6, r5, 0x10 | r6 = r5 + 0x10;
0x00015f42 movs r1, 0x21 | r1 = 0x21;
0x00015f44 mov r0, r6 | r0 = r6;
0x00015f46 blx 0x3230 | r0 = fcn_00003230 ();
0x00015f4a cmp r0, 0 |
| if (r0 == 0) {
0x00015f4c beq.w 0x159ca | goto label_36;
| }
0x00015f50 mov r0, r6 | r0 = r6;
0x00015f52 movs r1, 0x21 | r1 = 0x21;
0x00015f54 blx 0x3004 | fcn_00003004 ();
0x00015f58 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015f5a ldr r2, [r3, 0x68] | r2 = *((r3 + 0x68));
0x00015f5c cmp r2, r0 |
0x00015f5e it gt |
| if (r2 <= r0) {
0x00015f60 strgt r0, [r3, 0x68] | *((r3 + 0x68)) = r0;
| }
0x00015f62 b 0x159ca | goto label_36;
| label_119:
0x00015f64 ldrb r1, [r5, 8] | r1 = *((r5 + 8));
0x00015f66 movs r0, 4 | r0 = 4;
0x00015f68 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00015f6a str r1, [sp, 4] | var_4h = r1;
0x00015f6c movs r1, 1 | r1 = 1;
0x00015f6e ldr r2, [r2] | r2 = *(r2);
0x00015f70 str r2, [sp] | *(sp) = r2;
0x00015f72 movs r2, 0 | r2 = 0;
0x00015f74 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015f78 ldrb r3, [r5, 8] | r3 = *((r5 + 8));
0x00015f7a str r3, [sp, 0x64] | var_64h = r3;
0x00015f7c cmp r3, 0 |
| if (r3 != 0) {
0x00015f7e bne 0x15ff2 | goto label_143;
| }
0x00015f80 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x00015f82 str.w r3, [r7, 0x124] | __asm ("str.w r3, [r7, 0x124]");
0x00015f86 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00015f88 bic r3, r3, 0x3cc | r3 = BIT_MASK (r3, 0x3cc);
0x00015f8c orr r3, r3, 0xc | r3 |= 0xc;
0x00015f90 lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
0x00015f92 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| if (r1 != r3) {
0x00015f94 bne.w 0x16304 | goto label_144;
| }
0x00015f98 ldr.w r3, [r0, 0x9c] | r3 = *((r0 + 0x9c));
0x00015f9c cmp r3, 3 |
| if (r3 > 3) {
0x00015f9e ble 0x15fa8 |
0x00015fa0 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x00015fa2 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 >= r3) {
0x00015fa4 bpl.w 0x162f6 | goto label_145;
| }
| }
| label_57:
0x00015fa8 ldr r0, [r0, 0x74] | r0 = *((r0 + 0x74));
0x00015faa ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00015fac cmp r3, 0 |
| if (r3 <= 0) {
0x00015fae ble 0x15ff2 | goto label_143;
| }
0x00015fb0 add.w sl, sp, 0x68 | sl += var_68h;
0x00015fb4 str.w r8, [sp, 0x68] | __asm ("str.w r8, [var_68h]");
0x00015fb8 strd r8, r8, [sp, 0x70] | __asm ("strd r8, r8, [sp, 0x70]");
0x00015fbc b 0x15fce |
| while (r0 != 0) {
0x00015fbe ldr r3, [sp, 0x68] | r3 = var_68h;
0x00015fc0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015fc2 str.w r8, [r3, 0x24] | __asm ("str.w r8, [r3, 0x24]");
0x00015fc6 str.w r8, [r3, 0x28] | __asm ("str.w r8, [r3, 0x28]");
0x00015fca ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015fcc ldr r0, [r3, 0x74] | r0 = *((r3 + 0x74));
0x00015fce mov r1, sl | r1 = sl;
0x00015fd0 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00015fd4 cmp r0, 0 |
0x00015fd6 bne 0x15fbe |
| }
0x00015fd8 movs r3, 1 | r3 = 1;
0x00015fda ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x00015fde mov r2, r3 | r2 = r3;
0x00015fe0 bl 0x4c50 | fcn_00004c50 (r0, r1, r2, r3);
0x00015fe4 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00015fe6 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00015fe8 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x00015fea itt pl |
| if (r3 < r3) {
0x00015fec mvnpl r3, 2 | r3 = ~2;
| }
| if (r3 >= r3) {
0x00015ff0 str r3, [sp, 0x64] | var_64h = r3;
| }
| label_143:
0x00015ff2 ldr r2, [sp, 8] | r2 = var_8h;
0x00015ff4 ldr.w r3, [pc, 0x540] | r3 = *(0x16538);
0x00015ff8 str.w r8, [r7, 0xec] | __asm ("str.w r8, [r7, 0xec]");
0x00015ffc ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00015ffe ldr r0, [r3] | r0 = *(0x16538);
0x00016000 bl 0xb5d4 | fcn_0000b5d4 (r0);
0x00016004 b 0x15902 | goto label_40;
| label_112:
0x00016006 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00016008 mov r0, r5 | r0 = r5;
0x0001600a bl 0x4270 | fcn_00004270 (r0, r1, r2, r3);
0x0001600e str r0, [sp, 0x50] | var_50h = r0;
0x00016010 b.w 0x15766 | goto label_31;
| label_84:
0x00016014 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| if (r3 == 0) {
0x00016016 cbz r3, 0x16050 | goto label_146;
| }
0x00016018 ldr r3, [r0, 0x48] | r3 = *((r0 + 0x48));
| if (r3 == 0) {
0x0001601a cbz r3, 0x1603a | goto label_147;
| }
0x0001601c ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0001601e movs r2, 5 | r2 = 5;
0x00016020 adds r0, 0x1c | r0 += 0x1c;
0x00016022 bfi r3, r2, 6, 4 | value_12 = BIT_MASK (6, 4);
| value_13 = r2 & value_12;
| value_12 = ~value_12;
| r3 &= value_12;
| r3 |= value_13;
0x00016026 strh r3, [r0, -0xc] | *((r0 - 0xc)) = r3;
0x0001602a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0001602c bl 0xf86c | fcn_0000f86c (r0, r1, r2, r3, r4);
0x00016030 str r0, [sp, 0x5c] | var_5ch = r0;
0x00016032 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00016034 beq.w 0x152e6 | goto label_35;
| }
0x00016038 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| label_147:
0x0001603a ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0001603c movs r2, 3 | r2 = 3;
0x0001603e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00016040 adds r0, 0x1c | r0 += 0x1c;
0x00016042 bfi r3, r2, 6, 4 | value_14 = BIT_MASK (6, 4);
| value_15 = r2 & value_14;
| value_14 = ~value_14;
| r3 &= value_14;
| r3 |= value_15;
0x00016046 strh r3, [r0, -0xc] | *((r0 - 0xc)) = r3;
0x0001604a b 0x15af2 | goto label_41;
| label_132:
0x0001604c ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0001604e movs r2, 4 | r2 = 4;
| label_146:
0x00016050 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00016052 bfi r3, r2, 6, 4 | value_16 = BIT_MASK (6, 4);
| value_17 = r2 & value_16;
| value_16 = ~value_16;
| r3 &= value_16;
| r3 |= value_17;
0x00016056 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00016058 b 0x15f2e | goto label_42;
| label_134:
0x0001605a cmp r2, 1 |
| if (r2 == 1) {
0x0001605c beq 0x1613c | goto label_148;
| }
0x0001605e ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00016060 cmp r3, 0 |
| if (r3 == 0) {
0x00016062 beq.w 0x15e08 | goto label_43;
| }
0x00016066 cmp r2, 1 |
| if (r2 > 1) {
0x00016068 bgt.w 0x163d2 | goto label_149;
| }
| label_50:
0x0001606c ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x0001606e ldr.w r3, [sl] | r3 = *(sl);
0x00016072 str r2, [sp, 0x80] | var_80h = r2;
0x00016074 ldr.w r2, [pc, 0x4c4] |
0x00016078 add r2, pc | r2 = 0x2c5b8;
| label_61:
0x0001607a mov.w r1, -1 | r1 = -1;
0x0001607e movs r0, 3 | r0 = 3;
0x00016080 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00016084 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00016086 add r1, sp, 0x80 | r1 += var_80h;
0x00016088 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x0001608a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001608c b 0x15e08 | goto label_43;
| label_127:
0x0001608e ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00016090 ldr.w r6, [pc, 0x4ac] |
0x00016094 add r6, pc | r6 = 0x2c5d8;
0x00016096 cmp r3, 0 |
| if (r3 != 0) {
0x00016098 bne.w 0x159a2 | goto label_44;
| }
0x0001609c b 0x159c0 | goto label_45;
| label_114:
0x0001609e mov r3, r5 | r3 = r5;
0x000160a0 adds r3, 6 | r3 += 6;
0x000160a2 str r3, [sp, 0x1c] | var_1ch = r3;
0x000160a4 movs r3, 0x50 | r3 = 0x50;
0x000160a6 mov r5, r3 | r5 = r3;
0x000160a8 b.w 0x15800 | goto label_23;
| label_123:
0x000160ac ldr.w r3, [r7, 0x10c] | r3 = *((r7 + 0x10c));
0x000160b0 ldr.w r3, [r3, r2, lsl 2] | offset_18 = r2 << 2;
| r3 = *((r3 + offset_18));
0x000160b4 b 0x15980 | goto label_46;
| label_142:
0x000160b6 movs r2, 0x50 | r2 = 0x50;
0x000160b8 add r0, sp, 0x84 | r0 += var_84h;
0x000160ba str r1, [sp, 0x1c] | var_1ch = r1;
0x000160bc blx 0x30d8 | fcn_000030d8 ();
0x000160c0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000160c2 str r3, [sp, 0x80] | var_80h = r3;
0x000160c4 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000160c6 ldr r0, [r3] | r0 = *(r3);
0x000160c8 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000160ca ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000160cc cmp r2, 1 |
0x000160ce ldr r3, [r3] | r3 = *(r3);
0x000160d0 str r2, [sp, 0xa0] | var_a0h = r2;
0x000160d2 str r3, [sp, 0x8c] | var_8ch = r3;
| if (r2 > 1) {
0x000160d4 bgt.w 0x1627e | goto label_150;
| }
| label_56:
0x000160d8 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000160da add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x000160de ldr.w lr, [r7, 0xc] |
0x000160e2 add.w ip, sp, 0x90 |
0x000160e6 str r2, [sp, 0x88] | var_88h = r2;
0x000160e8 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000160ea stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000160ee mov r2, sl | r2 = sl;
0x000160f0 ldr.w r3, [lr] | r3 = *(lr);
0x000160f4 mov.w r1, -1 | r1 = -1;
0x000160f8 movs r0, 3 | r0 = 3;
0x000160fa bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000160fe ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00016100 add r1, sp, 0x80 | r1 += var_80h;
0x00016102 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00016104 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00016106 b 0x15efc | goto label_47;
| label_130:
0x00016108 str r3, [sp, 0x5c] | var_5ch = r3;
0x0001610a movs r2, 4 | r2 = 4;
0x0001610c ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0001610e bfi r3, r2, 6, 4 | value_19 = BIT_MASK (6, 4);
| value_20 = r2 & value_19;
| value_19 = ~value_19;
| r3 &= value_19;
| r3 |= value_20;
0x00016112 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00016114 ldrd r2, r3, [r6, 0x12c] | __asm ("ldrd r2, r3, [r6, 0x12c]");
0x00016118 ldr r1, [r6, 0x78] | r1 = *((r6 + 0x78));
0x0001611a bl 0x69f8 | fcn_000069f8 (r0, r1, r2, r3);
0x0001611e adds r0, 1 | r0++;
| if (r0 != 1) {
0x00016120 bne.w 0x15c30 | goto label_48;
| }
| label_128:
0x00016124 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00016126 mov.w r2, -1 | r2 = -1;
0x0001612a str r2, [sp, 0x5c] | var_5ch = r2;
0x0001612c ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001612e and r3, r3, 0x380 | r3 &= 0x380;
0x00016132 cmp r3, 0x80 |
| if (r3 == 0x80) {
0x00016134 beq.w 0x15356 | goto label_49;
| }
0x00016138 b.w 0x152f2 | goto label_7;
| label_148:
0x0001613c ldr r3, [r3] | r3 = *(r3);
0x0001613e ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00016140 ldr r3, [r2] | r3 = *(r2);
0x00016142 cmp r3, 0x80 |
| if (r3 == 0x80) {
0x00016144 beq.w 0x16456 | goto label_151;
| }
0x00016148 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0001614a cmp r2, 0 |
| if (r2 == 0) {
0x0001614c beq.w 0x15e08 | goto label_43;
| }
0x00016150 str r3, [sp, 0x84] | var_84h = r3;
0x00016152 b 0x1606c | goto label_50;
| label_135:
0x00016154 ldr r3, [r3] | r3 = *(r3);
0x00016156 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00016158 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001615a ldr r3, [r3] | r3 = *(r3);
0x0001615c cmp r3, 0x7f |
| if (r3 <= 0x7f) {
0x0001615e ble.w 0x16322 | goto label_152;
| }
0x00016162 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00016164 cmp r3, 0 |
| if (r3 == 0) {
0x00016166 beq.w 0x15e08 | goto label_43;
| }
0x0001616a ldr.w ip, [pc, 0x3d8] |
0x0001616e add.w lr, sp, 0x80 | lr += var_80h;
0x00016172 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00016174 add ip, pc |
0x00016176 add.w ip, ip, 0x178 | ip = 0x2c836;
0x0001617a str r2, [sp, 0x20] | var_20h = r2;
0x0001617c ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00016180 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00016184 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00016188 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0001618c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001618e ldm.w ip, {r0, r1, r2} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
0x00016192 add.w ip, sp, 0x90 |
0x00016196 stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x0001619a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0001619c str r2, [sp, 0x88] | var_88h = r2;
0x0001619e ldr r3, [r3] | r3 = *(r3);
0x000161a0 str r3, [sp, 0x8c] | var_8ch = r3;
0x000161a2 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x000161a6 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000161a8 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000161ac mov.w r1, -1 | r1 = -1;
0x000161b0 ldr r2, [pc, 0x394] |
0x000161b2 movs r0, 3 | r0 = 3;
0x000161b4 ldr.w r3, [sl] | r3 = *(sl);
0x000161b8 add r2, pc | r2 = 0x2c704;
0x000161ba bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000161be ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000161c0 add r1, sp, 0x80 | r1 += var_80h;
0x000161c2 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000161c4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000161c6 b 0x15e08 | goto label_43;
| label_141:
0x000161c8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000161ca cmp r3, 0 |
| if (r3 != 0) {
0x000161cc bne.w 0x15ec6 | goto label_51;
| }
0x000161d0 b 0x15efc | goto label_47;
| label_139:
0x000161d2 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000161d6 cmp r3, 0 |
| if (r3 == 0) {
0x000161d8 beq.w 0x1634a | goto label_153;
| }
0x000161dc cmp r7, 0x7f |
| if (r7 <= 0x7f) {
0x000161de ble.w 0x16376 | goto label_154;
| }
0x000161e2 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000161e6 cmp r3, 0 |
| if (r3 == 0) {
0x000161e8 beq.w 0x15e8e | goto label_52;
| }
| label_60:
0x000161ec ldr.w ip, [pc, 0x35c] |
0x000161f0 add.w lr, sp, 0x80 | lr += var_80h;
0x000161f4 ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000161f8 add ip, pc |
0x000161fa add.w ip, ip, 0x178 | ip = 0x2c8c0;
0x000161fe str r3, [sp, 0x1c] | var_1ch = r3;
0x00016200 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00016204 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00016208 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0001620c stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00016210 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00016212 ldm.w ip, {r0, r1, r2} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
0x00016216 stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x0001621a strd r3, r7, [sp, 0x88] | __asm ("strd r3, r7, [sp, 0x88]");
0x0001621e add r7, sp, 0x90 | r7 += var_90h;
0x00016220 ldm.w r4, {r0, r1, r2, r3} | r0 = *(r4);
| r1 = *((r4 + 4));
| r2 = *((r4 + 8));
| r3 = *((r4 + 12));
0x00016224 stm.w r7, {r0, r1, r2, r3} | *(r7) = r0;
| *((r7 + 4)) = r1;
| *((r7 + 8)) = r2;
| *((r7 + 12)) = r3;
0x00016228 mov.w r1, -1 | r1 = -1;
0x0001622c ldrb r3, [r5] | r3 = *(r5);
0x0001622e movs r0, 3 | r0 = 3;
0x00016230 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00016232 lsrs r3, r3, 4 | r3 >>= 4;
0x00016234 str r3, [sp, 0xa8] | var_a8h = r3;
0x00016236 ldr r3, [r2] | r3 = *(r2);
0x00016238 ldr r2, [pc, 0x314] |
0x0001623a add r2, pc | r2 = 0x2c78e;
0x0001623c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00016240 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00016244 add r1, sp, 0x80 | r1 += var_80h;
0x00016246 ldr.w r0, [sl, 0x18] | r0 = *((sl + 0x18));
0x0001624a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001624c b 0x15e8e | goto label_52;
| label_133:
0x0001624e ldr r2, [pc, 0x304] |
0x00016250 mov.w r1, -1 | r1 = -1;
0x00016254 movs r0, 5 | r0 = 5;
0x00016256 add r2, pc | r2 = 0x2c7b0;
0x00016258 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001625c b 0x15d8c | goto label_53;
| label_138:
0x0001625e ldr r2, [pc, 0x2f8] |
0x00016260 mov.w r1, -1 | r1 = -1;
0x00016264 movs r0, 5 | r0 = 5;
0x00016266 add r2, pc | r2 = 0x2c7c4;
0x00016268 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001626c b 0x15e40 | goto label_54;
| label_140:
0x0001626e ldr r2, [pc, 0x2ec] |
0x00016270 mov.w r1, -1 | r1 = -1;
0x00016274 movs r0, 5 | r0 = 5;
0x00016276 add r2, pc | r2 = 0x2c7d8;
0x00016278 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001627c b 0x15ebe | goto label_55;
| label_150:
0x0001627e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00016280 lsls r2, r2, 2 | r2 <<= 2;
0x00016282 ldr r0, [pc, 0x2dc] |
0x00016284 str r1, [sp, 0x70] | var_70h = r1;
0x00016286 movw r1, 0x8b9 | r1 = 0x8b9;
0x0001628a add r0, pc | r0 = 0x2c7f0;
0x0001628c bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00016290 str r0, [sp, 0x1c] | var_1ch = r0;
0x00016292 str r0, [sp, 0xa4] | var_4ch = r0;
0x00016294 cmp r0, 0 |
| if (r0 == 0) {
0x00016296 beq.w 0x160d8 | goto label_56;
| }
0x0001629a ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x0001629e b 0x162aa |
| while (r0 != 0) {
0x000162a0 ldr r3, [sp, 0x70] | r3 = var_70h;
0x000162a2 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000162a4 ldr r3, [r3] | r3 = *(r3);
0x000162a6 str r3, [sl], 4 | *(sl) = r3;
| sl += 4;
0x000162aa ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x000162ac mov r1, r4 | r1 = r4;
0x000162ae bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x000162b2 cmp r0, 0 |
0x000162b4 bne 0x162a0 |
| }
0x000162b6 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000162b8 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x000162bc ldr.w lr, [r7, 0xc] |
0x000162c0 add.w ip, sp, 0x90 |
0x000162c4 str r2, [sp, 0x88] | var_88h = r2;
0x000162c6 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000162c8 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000162cc mov.w r1, -1 | r1 = -1;
0x000162d0 ldr r2, [pc, 0x290] |
0x000162d2 movs r0, 3 | r0 = 3;
0x000162d4 ldr.w r3, [lr] | r3 = *(lr);
0x000162d8 add r2, pc | r2 = 0x2c840;
0x000162da bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000162de ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000162e0 add r1, sp, 0x80 | r1 += var_80h;
0x000162e2 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000162e4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000162e6 ldr r0, [pc, 0x280] |
0x000162e8 movw r1, 0x8c3 | r1 = 0x8c3;
0x000162ec ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000162ee add r0, pc | r0 = 0x2c85c;
0x000162f0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000162f4 b 0x15efc | goto label_47;
| label_145:
0x000162f6 ldr r2, [pc, 0x274] |
0x000162f8 movs r0, 4 | r0 = 4;
0x000162fa mov r1, r6 | r1 = r6;
0x000162fc add r2, pc | r2 = 0x2c86e;
0x000162fe bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00016302 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
| label_144:
0x00016304 bl 0x1490c | fcn_0001490c (r0, r1, r2);
0x00016308 str r0, [sp, 0x64] | var_64h = r0;
0x0001630a ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x0001630c b 0x15fa8 | goto label_57;
| label_125:
0x0001630e ldr r0, [r3, 0x38] | r0 = *((r3 + 0x38));
0x00016310 str r3, [sp, 0x20] | var_20h = r3;
0x00016312 blx 0x312c | SSL_set_fd ();
0x00016314 invalid |
0x00016318 str.w r0, [r3, 0xb0] | __asm ("str.w r0, [r3, 0xb0]");
0x0001631c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0001631e b.w 0x15ada | goto label_58;
| label_152:
0x00016322 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x00016324 cmp r1, 0 |
| if (r1 == 0) {
0x00016326 beq.w 0x15e08 | goto label_43;
| }
0x0001632a str r3, [sp, 0x8c] | var_8ch = r3;
0x0001632c str r2, [sp, 0xa0] | var_a0h = r2;
| label_136:
0x0001632e ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00016330 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x00016334 add.w ip, sp, 0x90 |
0x00016338 str r2, [sp, 0x88] | var_88h = r2;
0x0001633a ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0001633c stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00016340 ldr r2, [pc, 0x22c] |
0x00016342 ldr.w r3, [sl] | r3 = *(sl);
0x00016346 add r2, pc | r2 = 0x2c8ba;
0x00016348 b 0x15df6 | goto label_59;
| label_153:
0x0001634a ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x0001634e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00016350 cmp r2, 0 |
0x00016352 ite eq |
| if (r2 != 0) {
0x00016354 moveq r3, 0 | r3 = 0;
| }
| if (r2 == 0) {
0x00016356 andne r3, r3, 1 | r3 &= 1;
| }
0x0001635a cmp r3, 0 |
| if (r3 == 0) {
0x0001635c beq.w 0x15e8e | goto label_52;
| }
0x00016360 b 0x161ec | goto label_60;
| label_129:
0x00016362 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00016364 movs r1, 2 | r1 = 2;
0x00016366 str.w r8, [sp, 0x5c] | __asm ("str.w r8, [var_5ch]");
0x0001636a ldrh r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0001636c bfi r2, r1, 6, 4 | value_21 = BIT_MASK (6, 4);
| value_22 = r1 & value_21;
| value_21 = ~value_21;
| r2 &= value_21;
| r2 |= value_22;
0x00016370 strh r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00016372 b.w 0x15356 | goto label_49;
| label_154:
0x00016376 movs r2, 0x4c | r2 = 0x4c;
0x00016378 add r0, sp, 0x84 | r0 += var_84h;
0x0001637a blx 0x30d8 | fcn_000030d8 ();
0x0001637e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00016380 add r5, sp, 0x90 | r5 += var_90h;
0x00016382 str r3, [sp, 0x80] | var_80h = r3;
0x00016384 add.w r3, sl, 0x24 | r3 = sl + 0x24;
0x00016388 ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x0001638c ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
0x0001638e str r2, [sp, 0x88] | var_88h = r2;
0x00016390 ldr.w r2, [sl, 0x34] | r2 = *((sl + 0x34));
0x00016394 str r2, [sp, 0xd0] | *(arg_0h) = r2;
0x00016396 ldr.w r2, [sl, 0x3c] | r2 = *((sl + 0x3c));
0x0001639a str r2, [sp, 0xac] | var_ach = r2;
0x0001639c ldr.w r2, [sl, 0x38] | r2 = *((sl + 0x38));
0x000163a0 str r2, [sp, 0xa8] | var_a8h = r2;
0x000163a2 ldr.w r2, [sl, 0x40] | r2 = *((sl + 0x40));
0x000163a6 str r2, [sp, 0xb0] | var_b0h = r2;
0x000163a8 ldr.w r2, [sl, 0x44] | r2 = *((sl + 0x44));
0x000163ac str r2, [sp, 0xb4] | var_b4h = r2;
0x000163ae ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000163b0 stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x000163b4 mov.w r1, -1 | r1 = -1;
0x000163b8 ldr r2, [pc, 0x1b8] |
0x000163ba movs r0, 3 | r0 = 3;
0x000163bc ldr r3, [r6] | r3 = *(r6);
0x000163be add r2, pc | r2 = 0x2c936;
0x000163c0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000163c4 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000163c8 add r1, sp, 0x80 | r1 += var_80h;
0x000163ca ldr.w r0, [sl, 0x18] | r0 = *((sl + 0x18));
0x000163ce blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000163d0 b 0x15e8e | goto label_52;
| label_149:
0x000163d2 ldr r0, [pc, 0x1a4] |
0x000163d4 lsls r2, r2, 2 | r2 <<= 2;
0x000163d6 movw r1, 0x886 | r1 = 0x886;
0x000163da str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x000163de add r0, pc | r0 = 0x2c95c;
0x000163e0 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000163e4 str r0, [sp, 0x1c] | var_1ch = r0;
0x000163e6 str r0, [sp, 0x84] | var_84h = r0;
0x000163e8 cmp r0, 0 |
| if (r0 != 0) {
0x000163ea bne 0x16484 | goto label_155;
| }
0x000163ec ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000163ee ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000163f0 ldr r3, [r3] | r3 = *(r3);
0x000163f2 str r2, [sp, 0x80] | var_80h = r2;
0x000163f4 ldr r2, [pc, 0x184] |
0x000163f6 add r2, pc | r2 = 0x2c976;
0x000163f8 b 0x1607a | goto label_61;
| label_137:
0x000163fa ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x000163fe b 0x1640a |
| while (r0 != 0) {
0x00016400 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00016402 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00016404 ldr r3, [r3] | r3 = *(r3);
0x00016406 str r3, [sl], 4 | *(sl) = r3;
| sl += 4;
0x0001640a ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x0001640c mov r1, r4 | r1 = r4;
0x0001640e bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00016412 cmp r0, 0 |
0x00016414 bne 0x16400 |
| }
0x00016416 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00016418 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x0001641c ldr.w lr, [r7, 0xc] |
0x00016420 add.w ip, sp, 0x90 |
0x00016424 str r2, [sp, 0x88] | var_88h = r2;
0x00016426 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00016428 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0001642c mov.w r1, -1 | r1 = -1;
0x00016430 ldr r2, [pc, 0x14c] |
0x00016432 movs r0, 3 | r0 = 3;
0x00016434 ldr.w r3, [lr] | r3 = *(lr);
0x00016438 add r2, pc | r2 = 0x2c9bc;
0x0001643a bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001643e ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00016440 add r1, sp, 0x80 | r1 += var_80h;
0x00016442 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00016444 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00016446 ldr r0, [pc, 0x13c] |
0x00016448 movw r1, 0x86c | r1 = 0x86c;
0x0001644c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0001644e add r0, pc | r0 = 0x2c9d8;
0x00016450 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00016454 b 0x15e08 | goto label_43;
| label_151:
0x00016456 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00016458 cmp r3, 0 |
| if (r3 == 0) {
0x0001645a beq.w 0x15e08 | goto label_43;
| }
0x0001645e ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x00016460 movs r0, 3 | r0 = 3;
0x00016462 ldr.w r3, [sl] | r3 = *(sl);
0x00016466 str r1, [sp, 0x70] | var_70h = r1;
0x00016468 mov.w r1, -1 | r1 = -1;
0x0001646c ldr r2, [r2] | r2 = *(r2);
0x0001646e strd r2, r8, [sp, 0x74] | __asm ("strd r2, r8, [sp, 0x74]");
0x00016472 ldr r2, [pc, 0x114] |
0x00016474 add r2, pc | r2 = 0x2ca02;
0x00016476 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001647a ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001647c mov r1, r4 | r1 = r4;
0x0001647e ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00016480 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00016482 b 0x15e08 | goto label_43;
| label_155:
0x00016484 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00016488 b 0x16494 |
| while (r0 != 0) {
0x0001648a ldr r3, [sp, 0x70] | r3 = var_70h;
0x0001648c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0001648e ldr r3, [r3] | r3 = *(r3);
0x00016490 str r3, [sl], 4 | *(sl) = r3;
| sl += 4;
0x00016494 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00016496 mov r1, r4 | r1 = r4;
0x00016498 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x0001649c cmp r0, 0 |
0x0001649e bne 0x1648a |
| }
0x000164a0 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x000164a2 mov.w r1, -1 | r1 = -1;
0x000164a6 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000164a8 movs r0, 3 | r0 = 3;
0x000164aa ldr r3, [r3] | r3 = *(r3);
0x000164ac str r2, [sp, 0x80] | var_80h = r2;
0x000164ae ldr r2, [pc, 0xdc] |
0x000164b0 add r2, pc | r2 = 0x2ca42;
0x000164b2 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000164b6 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000164b8 add r1, sp, 0x80 | r1 += var_80h;
0x000164ba ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000164bc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000164be ldr r0, [pc, 0xd0] |
0x000164c0 movw r1, 0x88f | r1 = 0x88f;
0x000164c4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000164c6 add r0, pc | r0 = 0x2ca5c;
0x000164c8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000164cc b 0x15e08 | goto label_43;
| label_131:
0x000164ce ldr r0, [r5, 0x38] | r0 = *((r5 + 0x38));
0x000164d0 blx 0x312c | SSL_set_fd ();
0x000164d4 str.w r0, [r5, 0xb0] | __asm ("str.w r0, [r5, 0xb0]");
0x000164d8 b.w 0x15c42 | goto label_62;
| label_104:
0x000164dc blx 0x348c | fprintf_chk ()
| label_110:
0x000164e0 lsrs r3, r3, 4 | r3 >>= 4;
0x000164e2 ldr.w lr, [pc, 0xb0] |
0x000164e6 mov ip, r5 |
0x000164e8 strd r8, r8, [r4] | __asm ("strd r8, r8, [r4]");
0x000164ec strd r8, r8, [r4, 8] | __asm ("strd r8, r8, [r4, 8]");
0x000164f0 str r3, [sp, 0x20] | var_20h = r3;
0x000164f2 add lr, pc | lr += pc;
0x000164f4 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000164f8 mov sl, lr | sl = lr;
0x000164fa stm.w sl!, {r0, r1, r2, r3} | *(sl!) = r0;
| *((sl! + 4)) = r1;
| *((sl! + 8)) = r2;
| *((sl! + 12)) = r3;
0x000164fe str r3, [sp, 0x1c] | var_1ch = r3;
0x00016500 str r1, [sp, 0x24] | var_24h = r1;
0x00016502 ldm.w ip, {r0, r1, r2, r3} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
| r3 = *((ip + 12));
0x00016506 stm.w sl, {r0, r1, r2, r3} | *(sl) = r0;
| *((sl + 4)) = r1;
| *((sl + 8)) = r2;
| *((sl + 12)) = r3;
0x0001650a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001650c cmp r3, 4 |
| if (r3 > 4) {
0x0001650e bgt.w 0x15a72 | goto label_63;
| }
0x00016512 movs r3, 0 | r3 = 0;
0x00016514 str r3, [sp, 0x34] | var_34h = r3;
0x00016516 str r3, [sp, 0x1c] | var_1ch = r3;
0x00016518 b.w 0x15ab0 | goto label_64;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x14b3c */
| #include <stdint.h>
|
; (fcn) fcn.00014b3c () | void fcn_00014b3c (int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_8h;
| int32_t var_18h;
| int16_t var_20h;
| int16_t var_28h;
| int16_t var_40h;
| int16_t var_4ch;
| r0 = arg1;
0x00014b3c ldr r3, [pc, 0x184] |
0x00014b3e movs r2, 3 | r2 = 3;
0x00014b40 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00014b44 mov r5, r0 | r5 = r0;
0x00014b46 ldr r6, [pc, 0x180] |
0x00014b48 sub sp, 0x54 |
0x00014b4a add r3, pc | r3 = 0x29812;
0x00014b4c mov.w r1, 0x748 | r1 = 0x748;
0x00014b50 add.w r0, r3, 0x1e0 | r0 = r3 + 0x1e0;
0x00014b54 ldr r3, [pc, 0x174] | r3 = *(0x14ccc);
0x00014b56 add r6, pc | r6 = 0x29824;
0x00014b58 ldr r4, [pc, 0x174] |
0x00014b5a mov.w r8, 0 | r8 = 0;
0x00014b5e add r7, sp, 0x10 | r7 += var_10h;
0x00014b60 ldr r3, [r6, r3] |
0x00014b62 add r4, pc | r4 = 0x29836;
0x00014b64 ldr r3, [r3] | r3 = *(0x29824);
0x00014b66 str r3, [sp, 0x4c] | var_4ch = r3;
0x00014b68 mov.w r3, 0 | r3 = 0;
0x00014b6c str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h]");
0x00014b70 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00014b74 ldr r2, [pc, 0x15c] | r2 = *(0x14cd4);
0x00014b76 mov r1, r7 | r1 = r7;
0x00014b78 mov r3, r4 | r3 = r4;
0x00014b7a ldr r6, [r4, r2] | r6 = *(0x29836);
0x00014b7c ldr r0, [r6] | r0 = *(0x29836);
0x00014b7e bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00014b82 mov r4, r0 | r4 = r0;
0x00014b84 mov r1, r7 | r1 = r7;
0x00014b86 ldr r0, [r6] | r0 = *(0x29836);
0x00014b88 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00014b8c cmp r4, 0 |
| if (r4 == 0) {
0x00014b8e beq.w 0x14cbc | goto label_3;
| }
0x00014b92 ldr.w sb, [pc, 0x144] |
0x00014b96 ldr.w sl, [pc, 0x144] |
0x00014b9a ldr.w fp, [pc, 0x144] |
0x00014b9e add sb, pc | sb = 0x2987c;
0x00014ba0 add sl, pc | sl = 0x29882;
0x00014ba2 add fp, pc | fp = 0x29888;
0x00014ba4 b 0x14bb4 |
| while (r3 != r5) {
0x00014ba6 ldr r4, [sp, 0x10] | r4 = var_10h;
0x00014ba8 mov r1, r7 | r1 = r7;
0x00014baa ldr r0, [r6] | r0 = *(r6);
0x00014bac bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00014bb0 cmp r4, 0 |
| if (r4 == 0) {
0x00014bb2 beq 0x14c20 | goto label_2;
| }
| label_0:
0x00014bb4 ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x00014bb6 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00014bb8 cmp r3, r5 |
0x00014bba bne 0x14ba6 |
| }
0x00014bbc ldr r0, [r6] | r0 = *(r6);
0x00014bbe mov r1, r4 | r1 = r4;
0x00014bc0 bl 0xd778 | fcn_0000d778 (r0, r1);
0x00014bc4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00014bc6 cmp r3, 0 |
| if (r3 == 0) {
0x00014bc8 beq 0x14c64 | goto label_4;
| }
0x00014bca ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00014bcc mvn r2, 0xa | r2 = ~0xa;
0x00014bd0 ldr r0, [r4] | r0 = *(r4);
0x00014bd2 str r3, [sp, 0x14] | var_14h = r3;
0x00014bd4 movs r3, 0 | r3 = 0;
0x00014bd6 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_8h]");
0x00014bda bl 0x5774 | fcn_00005774 (r0);
0x00014bde ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00014be0 mov r3, r0 | r3 = r0;
0x00014be2 mov.w r1, -1 | r1 = -1;
0x00014be6 movs r0, 3 | r0 = 3;
0x00014be8 ldr r2, [r2] | r2 = *(r2);
0x00014bea str r2, [sp] | *(sp) = r2;
0x00014bec ldr r2, [pc, 0xf4] |
0x00014bee add r2, pc | r2 = 0x298d6;
0x00014bf0 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014bf4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00014bf6 add r1, sp, 0x14 | r1 += var_14h;
0x00014bf8 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00014bfa blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_1:
0x00014bfc mov r0, r4 | r0 = r4;
0x00014bfe add.w r8, r8, 1 | r8++;
0x00014c02 bl 0x12dec | fcn_00012dec (r0);
0x00014c06 mov r2, r4 | r2 = r4;
0x00014c08 movw r1, 0x422 | r1 = 0x422;
0x00014c0c mov r0, sb | r0 = sb;
0x00014c0e bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00014c12 ldr r4, [sp, 0x10] | r4 = var_10h;
0x00014c14 mov r1, r7 | r1 = r7;
0x00014c16 ldr r0, [r6] | r0 = *(r6);
0x00014c18 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00014c1c cmp r4, 0 |
| if (r4 != 0) {
0x00014c1e bne 0x14bb4 | goto label_0;
| }
| label_2:
0x00014c20 ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
0x00014c22 mov r3, r8 | r3 = r8;
0x00014c24 ldr r2, [pc, 0xc0] |
0x00014c26 mov.w r1, -1 | r1 = -1;
0x00014c2a movs r0, 3 | r0 = 3;
0x00014c2c ldr r4, [r4] | r4 = *(r4);
0x00014c2e add r2, pc | r2 = 0x2991a;
0x00014c30 str r4, [sp] | *(sp) = r4;
0x00014c32 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014c36 ldr r0, [pc, 0xb4] |
0x00014c38 movs r3, 3 | r3 = 3;
0x00014c3a movs r2, 0 | r2 = 0;
0x00014c3c movw r1, 0x774 | r1 = 0x774;
0x00014c40 add r0, pc |
0x00014c42 add.w r0, r0, 0x1e0 | r0 = 0x29b12;
0x00014c46 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00014c4a ldr r2, [pc, 0xa4] |
0x00014c4c ldr r3, [pc, 0x7c] | r3 = *(0x14ccc);
0x00014c4e add r2, pc | r2 = 0x29944;
0x00014c50 ldr r3, [r2, r3] | r3 = *(0x29944);
0x00014c52 ldr r2, [r3] | r2 = *(0x29944);
0x00014c54 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00014c56 eors r2, r3 | r2 ^= r3;
0x00014c58 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014c5c bne 0x14cc0 | goto label_5;
| }
0x00014c5e add sp, 0x54 |
0x00014c60 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00014c64 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00014c66 cmp r3, 0 |
| if (r3 == 0) {
0x00014c68 beq 0x14bfc | goto label_1;
| }
0x00014c6a ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00014c6c add.w lr, sl, 0x178 | lr = sl + 0x178;
0x00014c70 add.w ip, sp, 0x20 |
0x00014c74 str r3, [sp, 0xc] | var_ch = r3;
0x00014c76 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00014c7a stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00014c7e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00014c80 str r3, [sp, 0x28] | var_28h = r3;
0x00014c82 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00014c86 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00014c8a mvn r3, 0xa | r3 = ~0xa;
0x00014c8e ldm.w lr, {r0, r1, r2} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
0x00014c90 movs r7, r0 | r7 = r0;
0x00014c92 stm.w ip, {r0, r1, r2} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
0x00014c96 ldr r0, [r4] | r0 = *(r4);
0x00014c98 str r3, [sp, 0x40] | var_40h = r3;
0x00014c9a bl 0x5774 | fcn_00005774 (r0);
0x00014c9e ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00014ca0 mov r3, r0 | r3 = r0;
0x00014ca2 mov.w r1, -1 | r1 = -1;
0x00014ca6 movs r0, 3 | r0 = 3;
0x00014ca8 ldr r2, [r2] | r2 = *(r2);
0x00014caa str r2, [sp] | *(sp) = r2;
0x00014cac mov r2, fp | r2 = fp;
0x00014cae movs r0, r0 |
0x00014cb0 cdp2 p9, 0xb, c6, c11, c3, 1 | __asm ("cdp2 p9, 0xb, c6, c11, c3, 1");
0x00014cb4 add r1, sp, 0x20 | r1 += var_20h;
0x00014cb6 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00014cb8 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00014cba b 0x14bfc | goto label_1;
| label_3:
0x00014cbc mov r8, r4 | r8 = r4;
0x00014cbe b 0x14c20 | goto label_2;
| label_5:
0x00014cc0 blx 0x348c | fprintf_chk ()
0x00014cc4 ldrh r6, [r5, 0x10] | r6 = *((r5 + 0x10));
0x00014cc6 movs r0, r0 |
0x00014cc8 adr r1, 0xe8 | r1 = 0xe8;
0x00014cca movs r1, r0 | r1 = r0;
0x00014ccc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00014cce movs r0, r0 |
0x00014cd0 adr r1, 0xb8 | r1 = 0xb8;
0x00014cd2 movs r1, r0 | r1 = r0;
0x00014cd4 lsls r4, r0, 0xc | r4 = r0 << 0xc;
0x00014cd6 movs r0, r0 |
0x00014cd8 ldrb r6, [r2, 0x1f] | r6 = *((r2 + 0x1f));
0x00014cda movs r0, r0 |
0x00014cdc ldrh r0, [r3, 0xe] | r0 = *((r3 + 0xe));
0x00014cde movs r0, r0 |
0x00014ce0 strh r2, [r3, 0xe] | *((r3 + 0xe)) = r2;
0x00014ce2 movs r0, r0 |
0x00014ce4 strh r6, [r1, 0xc] | *((r1 + 0xc)) = r6;
0x00014ce6 movs r0, r0 |
0x00014ce8 strh r2, [r6, 0x10] | *((r6 + 0x10)) = r2;
0x00014cea movs r0, r0 |
0x00014cec ldrh r0, [r7, 8] | r0 = var_8h;
0x00014cee movs r0, r0 |
0x00014cf0 adr r0, 0x108 | r0 = 0x108;
0x00014cf2 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x14d54 */
| #include <stdint.h>
|
; (fcn) fcn.00014d54 () | void fcn_00014d54 (int16_t arg_98h, int16_t arg_3b8h, int16_t arg1, int16_t arg2) {
| int16_t var_3ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x00014d54 andhs r4, r3, 0x12400 | r4 = r3 & 0x12400;
| }
0x00014d58 push {r4, r5, r6, lr} |
0x00014d5a mov r5, r0 | r5 = r0;
0x00014d5c ldr r6, [pc, 0x120] |
0x00014d5e sub sp, 0x58 |
0x00014d60 add r3, pc | r3 += pc;
0x00014d62 mov r4, r1 | r4 = r1;
0x00014d64 add.w r0, r3, 0x210 | r0 = r3 + 0x210;
0x00014d68 ldr r3, [pc, 0x118] | r3 = *(0x14e84);
0x00014d6a add r6, pc | r6 = 0x29bee;
0x00014d6c mov.w r1, 0x3ac | r1 = 0x3ac;
0x00014d70 ldr r3, [r6, r3] |
0x00014d72 ldr r3, [r3] | r3 = *(0x29bee);
0x00014d74 str r3, [sp, 0x54] | var_54h = r3;
0x00014d76 mov.w r3, 0 | r3 = 0;
0x00014d7a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00014d7c cdp2 p8, 0xe, c6, c11, c8, 7 | __asm ("cdp2 p8, 0xe, c6, c11, c8, 7");
0x00014d80 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x00014d82 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| if (r3 == 0) {
0x00014d84 cbz r3, 0x14dce | goto label_2;
| }
0x00014d86 add.w r3, r4, 0x1c | r3 = r4 + 0x1c;
0x00014d8a ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x00014d8e bl 0x3990 | fcn_00003990 ();
0x00014d92 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00014d94 cmp r0, r3 |
0x00014d96 asr.w r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00014d9a sbcs r1, r2 | __asm ("sbcs r1, r2");
0x00014d9c bhs 0x14dcc |
| while (1) {
| label_0:
0x00014d9e ldr r2, [pc, 0xe8] |
0x00014da0 ldr r3, [pc, 0xe0] | r3 = *(0x14e84);
0x00014da2 add r2, pc | r2 = 0x29c30;
0x00014da4 ldr r3, [r2, r3] | r3 = *(0x29c30);
0x00014da6 ldr r2, [r3] | r2 = *(0x29c30);
0x00014da8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00014daa eors r2, r3 | r2 ^= r3;
0x00014dac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014db0 bne 0x14e76 | goto label_3;
| }
0x00014db2 ldr r0, [pc, 0xd8] |
0x00014db4 movs r3, 3 | r3 = 3;
0x00014db6 movs r2, 0 | r2 = 0;
0x00014db8 mov.w r1, 0x3cc | r1 = 0x3cc;
0x00014dbc add r0, pc |
0x00014dbe add.w r0, r0, 0x210 | r0 = 0x29e5e;
0x00014dc2 add sp, 0x58 |
0x00014dc4 pop.w {r4, r5, r6, lr} |
0x00014dc8 b.w 0xfbf4 | void (*0xfbf4)() ();
0x00014dcc ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
| label_2:
0x00014dce ldrb r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00014dd0 add.w r2, r4, 0x24 | r2 = r4 + 0x24;
0x00014dd4 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x00014dd6 ubfx r6, r3, 2, 1 | r6 = (r3 >> 2) & ((1 << 1) - 1);
0x00014dda bl 0x14cf4 | fcn_00014cf4 (r0, r1, r2);
0x00014dde ldr r1, [r4, 0x34] | r1 = *((r4 + 0x34));
| if (r1 == 0) {
0x00014de0 cbz r1, 0x14dfa | goto label_4;
| }
0x00014de2 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00014de4 cmp r2, 0 |
0x00014de6 ite eq |
| if (r2 != 0) {
0x00014de8 moveq r6, 0 | r6 = 0;
| }
| if (r2 == 0) {
0x00014dea andne r6, r6, 1 | r6 &= 1;
| }
0x00014dee cmp r6, 0 |
| if (r6 != 0) {
0x00014df0 bne 0x14e5a | goto label_5;
| }
| label_1:
0x00014df2 mov r0, r5 | r0 = r5;
0x00014df4 bl 0x135f0 | fcn_000135f0 (r0);
0x00014df8 b 0x14d9e |
| }
| label_4:
0x00014dfa ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r3 != 0) {
0x00014dfc cbz r3, 0x14e24 |
0x00014dfe mov r6, sp | r6 = sp;
0x00014e00 movs r2, 0x38 | r2 = 0x38;
0x00014e02 mov r0, r6 | r0 = r6;
0x00014e04 blx 0x30d8 | fcn_000030d8 ();
0x00014e08 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00014e0a mov.w r1, -1 | r1 = -1;
0x00014e0e ldr r2, [pc, 0x80] |
0x00014e10 movs r0, 3 | r0 = 3;
0x00014e12 ldr r3, [r3] | r3 = *(r3);
0x00014e14 add r2, pc | r2 = 0x29caa;
0x00014e16 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014e1a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00014e1c mov r1, r6 | r1 = r6;
0x00014e1e ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00014e20 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014e22 b 0x14d9e | goto label_0;
| }
0x00014e24 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00014e26 cmp r2, 0 |
| if (r2 == 0) {
0x00014e28 beq 0x14d9e | goto label_0;
| }
0x00014e2a mov r1, r3 | r1 = r3;
0x00014e2c movs r2, 0x50 | r2 = 0x50;
0x00014e2e add r0, sp, 4 | r0 += var_4h;
0x00014e30 blx 0x30d8 | fcn_000030d8 ();
0x00014e34 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x00014e36 movw r3, 0x514d |
0x00014e3a ldr r2, [pc, 0x58] |
0x00014e3c movt r3, 0x4453 | r3 = 0x4453514d;
0x00014e40 str r3, [sp] | *(sp) = r3;
0x00014e42 mov.w r1, -1 | r1 = -1;
0x00014e46 ldr r3, [r5] | r3 = *(r5);
0x00014e48 movs r0, 3 | r0 = 3;
0x00014e4a add r2, pc | r2 = 0x29ce4;
0x00014e4c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014e50 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00014e52 mov r1, sp | r1 = sp;
0x00014e54 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00014e56 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014e58 b 0x14d9e | goto label_0;
| label_5:
0x00014e5a ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00014e5c mov.w r1, -1 | r1 = -1;
0x00014e60 ldr r2, [pc, 0x34] |
0x00014e62 movs r0, 3 | r0 = 3;
0x00014e64 ldr r3, [r3] | r3 = *(r3);
0x00014e66 add r2, pc | r2 = 0x29d02;
0x00014e68 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014e6c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00014e6e movs r1, 0 | r1 = 0;
0x00014e70 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00014e72 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014e74 b 0x14df2 | goto label_1;
| label_3:
0x00014e76 blx 0x348c | fprintf_chk ()
0x00014e7a nop |
0x00014e7c ldrh r0, [r3] | r0 = *(r3);
0x00014e7e movs r0, r0 |
0x00014e80 ldr r7, [sp, 0x98] | r7 = *(arg_98h);
0x00014e82 movs r1, r0 | r1 = r0;
0x00014e84 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00014e86 movs r0, r0 |
0x00014e88 ldr r6, [sp, 0x3b8] | r6 = *(arg_3b8h);
0x00014e8a movs r1, r0 | r1 = r0;
0x00014e8c strh r4, [r7, 0x3c] | *((r7 + 0x3c)) = r4;
0x00014e8e movs r0, r0 |
0x00014e90 strh r0, [r3, 4] | *((r3 + 4)) = r0;
0x00014e92 movs r0, r0 |
0x00014e94 strh r2, [r4, 2] | *((r4 + 2)) = r2;
0x00014e96 movs r0, r0 |
0x00014e98 strh r6, [r3] | *(r3) = r6;
0x00014e9a movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x14e9c */
| #include <stdint.h>
|
; (fcn) fcn.00014e9c () | void fcn_00014e9c (int16_t arg_0h, int16_t arg_370h, int16_t arg_3c0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_d4h;
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00014e9c push {r1, r4, r5, r6, r8, sb, fp, lr} |
0x00014ea0 mvns r0, r6 | r0 = ~r6;
0x00014ea2 mov r7, r2 | r7 = r2;
0x00014ea4 ldr r2, [pc, 0x1c4] |
0x00014ea6 mov r4, r0 | r4 = r0;
0x00014ea8 add r3, pc | r3 += pc;
0x00014eaa sub sp, 0x44 |
0x00014eac ldr r5, [r0, 0xc] | r5 = *(arg_0hxc);
0x00014eae add.w r0, r3, 0x22c | r0 = r3 + 0x22c;
0x00014eb2 ldr r3, [pc, 0x1bc] | r3 = *(0x15072);
0x00014eb4 add r2, pc | r2 = 0x29f24;
0x00014eb6 mov r8, r1 | r8 = r1;
0x00014eb8 add.w sb, r4, 0x40 | sb = r4 + 0x40;
0x00014ebc ldrb r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00014ebe movw r1, 0x62b | r1 = 0x62b;
0x00014ec2 ldr r3, [r2, r3] |
0x00014ec4 movs r2, 3 | r2 = 3;
0x00014ec6 ubfx r5, r5, 2, 1 | r5 = (r5 >> 2) & ((1 << 1) - 1);
0x00014eca ldr r3, [r3] | r3 = *(0x29f24);
0x00014ecc str r3, [sp, 0x3c] | var_3ch = r3;
0x00014ece mov.w r3, 0 | r3 = 0;
0x00014ed2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00014ed6 mov r1, r4 | r1 = r4;
0x00014ed8 mov r0, sb | r0 = sb;
0x00014eda bl 0x12d5c | r0 = fcn_00012d5c (r0, r1);
0x00014ede cmp r0, 0 |
| if (r0 != 0) {
0x00014ee0 beq 0x14f50 |
0x00014ee2 movs r2, 0 | r2 = 0;
0x00014ee4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00014ee6 mov r1, r2 | r1 = r2;
0x00014ee8 bl 0x1338c | fcn_0001338c (r0, r1, r2);
0x00014eec ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00014eee cmp r3, 0 |
0x00014ef0 ite eq |
| if (r3 != 0) {
0x00014ef2 moveq r5, 0 | r5 = 0;
| }
| if (r3 == 0) {
0x00014ef4 andne r5, r5, 1 | r5 &= 1;
| }
0x00014ef8 cmp r5, 0 |
| if (r5 != 0) {
0x00014efa bne.w 0x15026 | goto label_5;
| }
| label_2:
0x00014efe ldr r0, [pc, 0x174] |
0x00014f00 movs r2, 0x60 | r2 = 0x60;
0x00014f02 mov.w r1, 0x638 | r1 = 0x638;
0x00014f06 add r0, pc | r0 = 0x29f80;
0x00014f08 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00014f0c mov r5, r0 | r5 = r0;
0x00014f0e cmp r0, 0 |
| if (r0 == 0) {
0x00014f10 beq 0x14f9c | goto label_1;
| }
0x00014f12 movs r2, 0x60 | r2 = 0x60;
0x00014f14 movs r1, 0 | r1 = 0;
0x00014f16 blx 0x30d8 | fcn_000030d8 ();
0x00014f1a movs r2, 0x50 | r2 = 0x50;
0x00014f1c mov r1, sb | r1 = sb;
0x00014f1e mov r0, r5 | r0 = r5;
0x00014f20 str r4, [r5, 0x50] | *((r5 + 0x50)) = r4;
0x00014f22 blx 0x32a0 | pthread_cond_signal ();
0x00014f26 ldr r2, [pc, 0x150] |
0x00014f28 mov.w r1, -1 | r1 = -1;
0x00014f2c movs r0, 3 | r0 = 3;
0x00014f2e add r2, pc | r2 = 0x29fac;
0x00014f30 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014f34 ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x00014f36 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014f38 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00014f3c cmp r3, 0 |
| if (r3 != 0) {
0x00014f3e bne 0x15016 | goto label_6;
| }
0x00014f40 ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x00014f42 cmp r2, 3 |
| if (r2 != 3) {
0x00014f44 bne 0x1501c | goto label_7;
| }
0x00014f46 ldr r2, [r5, 0x34] | r2 = *((r5 + 0x34));
0x00014f48 str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x00014f4a adds r2, 1 | r2++;
0x00014f4c str r2, [r5, 0x34] | *((r5 + 0x34)) = r2;
0x00014f4e b 0x1501c | goto label_7;
| }
0x00014f50 mov r6, r0 | r6 = r0;
0x00014f52 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00014f54 mov r2, r6 | r2 = r6;
0x00014f56 mov r1, r6 | r1 = r6;
0x00014f58 bl 0x14cf4 | fcn_00014cf4 (r0, r1, r2);
0x00014f5c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00014f5e cmp r3, 0 |
0x00014f60 ite eq |
| if (r3 != 0) {
0x00014f62 moveq r5, 0 | r5 = 0;
| }
| if (r3 == 0) {
0x00014f64 andne r5, r5, 1 | r5 &= 1;
| }
0x00014f68 cmp r5, 0 |
| if (r5 != 0) {
0x00014f6a bne 0x15042 | goto label_8;
| }
0x00014f6c ldr r5, [r4, 0x48] | r5 = *((r4 + 0x48));
| if (r5 == 0) {
0x00014f6e cbz r5, 0x14fca | goto label_4;
| }
| label_3:
0x00014f70 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00014f72 movs r5, 0 | r5 = 0;
0x00014f74 ldr r2, [pc, 0x104] |
0x00014f76 mov.w r1, -1 | r1 = -1;
0x00014f7a movs r0, 3 | r0 = 3;
0x00014f7c strd r5, r8, [sp, 4] | __asm ("strd r5, r8, [var_4h]");
0x00014f80 ldr r3, [r3] | r3 = *(r3);
0x00014f82 add r2, pc | r2 = 0x2a002;
0x00014f84 str r7, [sp, 0xc] | var_ch = r7;
0x00014f86 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00014f8a ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00014f8c add r1, sp, 4 | r1 += var_4h;
0x00014f8e ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x00014f90 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00014f92 strd r5, r5, [r4, 0x44] | __asm ("strd r5, r5, [r4, 0x44]");
| do {
| label_0:
0x00014f96 mov r0, r4 | r0 = r4;
0x00014f98 bl 0x135f0 | fcn_000135f0 (r0);
| label_1:
0x00014f9c ldr r2, [pc, 0xe0] |
0x00014f9e ldr r3, [pc, 0xd0] | r3 = *(0x15072);
0x00014fa0 add r2, pc | r2 = 0x2a024;
0x00014fa2 ldr r3, [r2, r3] | r3 = *(0x2a024);
0x00014fa4 ldr r2, [r3] | r2 = *(0x2a024);
0x00014fa6 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00014fa8 eors r2, r3 | r2 ^= r3;
0x00014faa mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014fae bne 0x15064 | goto label_9;
| }
0x00014fb0 ldr r0, [pc, 0xd0] |
0x00014fb2 movs r3, 3 | r3 = 3;
0x00014fb4 movs r2, 0 | r2 = 0;
0x00014fb6 movw r1, 0x671 | r1 = 0x671;
0x00014fba add r0, pc |
0x00014fbc add.w r0, r0, 0x22c | r0 = 0x2a26e;
0x00014fc0 add sp, 0x44 |
0x00014fc2 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00014fc6 b.w 0xfbf4 | void (*0xfbf4)() ();
| label_4:
0x00014fca ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00014fcc cmp r3, 0 |
0x00014fce beq 0x14f96 |
| } while (r3 == 0);
0x00014fd0 ldr r6, [pc, 0xb4] |
0x00014fd2 add.w ip, sp, 0x10 |
0x00014fd6 add r6, pc |
0x00014fd8 add.w r6, r6, 0x178 | r6 = 0x2a1da;
0x00014fdc ldm r6!, {r0, r1, r2, r3} | r0 = *(r6!);
| r1 = *((r6! + 4));
| r2 = *((r6! + 8));
| r3 = *((r6! + 12));
0x00014fde stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00014fe2 ldm r6!, {r0, r1, r2, r3} | r0 = *(r6!);
| r1 = *((r6! + 4));
| r2 = *((r6! + 8));
| r3 = *((r6! + 12));
0x00014fe4 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00014fe6 movs r7, r1 | r7 = r1;
0x00014fe8 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00014fea ldm.w r6, {r0, r1, r2} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
0x00014fee ldr r3, [r3] | r3 = *(r3);
0x00014ff0 stm.w ip, {r0, r1, r2} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
0x00014ff4 mov.w r1, -1 | r1 = -1;
0x00014ff8 ldr r2, [pc, 0x90] |
0x00014ffa movs r0, 3 | r0 = 3;
0x00014ffc str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x00015000 add r2, pc | r2 = 0x2a090;
0x00015002 str r7, [sp, 0x34] | var_34h = r7;
0x00015004 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015008 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0001500a add r1, sp, 0x10 | r1 += var_10h;
0x0001500c ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x0001500e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00015010 strd r5, r5, [r4, 0x4c] | __asm ("strd r5, r5, [r4, 0x4c]");
0x00015014 b 0x14f96 | goto label_0;
| label_6:
0x00015016 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x00015018 adds r3, 1 | r3++;
0x0001501a str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
| label_7:
0x0001501c movs r1, 0x50 | r1 = 0x50;
0x0001501e mov r0, r5 | r0 = r5;
0x00015020 bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x00015024 b 0x14f9c | goto label_1;
| label_5:
0x00015026 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00015028 mov.w r1, -1 | r1 = -1;
0x0001502c ldr r2, [pc, 0x60] |
0x0001502e movs r0, 3 | r0 = 3;
0x00015030 ldr r3, [r3] | r3 = *(r3);
0x00015032 add r2, pc | r2 = 0x2a0c6;
0x00015034 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015038 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001503a movs r1, 0 | r1 = 0;
0x0001503c ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0001503e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00015040 b 0x14efe | goto label_2;
| label_8:
0x00015042 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00015044 mov.w r1, -1 | r1 = -1;
0x00015048 ldr r2, [pc, 0x48] |
0x0001504a movs r0, 3 | r0 = 3;
0x0001504c ldr r3, [r3] | r3 = *(r3);
0x0001504e add r2, pc | r2 = 0x2a0e6;
0x00015050 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015054 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00015056 mov r1, r6 | r1 = r6;
0x00015058 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0001505a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001505c ldr r5, [r4, 0x48] | r5 = *((r4 + 0x48));
0x0001505e cmp r5, 0 |
| if (r5 != 0) {
0x00015060 bne 0x14f70 | goto label_3;
| }
0x00015062 b 0x14fca | goto label_4;
| label_9:
0x00015064 blx 0x348c | fprintf_chk ()
0x00015068 strh r0, [r2, 0x36] | *((r2 + 0x36)) = r0;
0x0001506a movs r0, r0 |
0x0001506c ldr r5, [sp, 0x370] | r5 = *(arg_370h);
0x0001506e movs r1, r0 | r1 = r0;
0x00015070 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00015072 movs r0, r0 |
0x00015074 ldrb r6, [r5, 0x11] | r6 = *((r5 + 0x11));
0x00015076 movs r0, r0 |
0x00015078 ldrb r2, [r5, 0x1e] | r2 = *((r5 + 0x1e));
0x0001507a movs r0, r0 |
0x0001507c ldrb r2, [r6, 0x1d] | r2 = *((r6 + 0x1d));
0x0001507e movs r0, r0 |
0x00015080 ldr r4, [sp, 0x3c0] | r4 = *(arg_3c0h);
0x00015082 movs r1, r0 | r1 = r0;
0x00015084 strh r6, [r7, 0x2c] | *((r7 + 0x2c)) = r6;
0x00015086 movs r0, r0 |
0x00015088 strh r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x0001508a movs r0, r0 |
0x0001508c ldrb r4, [r6, 0x1b] | r4 = *((r6 + 0x1b));
0x0001508e movs r0, r0 |
0x00015090 ldrb r2, [r2, 0x19] | r2 = *((r2 + 0x19));
0x00015092 movs r0, r0 |
0x00015094 ldrb r6, [r6, 0x18] | r6 = *((r6 + 0x18));
0x00015096 movs r0, r0 |
0x00015098 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001509c movs r2, 3 | r2 = 3;
0x0001509e ldr.w r4, [pc, 0xbf4] |
0x000150a2 sub sp, 0xdc |
0x000150a4 movw r1, 0x7ad | r1 = 0x7ad;
0x000150a8 ldr.w r3, [pc, 0xbec] | r3 = *(0x15c98);
0x000150ac ldr.w r0, [pc, 0xbec] |
0x000150b0 add r4, pc | r4 = 0x2ad4a;
0x000150b2 ldr.w fp, [pc, 0xbec] |
0x000150b6 ldr r3, [r4, r3] |
0x000150b8 add r0, pc |
0x000150ba add.w r0, r0, 0x238 | r0 = 0x2af90;
0x000150be add fp, pc | fp = 0x2ad64;
0x000150c0 ldr r3, [r3] | r3 = *(0x2ad4a);
0x000150c2 str r3, [sp, 0xd4] | var_d4h = r3;
0x000150c4 mov.w r3, 0 | r3 = 0;
0x000150c8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000150ca stc2l p8, c15, [r4, -0x37c] | __asm ("stc2l p8, c15, [r4, -0x37c]");
0x000150ce subs r3, 0xd4 | r3 -= 0xd4;
0x000150d0 ldr.w sb, [fp, r3] | sb = *(0x2ad64);
0x000150d4 ldr.w r0, [sb] | r0 = *(0x2ad64);
0x000150d8 blx 0x3644 | r0 = fcn_00003644 ();
0x000150dc cmp r0, 0 |
| if (r0 == 0) {
0x000150de bne.w 0x15a4e |
0x000150e2 ldr.w r3, [pc, 0xbc4] | r3 = *(0x15caa);
0x000150e6 movs r2, 2 | r2 = 2;
0x000150e8 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x000150ec str r2, [r3] | *(r3) = r2;
0x000150ee str r3, [sp, 0x2c] | var_2ch = r3;
0x000150f0 blx 0x3564 | SSL_pending ();
0x000150f4 ldr.w r3, [pc, 0xbb4] | r3 = *(0x15cac);
0x000150f8 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x000150fc str r3, [sp, 0x28] | var_28h = r3;
0x000150fe str r0, [r3] | *(r3) = r0;
0x00015100 ldr.w r3, [pc, 0xbac] | r3 = *(0x15cb0);
0x00015102 subs r3, 0xac | r3 -= 0xac;
| }
0x00015a4e blx 0x2f10 | strerror (r0);
0x00015a52 ldr r2, [pc, 0x314] |
0x00015a54 mov r3, r0 | r3 = r0;
0x00015a56 movs r1, 0 | r1 = 0;
0x00015a58 movs r0, 5 | r0 = 5;
0x00015a5a add r2, pc | r2 = 0x2b7c8;
0x00015a5c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00015a5e invalid |
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x00015a62 cbnz r7, 0x15ab4 | return void (*0x15ab4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x16598 */
| #include <stdint.h>
|
; (fcn) fcn.00016598 () | void fcn_00016598 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_1ch;
| int16_t var_10h;
| int16_t var_4ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00016598 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0001659c mov r7, r2 | r7 = r2;
0x0001659e ldr r2, [pc, 0x1f0] |
0x000165a0 sub sp, 0x50 |
0x000165a2 mov r4, r0 | r4 = r0;
0x000165a4 mov r6, r1 | r6 = r1;
0x000165a6 ldr r3, [pc, 0x1ec] | r3 = *(0x16796);
0x000165a8 add.w sb, sp, 0x1c | sb += var_1ch;
0x000165ac ldr r5, [pc, 0x1e8] |
0x000165ae add r2, pc | r2 = 0x2cd44;
0x000165b0 mov ip, sb |
0x000165b2 ldr.w r8, [pc, 0x1e8] |
0x000165b6 ldr r3, [r2, r3] |
0x000165b8 add r5, pc | r5 = 0x2cd54;
0x000165ba add.w lr, r5, 0x2a8 | lr = r5 + 0x2a8;
0x000165bc ldrb r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x000165be add r8, pc | r8 = 0x2cd60;
0x000165c0 ldr r3, [r3] | r3 = *(0x2cd44);
0x000165c2 str r3, [sp, 0x4c] | var_4ch = r3;
0x000165c4 mov.w r3, 0 | r3 = 0;
0x000165c8 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000165cc stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000165d0 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000165d4 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000165d8 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x000165dc stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000165e0 add.w r0, r5, 0x2d8 | r0 = r5 + 0x2d8;
0x000165e4 movs r2, 3 | r2 = 3;
0x000165e6 movw r1, 0x98d | r1 = 0x98d;
0x000165ea bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000165ee ldr r0, [pc, 0x1b0] |
0x000165f0 movs r2, 0x30 | r2 = 0x30;
0x000165f2 movw r1, 0x98e | r1 = 0x98e;
0x000165f6 add r0, pc | r0 = 0x2cd9c;
0x000165f8 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000165fc cmp r0, 0 |
| if (r0 == 0) {
0x000165fe beq 0x166aa | goto label_2;
| }
0x00016600 mov r5, r0 | r5 = r0;
0x00016602 mov lr, r0 | lr = r0;
0x00016604 add.w sl, sp, 0x4c | sl += var_4ch;
| do {
0x00016608 mov ip, sb |
0x0001660a add.w lr, lr, 0x10 | lr += 0x10;
0x0001660e ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00016612 add.w sb, sb, 0x10 | sb += var_10h;
0x00016616 cmp ip, sl |
0x00016618 str r0, [lr, -0x10] | *((lr - 0x10)) = r0;
0x0001661c str r1, [lr, -0xc] | *((lr - 0xc)) = r1;
0x00016620 str r2, [lr, -0x8] | *((lr - 0x8)) = r2;
0x00016624 str r3, [lr, -0x4] | *((lr - 0x4)) = r3;
0x00016628 bne 0x16608 |
| } while (ip != sl);
0x0001662a cmp r7, 0 |
| if (r7 != 0) {
0x0001662c bne 0x166da | goto label_3;
| }
0x0001662e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00016630 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
| do {
0x00016632 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00016634 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x00016636 ldrb r3, [r4] | r3 = *(r4);
0x00016638 ubfx r3, r3, 1, 2 | r3 = (r3 >> 1) & ((1 << 2) - 1);
0x0001663c str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0001663e ldrb r3, [r4] | r3 = *(r4);
0x00016640 and r3, r3, 1 | r3 &= 1;
0x00016644 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x00016646 ldrb r3, [r4] | r3 = *(r4);
0x00016648 and r2, r3, 6 | r2 = r3 & 6;
0x0001664c cmp r2, 4 |
0x0001664e ite ne |
| if (r2 != 4) {
0x00016650 ubfxne r3, r3, 3, 1 | __asm ("ubfxne r3, r3, 3, 1");
| }
| if (r2 == 4) {
0x00016654 movs r3, 0 | r3 = 0;
| }
0x00016656 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00016658 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001665a str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x0001665c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0001665e cmp r3, 4 |
| if (r3 > 4) {
0x00016660 bgt 0x166fa | goto label_4;
| }
| label_0:
0x00016662 ldr r3, [r6, 0x78] | r3 = *((r6 + 0x78));
0x00016664 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| if (r3 == 0) {
0x00016666 cbnz r3, 0x1666e |
0x00016668 ldrb r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0001666a lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x0001666c bmi 0x16714 | goto label_5;
| }
| }
| label_1:
0x0001666e ldr r0, [pc, 0x134] |
0x00016670 movs r2, 0x10 | r2 = 0x10;
0x00016672 movw r1, 0x9bc | r1 = 0x9bc;
0x00016676 add r0, pc | r0 = 0x2ce20;
0x00016678 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0001667c mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x0001667e cbz r0, 0x166aa |
0x00016680 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00016682 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00016684 strd r5, r0, [r7] | __asm ("strd r5, r0, [r7]");
0x00016688 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0001668a blx 0x3258 | unlink (r0);
0x0001668e ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00016690 mov r1, r7 | r1 = r7;
0x00016692 adds r3, 9 | r3 += 9;
0x00016694 adds r2, r3, r0 | r2 = r3 + r0;
0x00016696 ldr r0, [r6, 0x78] | r0 = *((r6 + 0x78));
0x00016698 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x0001669c ldr.w r3, [r6, 0x84] | r3 = *((r6 + 0x84));
| if (r3 == 0) {
0x000166a0 cbz r3, 0x166aa | goto label_2;
| }
0x000166a2 mov r1, r7 | r1 = r7;
0x000166a4 mov r0, r6 | r0 = r6;
0x000166a6 bl 0xab9c | fcn_0000ab9c (r0, r1);
| }
| label_2:
0x000166aa ldr r1, [pc, 0xfc] |
0x000166ac movs r2, 0 | r2 = 0;
0x000166ae ldr r3, [pc, 0xe4] | r3 = *(0x16796);
0x000166b0 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x000166b2 add r1, pc | r1 = 0x2ce60;
0x000166b4 ldr r3, [r1, r3] | r3 = *(0x2ce60);
0x000166b6 ldr r1, [r3] | r1 = *(0x2ce60);
0x000166b8 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000166ba eors r1, r3 | r1 ^= r3;
0x000166bc mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x000166c0 bne 0x1678c | goto label_6;
| }
0x000166c2 ldr r0, [pc, 0xe8] |
0x000166c4 movs r3, 3 | r3 = 3;
0x000166c6 movw r1, 0x9cb | r1 = 0x9cb;
0x000166ca add r0, pc |
0x000166cc add.w r0, r0, 0x2d8 | r0 = 0x2d154;
0x000166d0 add sp, 0x50 |
0x000166d2 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000166d6 b.w 0xfbf4 | void (*0xfbf4)() ();
| label_3:
0x000166da ldr r7, [pc, 0xd4] |
0x000166dc movw r1, 0x994 | r1 = 0x994;
0x000166e0 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000166e2 add r7, pc | r7 = 0x2ce98;
0x000166e4 mov r0, r7 | r0 = r7;
0x000166e6 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000166ea str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x000166ec cmp r0, 0 |
| if (r0 == 0) {
0x000166ee beq 0x1675e | goto label_7;
| }
0x000166f0 ldrd r1, r2, [r4, 0x10] | __asm ("ldrd r1, r2, [r4, 0x10]");
0x000166f4 blx 0x32a0 | pthread_cond_signal ();
0x000166f8 b 0x16632 |
| } while (1);
| label_4:
0x000166fa add r7, sp, 8 | r7 += var_8h;
0x000166fc add.w r1, r4, 0x1c | r1 = r4 + 0x1c;
0x00016700 mov r0, r7 | r0 = r7;
0x00016702 blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x00016706 ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x0001670a add.w ip, r5, 0x20 |
0x0001670e stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00016712 b 0x16662 | goto label_0;
| label_5:
0x00016714 ldr r3, [pc, 0x9c] | r3 = *(0x167b4);
0x00016716 mov r1, r6 | r1 = r6;
0x00016718 ldr r2, [pc, 0x9c] |
0x0001671a ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0001671e add r2, pc | r2 = 0x2ceda;
0x00016720 ldr r0, [r3] | r0 = *(0x167b4);
0x00016722 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
| if (r0 == 0) {
0x00016726 cbz r0, 0x1677c | goto label_8;
| }
0x00016728 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0001672a ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0001672c ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0001672e ldr r3, [r2] | r3 = *(r2);
| if (r1 == 0) {
0x00016730 cbz r1, 0x1676c | goto label_9;
| }
0x00016732 ldr r2, [r2, 0x78] | r2 = *((r2 + 0x78));
0x00016734 mov.w r1, -1 | r1 = -1;
0x00016738 movs r0, 3 | r0 = 3;
0x0001673a ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x0001673c str r2, [sp] | *(sp) = r2;
0x0001673e ldr r2, [pc, 0x7c] |
0x00016740 ldrd sb, r8, [r4, 4] | __asm ("ldrd sb, r8, [r4, 4]");
0x00016744 add r2, pc | r2 = 0x2cf06;
0x00016746 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001674a mov r2, r8 | r2 = r8;
0x0001674c ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x0001674e ldr.w r8, [r7, 0x14] | r8 = *((r7 + 0x14));
0x00016752 mov r1, sb | r1 = sb;
0x00016754 mov r3, r5 | r3 = r5;
0x00016756 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00016758 cmp r0, 0 |
| if (r0 == 0) {
0x0001675a beq 0x1666e | goto label_1;
| }
0x0001675c b 0x166aa | goto label_2;
| label_7:
0x0001675e mov r2, r5 | r2 = r5;
0x00016760 movw r1, 0x996 | r1 = 0x996;
0x00016764 mov r0, r7 | r0 = r7;
0x00016766 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x0001676a b 0x166aa | goto label_2;
| label_9:
0x0001676c ldr r2, [pc, 0x50] |
0x0001676e mov.w r1, -1 | r1 = -1;
0x00016772 movs r0, 5 | r0 = 5;
0x00016774 add r2, pc | r2 = 0x2cf38;
0x00016776 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001677a b 0x1666e | goto label_1;
| label_8:
0x0001677c ldr r2, [pc, 0x44] |
0x0001677e mov.w r1, -1 | r1 = -1;
0x00016782 movs r0, 5 | r0 = 5;
0x00016784 add r2, pc | r2 = 0x2cf4c;
0x00016786 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001678a b 0x1666e | goto label_1;
| label_6:
0x0001678c blx 0x348c | fprintf_chk ()
0x00016790 strh r2, [r4, 0x36] | *((r4 + 0x36)) = r2;
0x00016792 movs r1, r0 | r1 = r0;
0x00016794 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00016796 movs r0, r0 |
0x00016798 ldr r0, [r0, 0x7c] | r0 = *((r0 + 0x7c));
0x0001679a movs r0, r0 |
0x0001679c strh r2, [r2, 0x36] | *((r2 + 0x36)) = r2;
0x0001679e movs r1, r0 | r1 = r0;
0x000167a0 str r6, [r7, 0x54] | *((r7 + 0x54)) = r6;
0x000167a2 movs r0, r0 |
0x000167a4 str r6, [r7, 0x4c] | *((r7 + 0x4c)) = r6;
0x000167a6 movs r0, r0 |
0x000167a8 strh r6, [r3, 0x2e] | *((r3 + 0x2e)) = r6;
0x000167aa movs r1, r0 | r1 = r0;
0x000167ac ldr r6, [r5, 0x68] | r6 = *((r5 + 0x68));
0x000167ae movs r0, r0 |
0x000167b0 str r2, [r2, 0x48] | *((r2 + 0x48)) = r2;
0x000167b2 movs r0, r0 |
0x000167b4 lsls r0, r4, 0xd | r0 = r4 << 0xd;
0x000167b6 movs r0, r0 |
0x000167b8 stm r6!, {r0, r1, r2, r3, r4} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
| *((r6! + 16)) = r4;
0x000167ba vshll.u32 q11, d12, 0x1f | __asm ("vshll.u32 q11, d12, 0x1f");
0x000167be movs r0, r0 |
0x000167c0 ldr r4, [r5, 0x44] | r4 = *((r5 + 0x44));
0x000167c2 movs r0, r0 |
0x000167c4 ldr r0, [r3, 0x40] | r0 = *((r3 + 0x40));
0x000167c6 movs r0, r0 |
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x16800).
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-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x17734 */
| #include <stdint.h>
|
; (fcn) fcn.00017734 () | void fcn_00017734 (int16_t arg1) {
| int16_t var_34h_2;
| r0 = arg1;
0x00017734 blmi 0x6e9fa4 | __asm ("blmi aav.0x00017554");
0x00017738 ldr.w ip, [pc, 0x6c] |
0x0001773c add r2, pc | r2 += pc;
0x0001773e push {r4, lr} |
0x00017740 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00017742 sub sp, 0x38 |
0x00017744 add ip, pc |
0x00017746 mov r4, r0 | r4 = r0;
0x00017748 add.w ip, ip, 0x328 | ip = 0x2f218;
0x0001774c mov lr, sp | lr = sp;
0x0001774e ldr r3, [r3] | r3 = *(r3);
0x00017750 str r3, [sp, 0x34] | var_34h_2 = r3;
0x00017752 mov.w r3, 0 | r3 = 0;
0x00017756 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0001775a stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0001775e ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00017762 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x00017766 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0001776a stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0001776e movs r2, 1 | r2 = 1;
0x00017770 ldr.w r3, [ip] | r3 = imp._ITM_deregisterTMCloneTable;
0x00017774 mov r1, sp | r1 = sp;
0x00017776 ldr.w r0, [r4, 0x98] | r0 = *((r4 + 0x98));
0x0001777a str.w r3, [lr] | __asm ("str.w r3, [lr]");
0x0001777e bl 0x16800 | fcn_00016800 (r0, r1, r2);
0x00017782 ldr r2, [pc, 0x28] |
0x00017784 ldr r3, [pc, 0x1c] | r3 = *(0x177a4);
0x00017786 add r2, pc | r2 = 0x2ef38;
0x00017788 ldr r3, [r2, r3] | r3 = *(0x2ef38);
0x0001778a ldr r2, [r3] | r2 = *(0x2ef38);
0x0001778c ldr r3, [sp, 0x34] | r3 = var_34h_2;
0x0001778e eors r2, r3 | r2 ^= r3;
0x00017790 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00017794 bne 0x1779a |
0x00017796 add sp, 0x38 |
0x00017798 pop {r4, pc} |
| }
0x0001779a blx 0x348c | fprintf_chk ()
0x0001779e nop |
0x000177a0 strb r4, [r2, 0x15] | *((r2 + 0x15)) = r4;
0x000177a2 movs r1, r0 | r1 = r0;
0x000177a4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000177a6 movs r0, r0 |
0x000177a8 ldrsh r4, [r6, r0] | r4 = *((r6 + r0));
0x000177aa movs r0, r0 |
0x000177ac strb r2, [r1, 0x14] | *((r1 + 0x14)) = r2;
0x000177ae movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x177b0 */
| #include <stdint.h>
|
; (fcn) fcn.000177b0 () | void fcn_000177b0 (int16_t arg1) {
| int16_t var_4h_3;
| int16_t var_8h_2;
| int16_t var_ch_2;
| r0 = arg1;
| if (? < ?) {
0x000177b0 andhs r4, r3, 0x1a800 | r4 = r3 & 0x1a800;
| }
0x000177b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000177b8 mov sl, r0 | sl = r0;
0x000177ba ldr r4, [pc, 0x1a4] |
0x000177bc sub sp, 0x14 |
0x000177be add r3, pc | r3 += pc;
0x000177c0 movw r1, 0xa34 | r1 = 0xa34;
0x000177c4 add.w r0, r3, 0x3a0 | r0 = r3 + 0x3a0;
0x000177c8 ldr r3, [pc, 0x198] | r3 = *(0x17964);
0x000177ca add r4, pc | r4 = 0x2f130;
0x000177cc ldr.w sb, [pc, 0x198] |
0x000177d0 ldr r3, [r4, r3] |
0x000177d2 add sb, pc | sb = 0x2f13e;
0x000177d4 ldr r3, [r3] | r3 = *(0x2f130);
0x000177d6 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000177d8 mov.w r3, 0 | r3 = 0;
0x000177dc bl 0xfb54 | r0 = fcn_0000fb54 (r0, r1, r2);
0x000177e0 blx 0x3564 | SSL_pending ();
0x000177e4 ldr r3, [pc, 0x184] | r3 = *(0x1796c);
0x000177e6 ldr.w r3, [sb, r3] |
0x000177ea ldr r3, [r3] | r3 = *(0x2f13e);
0x000177ec cmp r3, r0 |
| if (r3 != r0) {
0x000177ee beq 0x177fc |
0x000177f0 ldr r3, [pc, 0x17c] |
0x000177f2 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x000177f6 ldr r3, [r3] | r3 = *(0x17970);
0x000177f8 cmp r3, r0 |
| if (r3 != r0) {
0x000177fa bne 0x178f0 | goto label_5;
| }
| }
0x000177fc mov.w fp, 0 |
| label_2:
0x00017800 ldr.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x00017804 ldr r3, [pc, 0x16c] | r3 = *(0x17974);
0x00017806 ldr r5, [r2, 0x5c] | r5 = *((r2 + 0x5c));
0x00017808 str r5, [sp, 8] | var_8h_2 = r5;
0x0001780a ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x0001780e ldr r0, [r3] | r0 = *(0x17974);
0x00017810 str r3, [sp, 4] | var_4h_3 = r3;
0x00017812 blx 0x3644 | r0 = fcn_00003644 ();
0x00017816 cmp r0, 0 |
| if (r0 != 0) {
0x00017818 bne.w 0x17942 | goto label_6;
| }
| label_4:
0x0001781c ldr r3, [sp, 8] | r3 = var_8h_2;
0x0001781e movw r2, 0xffff | r2 = 0xffff;
0x00017822 ldr r6, [pc, 0x154] |
0x00017824 add r4, sp, 8 | r4 += var_8h_2;
0x00017826 movw r8, 0xffff | r8 = 0xffff;
0x0001782a cmp r3, r2 |
0x0001782c ite ne |
| if (r3 == r2) {
0x0001782e addne r3, 1 | r3++;
| }
| if (r3 != r2) {
0x00017830 moveq r3, 1 | r3 = 1;
| }
0x00017832 str r3, [sp, 8] | var_8h_2 = r3;
0x00017834 add r6, pc | r6 = 0x2f1b2;
0x00017836 ldr r3, [pc, 0x144] | r3 = *(0x1797e);
0x00017838 ldr.w r7, [sb, r3] | r7 = *((sb + r3));
0x0001783c b 0x1784e |
| while (r0 != 0) {
| label_0:
0x0001783e ldr r3, [sp, 8] | r3 = var_8h_2;
0x00017840 cmp r3, r8 |
0x00017842 ite ne |
| if (r3 == r8) {
0x00017844 addne r3, 1 | r3++;
| }
| if (r3 != r8) {
0x00017846 moveq r3, 1 | r3 = 1;
| }
0x00017848 cmp r3, r5 |
0x0001784a str r3, [sp, 8] | var_8h_2 = r3;
| if (r3 == r5) {
0x0001784c beq 0x178cc | goto label_7;
| }
0x0001784e ldr r0, [r7] | r0 = *(r7);
0x00017850 mov r2, r6 | r2 = r6;
0x00017852 mov r1, r4 | r1 = r4;
0x00017854 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x00017858 cmp r0, 0 |
0x0001785a bne 0x1783e |
| }
0x0001785c ldr.w r1, [sl, 0xc] | r1 = *((sl + 0xc));
0x00017860 ldr r3, [pc, 0x11c] | r3 = *(0x17980);
0x00017862 ldr r0, [r1, 0x74] | r0 = *((r1 + 0x74));
0x00017864 mov r1, r4 | r1 = r4;
0x00017866 ldr.w r2, [sb, r3] | r2 = *((sb + r3));
0x0001786a bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x0001786e cmp r0, 0 |
| if (r0 != 0) {
0x00017870 bne 0x1783e | goto label_0;
| }
0x00017872 ldr.w r0, [sl, 0xe4] | r0 = *((sl + 0xe4));
0x00017876 mov r2, r6 | r2 = r6;
0x00017878 mov r1, r4 | r1 = r4;
0x0001787a bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x0001787e cmp r0, 0 |
| if (r0 != 0) {
0x00017880 bne 0x1783e | goto label_0;
| }
0x00017882 ldr r3, [sp, 4] | r3 = var_4h_3;
0x00017884 ldr r0, [r3] | r0 = *(r3);
0x00017886 blx 0x35b4 | r0 = fcn_000035b4 ();
| if (r0 != 0) {
0x0001788a cbnz r0, 0x178dc | goto label_8;
| }
| do {
| label_1:
0x0001788c ldr r3, [sp, 8] | r3 = var_8h_2;
| if (r3 != 0) {
0x0001788e cbz r3, 0x17896 |
0x00017890 ldr.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x00017894 str r3, [r2, 0x5c] | *((r2 + 0x5c)) = r3;
| }
0x00017896 cmp.w fp, 0 |
| if (fp != 0) {
0x0001789a bne 0x1791e | goto label_9;
| }
| label_3:
0x0001789c ldr r0, [pc, 0xe4] |
0x0001789e movs r3, 3 | r3 = 3;
0x000178a0 mov r2, r4 | r2 = r4;
0x000178a2 movw r1, 0xa53 | r1 = 0xa53;
0x000178a6 add r0, pc |
0x000178a8 add.w r0, r0, 0x3a0 | r0 = 0x2f5ce;
0x000178ac bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000178b0 ldr r2, [pc, 0xd4] |
0x000178b2 ldr r3, [pc, 0xb0] | r3 = *(0x17966);
0x000178b4 ldr r0, [sp, 8] | r0 = var_8h_2;
0x000178b6 add r2, pc | r2 = 0x2f242;
0x000178b8 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x000178ba ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x000178bc ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000178be eors r2, r3 | r2 ^= r3;
0x000178c0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000178c4 bne 0x17956 | goto label_10;
| }
0x000178c6 add sp, 0x14 |
0x000178c8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x000178cc movs r3, 0 | r3 = 0;
0x000178ce str r3, [sp, 8] | var_8h_2 = r3;
0x000178d0 ldr r3, [sp, 4] | r3 = var_4h_3;
0x000178d2 ldr r0, [r3] | r0 = *(r3);
0x000178d4 blx 0x35b4 | r0 = fcn_000035b4 ();
0x000178d8 cmp r0, 0 |
0x000178da beq 0x1788c |
| } while (r0 == 0);
| label_8:
0x000178dc blx 0x2f10 | strerror (r0);
0x000178e0 ldr r2, [pc, 0xa8] |
0x000178e2 mov r3, r0 | r3 = r0;
0x000178e4 movs r1, 0 | r1 = 0;
0x000178e6 movs r0, 5 | r0 = 5;
0x000178e8 add r2, pc | r2 = 0x2f278;
0x000178ea bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000178ee b 0x1788c | goto label_1;
| label_5:
0x000178f0 ldr r3, [pc, 0x9c] | r3 = *(0x17990);
0x000178f2 mov.w fp, 1 |
0x000178f6 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x000178fa ldr r0, [r3] | r0 = *(0x17990);
0x000178fc blx 0x3644 | r0 = fcn_00003644 ();
0x00017900 cmp r0, 0 |
| if (r0 == 0) {
0x00017902 beq.w 0x17800 | goto label_2;
| }
0x00017906 blx 0x2f10 | strerror (r0);
0x0001790a ldr r2, [pc, 0x88] |
0x0001790c mov r3, r0 | r3 = r0;
0x0001790e movs r1, 0 | r1 = 0;
0x00017910 movs r0, 5 | r0 = 5;
0x00017912 mov.w fp, 1 |
0x00017916 add r2, pc | r2 = 0x2f2b0;
0x00017918 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001791c b 0x17800 | goto label_2;
| label_9:
0x0001791e ldr r3, [pc, 0x70] | r3 = *(0x17992);
0x00017920 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00017924 ldr r0, [r3] | r0 = *(0x17992);
0x00017926 blx 0x35b4 | r0 = fcn_000035b4 ();
0x0001792a cmp r0, 0 |
| if (r0 == 0) {
0x0001792c beq 0x1789c | goto label_3;
| }
0x0001792e blx 0x2f10 | strerror (r0);
0x00017932 ldr r2, [pc, 0x64] |
0x00017934 mov r3, r0 | r3 = r0;
0x00017936 movs r1, 0 | r1 = 0;
0x00017938 movs r0, 5 | r0 = 5;
0x0001793a add r2, pc | r2 = 0x2f2d8;
0x0001793c bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00017940 b 0x1789c | goto label_3;
| label_6:
0x00017942 blx 0x2f10 | strerror (r0);
0x00017946 ldr r2, [pc, 0x54] |
0x00017948 mov r3, r0 | r3 = r0;
0x0001794a movs r1, 0 | r1 = 0;
0x0001794c movs r0, 5 | r0 = 5;
0x0001794e add r2, pc | r2 = 0x2f2f0;
0x00017950 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00017954 b 0x1781c | goto label_4;
| label_10:
0x00017956 blx 0x348c | fprintf_chk ()
0x0001795a nop |
0x0001795c ldrb r2, [r7, r6] | r2 = *((r7 + r6));
0x0001795e movs r0, r0 |
0x00017960 strb r6, [r0, 0x13] | *((r0 + 0x13)) = r6;
0x00017962 movs r1, r0 | r1 = r0;
0x00017964 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00017966 movs r0, r0 |
0x00017968 strb r6, [r7, 0x12] | *((r7 + 0x12)) = r6;
0x0001796a movs r1, r0 | r1 = r0;
0x0001796c lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x0001796e movs r0, r0 |
0x00017970 lsls r4, r4, 0xb | r4 <<= 0xb;
0x00017972 movs r0, r0 |
0x00017974 lsls r0, r1, 0xc | r0 = r1 << 0xc;
0x00017976 movs r0, r0 |
0x00017978 push {r0, r2, r4, lr} |
0x0001797a invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x17d04 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00017d04 () | uint32_t fcn_00017d04 (int16_t arg_40h, int16_t arg_44h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int32_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00017d04 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00017d08 mov r6, r2 | r6 = r2;
0x00017d0a ldr r2, [pc, 0xfc] |
0x00017d0c mov r5, r3 | r5 = r3;
0x00017d0e mov r4, r0 | r4 = r0;
0x00017d10 sub sp, 0x20 |
0x00017d12 ldr r3, [pc, 0xf8] | r3 = *(0x17e0e);
0x00017d14 mov sb, r1 | sb = r1;
0x00017d16 ldr r0, [pc, 0xf8] |
0x00017d18 add r2, pc | r2 = 0x2fb26;
0x00017d1a movs r1, 0x65 | r1 = 0x65;
0x00017d1c ldr r7, [sp, 0x40] | r7 = *(arg_40h);
0x00017d1e ldr r3, [r2, r3] |
0x00017d20 movs r2, 3 | r2 = 3;
0x00017d22 add r0, pc | r0 = 0x2fb38;
0x00017d24 ldr.w r8, [sp, 0x44] | r8 = *(arg_44h);
0x00017d28 adds r0, 0x20 | r0 += 0x20;
0x00017d2a ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00017d2c str r3, [sp, 0x1c] | var_1ch = r3;
0x00017d2e mov.w r3, 0 | r3 = 0;
0x00017d32 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00017d36 cmp.w sb, 0 |
| if (sb == 0) {
0x00017d3a beq 0x17ddc | goto label_3;
| }
0x00017d3c mov r0, sb | r0 = sb;
0x00017d3e mov r1, r5 | r1 = r5;
0x00017d40 blx 0x3704 | r0 = fcn_00003704 ();
0x00017d44 mov ip, r0 |
0x00017d46 mov sb, r0 | sb = r0;
0x00017d48 sub.w ip, ip, 2 |
0x00017d4c str.w sb, [sp, 0x18] | __asm ("str.w sb, [var_18h]");
0x00017d50 cmp.w ip, 1 |
| if (ip < 1) {
0x00017d54 bls 0x17df2 | goto label_4;
| }
| label_1:
0x00017d56 ldr r1, [pc, 0xbc] |
0x00017d58 mov r0, r4 | r0 = r4;
0x00017d5a add r1, pc | r1 = 0x2fb74;
0x00017d5c blx 0x372c | r0 = cxa_finalize ();
| if (r0 != 0) {
0x00017d60 cbnz r0, 0x17da8 | goto label_5;
| }
0x00017d62 cbz r7, 0x17d6c |
| while (r7 != 0) {
0x00017d64 mov r1, r8 | r1 = r8;
0x00017d66 mov r0, r7 | r0 = r7;
0x00017d68 blx 0x3324 | pthread_mutex_destroy ();
| label_0:
0x00017d6c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00017d6e bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x00017d72 cmp r3, 1 |
0x00017d74 itt eq |
| if (r3 != 1) {
0x00017d76 mvneq r3, 2 | r3 = ~2;
| }
| if (r3 == 1) {
0x00017d7a str r3, [sp, 0x18] | var_18h = r3;
| }
| label_2:
0x00017d7c ldr r0, [pc, 0x98] |
0x00017d7e movs r3, 3 | r3 = 3;
0x00017d80 add r2, sp, 0x18 | r2 += var_18h;
0x00017d82 movs r1, 0x79 | r1 = 0x79;
0x00017d84 add r0, pc | r0 = 0x2fba0;
0x00017d86 adds r0, 0x20 | r0 += 0x20;
0x00017d88 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00017d8c ldr r2, [pc, 0x8c] |
0x00017d8e ldr r3, [pc, 0x7c] | r3 = *(0x17e0e);
0x00017d90 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00017d92 add r2, pc | r2 = 0x2fbb2;
0x00017d94 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00017d96 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00017d98 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00017d9a eors r2, r3 | r2 ^= r3;
0x00017d9c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00017da0 bne 0x17e02 | goto label_6;
| }
0x00017da2 add sp, 0x20 |
0x00017da4 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x00017da8 blx 0x3738 | r0 = fdelt_chk ();
0x00017dac ldr.w sl, [r0] | sl = *(r0);
0x00017db0 mov r0, sl | r0 = sl;
0x00017db2 blx 0x2f10 | strerror (r0);
0x00017db6 ldr r3, [pc, 0x68] |
0x00017db8 mov.w r1, -1 | r1 = -1;
0x00017dbc ldr r2, [pc, 0x64] |
0x00017dbe strd sl, r0, [sp, 0x10] | __asm ("strd sl, r0, [var_10h]");
0x00017dc2 movs r0, 3 | r0 = 3;
0x00017dc4 add r3, pc | r3 = 0x2fbea;
0x00017dc6 strd r6, r5, [sp, 8] | __asm ("strd r6, r5, [var_8h]");
0x00017dca add r2, pc | r2 = 0x2fbf2;
0x00017dcc adds r3, 4 | r3 += 4;
0x00017dce strd sb, r4, [sp] | __asm ("strd sb, r4, [sp]");
0x00017dd2 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00017dd6 cmp r7, 0 |
0x00017dd8 bne 0x17d64 |
| }
0x00017dda b 0x17d6c | goto label_0;
| label_3:
0x00017ddc blx 0x2f74 | r0 = fcn_00002f74 ();
0x00017de0 mov ip, r0 |
0x00017de2 mov sb, r0 | sb = r0;
0x00017de4 sub.w ip, ip, 2 |
0x00017de8 str.w sb, [sp, 0x18] | __asm ("str.w sb, [var_18h]");
0x00017dec cmp.w ip, 1 |
| if (ip > 1) {
0x00017df0 bhi 0x17d56 | goto label_1;
| }
| label_4:
0x00017df2 ldr r2, [pc, 0x34] |
0x00017df4 mov.w r1, -1 | r1 = -1;
0x00017df8 movs r0, 3 | r0 = 3;
0x00017dfa add r2, pc | r2 = 0x2fc28;
0x00017dfc bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00017e00 b 0x17d7c | goto label_2;
| label_6:
0x00017e02 blx 0x348c | fprintf_chk ()
0x00017e06 nop |
0x00017e08 ldr r0, [r7, 0x74] | r0 = *((r7 + 0x74));
0x00017e0a movs r1, r0 | r1 = r0;
0x00017e0c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00017e0e movs r0, r0 |
0x00017e10 str r6, [r1, 0x78] | *((r1 + 0x78)) = r6;
0x00017e12 movs r0, r0 |
0x00017e14 movs r7, 0xe6 | r7 = 0xe6;
0x00017e16 movs r0, r0 |
0x00017e18 str r4, [r5, 0x70] | *((r5 + 0x70)) = r4;
0x00017e1a movs r0, r0 |
0x00017e1c ldr r6, [r7, 0x6c] | r6 = *((r7 + 0x6c));
0x00017e1e movs r1, r0 | r1 = r0;
0x00017e20 ldr r7, [pc, 0xc0] | r7 = *(0x17ee4);
0x00017e22 movs r1, r1 |
0x00017e24 ldrb r2, [r7, r0] | r2 = *((r7 + r0));
0x00017e26 movs r0, r0 |
0x00017e28 ldrh r2, [r4, r7] | r2 = *((r4 + r7));
0x00017e2a movs r0, r0 |
0x00017e2c ldr r1, [pc, 0x28] |
0x00017e2e movs r2, 0 | r2 = 0;
0x00017e30 mov r3, r2 | r3 = r2;
0x00017e32 add r1, pc | r1 = 0x2fc8e;
0x00017e34 b 0x17e40 |
| while (r2 != r0) {
0x00017e36 adds r3, 1 | r3++;
0x00017e38 cmp r3, 0x34 |
| if (r3 == 0x34) {
0x00017e3a beq 0x17e50 | goto label_7;
| }
0x00017e3c ldr.w r2, [r1, r3, lsl 3] | offset_0 = r3 << 3;
| r2 = *((r1 + offset_0));
0x00017e40 cmp r2, r0 |
0x00017e42 bne 0x17e36 |
| }
0x00017e44 ldr r2, [pc, 0x14] |
0x00017e46 add r2, pc | r2 = 0x2fca6;
0x00017e48 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x00017e4c ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00017e4e bx lr | return r0;
| label_7:
0x00017e50 ldr r0, [pc, 0xc] |
0x00017e52 add r0, pc | r0 = 0x2fcb6;
0x00017e54 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x18030 */
| #include <stdint.h>
|
; (fcn) fcn.00018030 () | void fcn_00018030 () {
| int16_t var_4h;
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
0x00018030 push {r4, r5, r6, r7, lr} |
0x00018032 movs r1, r3 | r1 = r3;
0x00018034 movs r0, r3 | r0 = r3;
0x00018036 sub sp, 0x1c |
0x00018038 movs r4, 0 | r4 = 0;
0x0001803a movw r1, 0x1c1 | r1 = 0x1c1;
0x0001803e ldr r3, [pc, 0x144] |
0x00018040 add r7, sp, 0x10 | r7 += var_10h;
0x00018042 ldr r0, [pc, 0x144] |
0x00018044 add r5, pc | r5 += pc;
0x00018046 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00018048 add r0, pc | r0 = 0x301d6;
0x0001804a adds r0, 0x58 | r0 += 0x58;
0x0001804c ldr r3, [r3] | r3 = *(0x18186);
0x0001804e str r3, [sp, 0x14] | var_14h = r3;
0x00018050 mov.w r3, 0 | r3 = 0;
0x00018054 str r4, [sp, 0xc] | var_ch = r4;
0x00018056 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0001805a ldr r3, [pc, 0x130] |
0x0001805c add r3, pc |
0x0001805e ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018060 cmp r3, 0 |
| if (r3 != 0) {
0x00018062 beq 0x18104 |
0x00018064 mov r2, r4 | r2 = r4;
0x00018066 movs r1, 0 | r1 = 0;
0x00018068 movs r0, 0 | r0 = 0;
0x0001806a blx 0x34f8 | r0 = strtok_r ();
0x0001806e cmp r0, 1 |
0x00018070 mov.w r2, 0 | r2 = 0;
0x00018074 ite ne |
| if (r0 == 1) {
0x00018076 movne r3, -1 | r3 = -1;
| }
| if (r0 == 1) {
0x0001807a str r0, [sp, 0xc] | var_ch = r0;
| }
0x0001807c mov.w r1, 0 | r1 = 0;
0x00018080 mov.w r0, 2 | r0 = 2;
0x00018084 it ne |
| if (r0 == 1) {
0x00018086 strne r3, [sp, 0xc] | var_ch = r3;
| }
0x00018088 blx 0x3650 | fcn_00003650 ();
0x0001808c movs r0, 2 | r0 = 2;
0x0001808e movs r2, 0 | r2 = 0;
0x00018090 movs r1, 0 | r1 = 0;
0x00018092 movt r0, 0x20 | r0 = (r0 & 0xFFFF) | 0x200000;
0x00018096 blx 0x34f8 | strtok_r ();
0x0001809a movs r2, 0 | r2 = 0;
0x0001809c movs r1, 0 | r1 = 0;
0x0001809e movs r0, 0xc | r0 = 0xc;
0x000180a0 blx 0x3650 | fcn_00003650 ();
0x000180a4 ldr r0, [pc, 0xe8] |
0x000180a6 movs r2, 0x18 | r2 = 0x18;
0x000180a8 movw r1, 0x1d3 | r1 = 0x1d3;
0x000180ac add r0, pc | r0 = 0x30240;
0x000180ae bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000180b2 ldr r3, [pc, 0xe0] |
0x000180b4 mov r4, r0 | r4 = r0;
0x000180b6 add r3, pc | r3 = 0x30250;
0x000180b8 str.w r0, [r3, 0x90] | __asm ("str.w r0, [r3, 0x90]");
| if (r0 == 0) {
0x000180bc cbnz r0, 0x180c6 |
0x000180be mov.w r3, -1 | r3 = -1;
0x000180c2 str r3, [sp, 0xc] | var_ch = r3;
0x000180c4 b 0x1814e | goto label_0;
| }
0x000180c6 ldr r6, [pc, 0xd0] |
0x000180c8 movs r5, 0 | r5 = 0;
0x000180ca movs r2, 3 | r2 = 3;
0x000180cc str r5, [r0] | *(r0) = r5;
0x000180ce str r5, [r0, 4] | *((r0 + 4)) = r5;
0x000180d0 mov.w r1, 0x15c | r1 = 0x15c;
0x000180d4 add r6, pc | r6 = 0x30272;
0x000180d6 str r5, [r0, 8] | *((r0 + 8)) = r5;
0x000180d8 adds r6, 0x30 | r6 += 0x30;
0x000180da str r5, [r0, 0xc] | *((r0 + 0xc)) = r5;
0x000180dc str r5, [r0, 0x10] | *((r0 + 0x10)) = r5;
0x000180de add r7, sp, 0x10 | r7 += var_10h;
0x000180e0 str r5, [r0, 0x14] | *((r0 + 0x14)) = r5;
0x000180e2 mov r0, r6 | r0 = r6;
0x000180e4 str r5, [sp, 0x10] | var_10h = r5;
0x000180e6 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000180ea mov r1, r5 | r1 = r5;
0x000180ec mov r0, r4 | r0 = r4;
0x000180ee blx 0x3384 | r0 = strstr (r0, r1);
0x000180f2 mov r1, r0 | r1 = r0;
0x000180f4 movs r3, 3 | r3 = 3;
0x000180f6 str r1, [sp, 0x10] | var_10h = r1;
0x000180f8 mov r2, r7 | r2 = r7;
0x000180fa mov r0, r6 | r0 = r6;
0x000180fc mov.w r1, 0x162 | r1 = 0x162;
0x00018100 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
| }
0x00018104 ldr r4, [pc, 0x94] |
0x00018106 movs r5, 0 | r5 = 0;
0x00018108 ldr r6, [pc, 0x94] |
0x0001810a movs r2, 3 | r2 = 3;
0x0001810c mov.w r1, 0x15c | r1 = 0x15c;
0x00018110 str r5, [sp, 0x10] | var_10h = r5;
0x00018112 add r4, pc | r4 = 0x302b2;
0x00018114 adds r4, 0x30 | r4 += 0x30;
0x00018116 add r6, pc | r6 = 0x302ba;
0x00018118 mov r0, r4 | r0 = r4;
0x0001811a bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0001811e mov r1, r5 | r1 = r5;
0x00018120 add.w r0, r6, 0x94 | r0 = r6 + 0x94;
0x00018124 blx 0x3384 | r0 = strstr (r0, r1);
0x00018128 mov r3, r0 | r3 = r0;
0x0001812a mov r2, r7 | r2 = r7;
0x0001812c mov r0, r4 | r0 = r4;
0x0001812e mov.w r1, 0x162 | r1 = 0x162;
0x00018132 str r3, [sp, 0x10] | var_10h = r3;
0x00018134 movs r3, 3 | r3 = 3;
0x00018136 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001813a ldr r2, [pc, 0x68] |
0x0001813c mov r3, r5 | r3 = r5;
0x0001813e mov r1, r5 | r1 = r5;
0x00018140 mov r0, r5 | r0 = r5;
0x00018142 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00018146 add r2, pc | r2 = 0x302f0;
0x00018148 blx 0x2fb0 | fcn_00002fb0 ();
0x0001814c str r0, [r6] | *(r6) = r0;
| label_0:
0x0001814e ldr r0, [pc, 0x58] |
0x00018150 movs r3, 3 | r3 = 3;
0x00018152 add r2, sp, 0xc | r2 += var_ch;
0x00018154 movw r1, 0x1ef | r1 = 0x1ef;
0x00018158 add r0, pc | r0 = 0x30306;
0x0001815a adds r0, 0x58 | r0 += 0x58;
0x0001815c bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018160 ldr r2, [pc, 0x48] |
0x00018162 ldr r3, [pc, 0x20] | r3 = *(0x18186);
0x00018164 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00018166 add r2, pc | r2 = 0x30316;
0x00018168 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x0001816a ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x0001816c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001816e eors r2, r3 | r2 ^= r3;
0x00018170 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00018174 bne 0x1817a |
0x00018176 add sp, 0x1c |
0x00018178 pop {r4, r5, r6, r7, pc} |
| }
0x0001817a blx 0x348c | fprintf_chk ()
0x0001817e nop |
0x00018180 ldr r4, [r1, 0x44] | r4 = *((r1 + 0x44));
0x00018182 movs r1, r0 | r1 = r0;
0x00018184 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00018186 movs r0, r0 |
0x00018188 str r0, [r5, 0x44] | *((r5 + 0x44)) = r0;
0x0001818a movs r0, r0 |
0x0001818c strb r4, [r5, 6] | *((r5 + 6)) = r4;
0x0001818e movs r1, r0 | r1 = r0;
0x00018190 ldr r4, [r3, r7] | r4 = *((r3 + r7));
0x00018192 movs r0, r0 |
0x00018194 ldr r4, [pc, 0xf8] | r4 = *(0x18290);
0x00018196 movs r1, r1 |
0x00018198 str r4, [r3, 0x3c] | *((r3 + 0x3c)) = r4;
0x0001819a movs r0, r0 |
0x0001819c str r6, [r3, 0x38] | *((r3 + 0x38)) = r6;
0x0001819e movs r0, r0 |
0x000181a0 ldr r3, [pc, 0x378] | r3 = *(0x1851c);
0x000181a2 movs r1, r1 |
0x000181a4 ldr r2, [r7, r5] | r2 = *((r7 + r5));
0x000181a6 movs r0, r0 |
0x000181a8 str r0, [r3, 0x34] | *((r3 + 0x34)) = r0;
0x000181aa movs r0, r0 |
0x000181ac ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
0x000181ae movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x181b0 */
| #include <stdint.h>
|
; (fcn) fcn.000181b0 () | void fcn_000181b0 () {
| int16_t var_0h;
| int16_t var_4h;
| if (? < ?) {
0x000181b0 andhs r4, r3, 0x360000 | r4 = r3 & 0x360000;
| }
0x000181b4 ldr r3, [pc, 0xd8] |
0x000181b6 movw r1, 0x1f5 | r1 = 0x1f5;
0x000181ba push {r4, r5, r6, r7, lr} |
0x000181bc sub sp, 0xc |
0x000181be ldr r4, [pc, 0xd4] |
0x000181c0 add r0, pc | r0 += pc;
0x000181c2 ldr r3, [r0, r3] | r3 = *((r0 + r3));
0x000181c4 add r4, pc | r4 = 0x3045e;
0x000181c6 add.w r0, r4, 0x70 | r0 = r4 + 0x70;
0x000181ca ldr r3, [r3] | r3 = *(0x18290);
0x000181cc str r3, [sp, 4] | var_4h = r3;
0x000181ce mov.w r3, 0 | r3 = 0;
0x000181d2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000181d6 ldr r3, [pc, 0xc0] |
0x000181d8 add r3, pc |
0x000181da ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
| if (r3 != 0) {
0x000181dc cbz r3, 0x181e8 |
0x000181de ldr r5, [pc, 0xbc] |
0x000181e0 add r5, pc | r5 = 0x30482;
0x000181e2 ldr.w r6, [r5, 0x90] | r6 = imp._ITM_deregisterTMCloneTable;
| if (r6 != 0) {
0x000181e6 cbnz r6, 0x18248 | goto label_0;
| }
| }
0x000181e8 mov r7, sp | r7 = sp;
| do {
0x000181ea ldr r5, [pc, 0xb4] |
0x000181ec movs r2, 3 | r2 = 3;
0x000181ee mov.w r1, 0x188 | r1 = 0x188;
0x000181f2 movs r6, 0 | r6 = 0;
0x000181f4 str r6, [sp] | *(sp) = r6;
0x000181f6 add r5, pc | r5 = 0x3049c;
0x000181f8 add.w r4, r5, 0x44 | r4 = r5 + 0x44;
0x000181fc mov r0, r4 | r0 = r4;
0x000181fe bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00018202 ldr r0, [pc, 0xa0] |
0x00018204 add r0, pc | r0 = 0x304ae;
0x00018206 adds r0, 0x94 | r0 += 0x94;
0x00018208 blx 0x333c | r0 = raise (r0);
0x0001820c mov r3, r0 | r3 = r0;
0x0001820e mov r2, r7 | r2 = r7;
0x00018210 str r3, [sp] | *(sp) = r3;
0x00018212 mov r0, r4 | r0 = r4;
0x00018214 movs r3, 3 | r3 = 3;
0x00018216 mov.w r1, 0x18e | r1 = 0x18e;
0x0001821a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001821e ldr r2, [pc, 0x88] |
0x00018220 ldr r3, [pc, 0x6c] | r3 = *(0x18290);
0x00018222 add r2, pc | r2 = 0x304d0;
0x00018224 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018226 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018228 ldr r3, [sp, 4] | r3 = var_4h;
0x0001822a eors r2, r3 | r2 ^= r3;
0x0001822c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00018230 bne 0x18286 | goto label_1;
| }
0x00018232 movs r3, 3 | r3 = 3;
0x00018234 mov r2, r6 | r2 = r6;
0x00018236 movw r1, 0x20a | r1 = 0x20a;
0x0001823a add.w r0, r5, 0x70 | r0 = r5 + 0x70;
0x0001823e add sp, 0xc |
0x00018240 pop.w {r4, r5, r6, r7, lr} |
0x00018244 b.w 0xfbf4 | void (*0xfbf4)() ();
| label_0:
0x00018248 adds r4, 0x44 | r4 += 0x44;
0x0001824a movs r3, 0 | r3 = 0;
0x0001824c movs r2, 3 | r2 = 3;
0x0001824e mov.w r1, 0x188 | r1 = 0x188;
0x00018252 mov r0, r4 | r0 = r4;
0x00018254 str r3, [sp] | *(sp) = r3;
0x00018256 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0001825a mov r0, r6 | r0 = r6;
0x0001825c mov r7, sp | r7 = sp;
0x0001825e blx 0x333c | r0 = raise (r0);
0x00018262 mov r2, r0 | r2 = r0;
0x00018264 movs r3, 3 | r3 = 3;
0x00018266 mov r0, r4 | r0 = r4;
0x00018268 str r2, [sp] | *(sp) = r2;
0x0001826a mov.w r1, 0x18e | r1 = 0x18e;
0x0001826e mov r2, r7 | r2 = r7;
0x00018270 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018274 ldr r0, [pc, 0x34] |
0x00018276 mov.w r1, 0x204 | r1 = 0x204;
0x0001827a ldr.w r2, [r5, 0x90] | r2 = *((r5 + 0x90));
0x0001827e add r0, pc | r0 = 0x3052e;
0x00018280 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00018284 b 0x181ea |
| } while (1);
| label_1:
0x00018286 blx 0x348c | fprintf_chk ()
0x0001828a nop |
0x0001828c ldr r0, [r2, 0x2c] | r0 = *((r2 + 0x2c));
0x0001828e movs r1, r0 | r1 = r0;
0x00018290 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00018292 movs r0, r0 |
0x00018294 str r4, [r5, 0x2c] | *((r5 + 0x2c)) = r4;
0x00018296 movs r0, r0 |
0x00018298 strb r0, [r6] | *(r6) = r0;
0x0001829a movs r1, r0 | r1 = r0;
0x0001829c ldr r3, [pc, 0x50] | r3 = *(0x182f0);
0x0001829e movs r1, r1 |
0x000182a0 str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x000182a2 movs r0, r0 |
0x000182a4 ldr r2, [pc, 0x3c0] | r2 = *(0x18668);
0x000182a6 movs r1, r1 |
0x000182a8 ldr r6, [r5, 0x24] | r6 = *((r5 + 0x24));
0x000182aa movs r1, r0 | r1 = r0;
0x000182ac ldr r2, [r1, r0] | r2 = *((r1 + r0));
0x000182ae movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x182b0 */
| #include <stdint.h>
|
; (fcn) fcn.000182b0 () | void fcn_000182b0 (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
0x000182b0 andhs r4, r3, 0x29800 | r4 = r3 & 0x29800;
| }
0x000182b4 push {r4, r5, r6, lr} |
0x000182b6 mov r4, r1 | r4 = r1;
0x000182b8 ldr r1, [pc, 0x294] |
0x000182ba mov r5, r0 | r5 = r0;
0x000182bc add r3, pc | r3 += pc;
0x000182be sub sp, 0x10 |
0x000182c0 add.w r0, r3, 0x84 | r0 = r3 + 0x84;
0x000182c4 ldr r3, [pc, 0x28c] | r3 = *(0x18554);
0x000182c6 add r1, pc | r1 = 0x3081a;
0x000182c8 movs r6, 1 | r6 = 1;
0x000182ca ldr r3, [r1, r3] |
0x000182cc movw r1, 0x226 | r1 = 0x226;
0x000182d0 ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x000182d2 str r3, [sp, 0xc] | var_ch = r3;
0x000182d4 mov.w r3, 0 | r3 = 0;
0x000182d8 str r6, [sp, 8] | var_8h = r6;
0x000182da bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000182de ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x000182e0 cmp r0, 0 |
| if (r0 == 0) {
0x000182e2 beq.w 0x1849e | goto label_7;
| }
| label_4:
0x000182e6 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x000182e8 cmp r1, 0 |
| if (r1 == 0) {
0x000182ea beq 0x18384 | goto label_8;
| }
0x000182ec blx 0x32c4 | r0 = ftell (r0);
0x000182f0 cmp r0, 1 |
0x000182f2 str r0, [sp, 8] | var_8h = r0;
| if (r0 == 1) {
0x000182f4 beq 0x18348 | goto label_9;
| }
0x000182f6 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000182f8 ldr r2, [r5] | r2 = *(r5);
0x000182fa cmp r1, 2 |
| if (r1 > 2) {
0x000182fc bgt.w 0x18426 | goto label_10;
| }
0x00018300 mov r3, r0 | r3 = r0;
0x00018302 ldr r0, [pc, 0x254] |
0x00018304 movs r1, 0 | r1 = 0;
0x00018306 strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x0001830a add r0, pc | r0 = 0x30868;
0x0001830c bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
| do {
| label_1:
0x00018310 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00018312 blx 0x2fa4 | fcn_00002fa4 ();
0x00018316 movs r3, 0 | r3 = 0;
0x00018318 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
| label_2:
0x0001831a ldr r0, [pc, 0x240] |
0x0001831c movs r3, 3 | r3 = 3;
0x0001831e add r2, sp, 8 | r2 += var_8h;
0x00018320 movw r1, 0x2bb | r1 = 0x2bb;
0x00018324 add r0, pc | r0 = 0x30886;
0x00018326 adds r0, 0x84 | r0 += 0x84;
0x00018328 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001832c ldr r2, [pc, 0x230] |
0x0001832e ldr r3, [pc, 0x224] | r3 = *(0x18556);
0x00018330 ldr r0, [sp, 8] | r0 = var_8h;
0x00018332 add r2, pc | r2 = 0x30896;
0x00018334 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018336 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018338 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001833a eors r2, r3 | r2 ^= r3;
0x0001833c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00018340 bne.w 0x18546 | goto label_11;
| }
0x00018344 add sp, 0x10 |
0x00018346 pop {r4, r5, r6, pc} |
| label_9:
0x00018348 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001834a cmp r3, 0 |
| if (r3 == 0) {
0x0001834c beq.w 0x18498 | goto label_12;
| }
| label_3:
0x00018350 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 != 0) {
0x00018352 cbz r3, 0x18366 |
0x00018354 ldr r1, [pc, 0x20c] |
0x00018356 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00018358 add r1, pc | r1 = 0x308c0;
0x0001835a blx 0x30a8 | SSL_write ();
0x0001835e ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00018360 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00018362 blx 0x2f80 | fcn_00002f80 ();
| }
0x00018366 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00018368 movs r2, 1 | r2 = 1;
0x0001836a ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x0001836c blx 0x33a8 | fcn_000033a8 ();
0x00018370 ldrd r2, r1, [r4, 0xc] | __asm ("ldrd r2, r1, [r4, 0xc]");
0x00018374 str r0, [sp, 8] | var_8h = r0;
0x00018376 cmp r1, r2 |
0x00018378 itt eq |
| if (r1 != r2) {
0x0001837a moveq r2, 0 | r2 = 0;
| }
| if (r1 != r2) {
0x0001837c streq r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
| }
0x0001837e cmp r0, 1 |
| if (r0 != 1) {
0x00018380 bne 0x1843c | goto label_13;
| }
0x00018382 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
| label_8:
0x00018384 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00018386 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
| if (r1 == 0) {
0x00018388 cbz r1, 0x183b2 | goto label_14;
| }
| label_0:
0x0001838a blx 0x320c | r0 = fcn_0000320c ();
0x0001838e cmp r0, 1 |
0x00018390 str r0, [sp, 8] | var_8h = r0;
| if (r0 == 1) {
0x00018392 beq 0x183e4 | goto label_15;
| }
0x00018394 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00018396 ldr r2, [r5] | r2 = *(r5);
0x00018398 cmp r1, 2 |
| if (r1 <= 2) {
0x0001839a ble 0x1845a | goto label_16;
| }
0x0001839c ldrd r4, r1, [r4, 0x2c] | __asm ("ldrd r4, r1, [r4, 0x2c]");
0x000183a0 mov r3, r0 | r3 = r0;
0x000183a2 ldr r0, [pc, 0x1c4] |
0x000183a4 str r1, [sp, 4] | var_4h_2 = r1;
0x000183a6 movs r1, 0 | r1 = 0;
0x000183a8 str r4, [sp] | *(sp) = r4;
0x000183aa add r0, pc | r0 = 0x30918;
0x000183ac bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000183b0 b 0x18310 |
| } while (1);
| label_14:
0x000183b2 cmp r2, 0 |
| if (r2 != 0) {
0x000183b4 bne 0x1838a | goto label_0;
| }
0x000183b6 ldr r6, [r4, 0x3c] | r6 = *((r4 + 0x3c));
| if (r6 == 0) {
0x000183b8 cbnz r6, 0x183e6 |
0x000183ba blx 0x2eec | r0 = SSL_CTX_set_default_verify_paths ();
0x000183be cmp r0, 1 |
0x000183c0 str r0, [sp, 8] | var_8h = r0;
| if (r0 != 1) {
0x000183c2 beq 0x183e4 |
0x000183c4 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000183c6 mov r3, r0 | r3 = r0;
0x000183c8 ldr r2, [r5] | r2 = *(r5);
0x000183ca cmp r1, 2 |
0x000183cc mov r1, r6 | r1 = r6;
| if (r1 <= 2) {
0x000183ce ble.w 0x18538 | goto label_17;
| }
0x000183d2 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x000183d4 str r0, [sp, 4] | var_4h_2 = r0;
0x000183d6 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000183d8 str r0, [sp] | *(sp) = r0;
0x000183da ldr r0, [pc, 0x190] |
0x000183dc add r0, pc | r0 = 0x3094e;
0x000183de bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000183e2 b 0x18310 | goto label_1;
| }
| label_15:
0x000183e4 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
| }
0x000183e6 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
| if (r1 != 0) {
0x000183e8 cbz r1, 0x183f6 |
0x000183ea blx 0x2f68 | r0 = fcn_00002f68 ();
0x000183ee cmp r0, 1 |
0x000183f0 str r0, [sp, 8] | var_8h = r0;
| if (r0 != 1) {
0x000183f2 bne 0x184cc | goto label_18;
| }
0x000183f4 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
| }
0x000183f6 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x000183f8 cbz r3, 0x18412 |
0x000183fa ldr r3, [pc, 0x174] |
0x000183fc mov r2, r4 | r2 = r4;
0x000183fe add r3, pc | r3 = 0x30974;
0x00018400 ldr r1, [r3] | r1 = imp._ITM_deregisterTMCloneTable;
0x00018402 blx 0x3534 | SSL_get_cipher_list ();
0x00018406 ldr r1, [pc, 0x16c] |
0x00018408 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x0001840a add r1, pc | r1 = 0x30984;
0x0001840c blx 0x35cc | fcn_000035cc ();
0x00018410 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
| }
0x00018412 ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
| if (r1 != 0) {
0x00018414 cbz r1, 0x1841a |
0x00018416 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
| if (r2 != 0) {
0x00018418 cbnz r2, 0x1846c | goto label_19;
| }
| }
| label_5:
0x0001841a movs r3, 0 | r3 = 0;
0x0001841c movs r2, 2 | r2 = 2;
0x0001841e movs r1, 0x21 | r1 = 0x21;
0x00018420 blx 0x3144 | writev ();
0x00018424 b 0x1831a | goto label_2;
| label_10:
0x00018426 ldrd r4, r1, [r4, 0x2c] | __asm ("ldrd r4, r1, [r4, 0x2c]");
0x0001842a mov r3, r0 | r3 = r0;
0x0001842c ldr r0, [pc, 0x148] |
0x0001842e str r1, [sp, 4] | var_4h_2 = r1;
0x00018430 movs r1, 0 | r1 = 0;
0x00018432 str r4, [sp] | *(sp) = r4;
0x00018434 add r0, pc | r0 = 0x309b0;
0x00018436 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x0001843a b 0x18310 | goto label_1;
| label_13:
0x0001843c ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001843e ldr r2, [r5] | r2 = *(r5);
0x00018440 cmp r1, 2 |
| if (r1 <= 2) {
0x00018442 ble 0x184ea | goto label_20;
| }
0x00018444 ldrd r4, r1, [r4, 0x2c] | __asm ("ldrd r4, r1, [r4, 0x2c]");
0x00018448 mov r3, r0 | r3 = r0;
0x0001844a ldr r0, [pc, 0x130] |
0x0001844c str r1, [sp, 4] | var_4h_2 = r1;
0x0001844e movs r1, 0 | r1 = 0;
0x00018450 str r4, [sp] | *(sp) = r4;
0x00018452 add r0, pc | r0 = 0x309d4;
0x00018454 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018458 b 0x18310 | goto label_1;
| label_16:
0x0001845a mov r3, r0 | r3 = r0;
0x0001845c ldr r0, [pc, 0x120] |
0x0001845e movs r1, 0 | r1 = 0;
0x00018460 strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x00018464 add r0, pc | r0 = 0x309e8;
0x00018466 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x0001846a b 0x18310 | goto label_1;
| label_19:
0x0001846c blx 0x35a4 | fcn_000035a4 ();
0x00018470 str r0, [sp, 8] | var_8h = r0;
0x00018472 cmp r0, 0 |
| if (r0 == 0) {
0x00018474 beq 0x184fc | goto label_21;
| }
0x00018476 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00018478 ldr r2, [r5] | r2 = *(r5);
0x0001847a cmp r1, 2 |
| if (r1 <= 2) {
0x0001847c ble 0x18516 | goto label_22;
| }
0x0001847e ldrd r4, r1, [r4, 0x2c] | __asm ("ldrd r4, r1, [r4, 0x2c]");
0x00018482 mov r3, r0 | r3 = r0;
0x00018484 ldr r0, [pc, 0xfc] |
0x00018486 str r1, [sp, 4] | var_4h_2 = r1;
0x00018488 movs r1, 0 | r1 = 0;
0x0001848a add r0, pc | r0 = 0x30a12;
0x0001848c str r4, [sp] | *(sp) = r4;
0x0001848e bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
| label_6:
0x00018492 movs r3, 0 | r3 = 0;
0x00018494 str r3, [sp, 8] | var_8h = r3;
0x00018496 b 0x18310 | goto label_1;
| label_12:
0x00018498 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001849a str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0001849c b 0x18350 | goto label_3;
| label_7:
0x0001849e blx 0x2f5c | fcn_00002f5c ();
0x000184a2 blx 0x35f0 | fcn_000035f0 ();
0x000184a6 str r0, [r5, 0x20] | *((r5 + 0x20)) = r0;
0x000184a8 cmp r0, 0 |
| if (r0 != 0) {
0x000184aa bne.w 0x182e6 | goto label_4;
| }
0x000184ae ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000184b0 ldr r2, [r5] | r2 = *(r5);
0x000184b2 ldr r3, [sp, 8] | r3 = var_8h;
0x000184b4 cmp r1, 2 |
| if (r1 > 2) {
0x000184b6 ble 0x18528 |
0x000184b8 ldrd r4, r5, [r4, 0x2c] | __asm ("ldrd r4, r5, [r4, 0x2c]");
0x000184bc mov r1, r0 | r1 = r0;
0x000184be ldr r0, [pc, 0xc8] |
0x000184c0 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x000184c4 add r0, pc | r0 = 0x30a52;
0x000184c6 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000184ca b 0x1831a | goto label_2;
| label_18:
0x000184cc ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000184ce ldr r2, [r5] | r2 = *(r5);
0x000184d0 cmp r1, 2 |
| if (r1 > 2) {
0x000184d2 ble 0x18504 |
0x000184d4 ldrd r4, r1, [r4, 0x2c] | __asm ("ldrd r4, r1, [r4, 0x2c]");
0x000184d8 mov r3, r0 | r3 = r0;
0x000184da ldr r0, [pc, 0xb0] |
0x000184dc str r1, [sp, 4] | var_4h_2 = r1;
0x000184de movs r1, 0 | r1 = 0;
0x000184e0 str r4, [sp] | *(sp) = r4;
0x000184e2 add r0, pc | r0 = 0x30a74;
0x000184e4 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000184e8 b 0x18310 | goto label_1;
| label_20:
0x000184ea mov r3, r0 | r3 = r0;
0x000184ec ldr r0, [pc, 0xa0] |
0x000184ee movs r1, 0 | r1 = 0;
0x000184f0 strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x000184f4 add r0, pc | r0 = 0x30a88;
0x000184f6 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000184fa b 0x18310 | goto label_1;
| label_21:
0x000184fc movs r3, 1 | r3 = 1;
0x000184fe ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00018500 str r3, [sp, 8] | var_8h = r3;
0x00018502 b 0x1841a | goto label_5;
| }
0x00018504 mov r3, r0 | r3 = r0;
0x00018506 ldr r0, [pc, 0x8c] |
0x00018508 movs r1, 0 | r1 = 0;
0x0001850a strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x0001850e add r0, pc | r0 = 0x30aa8;
0x00018510 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018514 b 0x18310 | goto label_1;
| label_22:
0x00018516 mov r3, r0 | r3 = r0;
0x00018518 ldr r0, [pc, 0x7c] |
0x0001851a movs r1, 0 | r1 = 0;
0x0001851c strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x00018520 add r0, pc | r0 = 0x30abc;
0x00018522 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018526 b 0x18492 | goto label_6;
| }
0x00018528 mov r1, r0 | r1 = r0;
0x0001852a strd r0, r0, [sp] | __asm ("strd r0, r0, [sp]");
0x0001852e ldr r0, [pc, 0x6c] |
0x00018530 add r0, pc | r0 = 0x30ad2;
0x00018532 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018536 b 0x1831a | goto label_2;
| label_17:
0x00018538 ldr r0, [pc, 0x64] |
0x0001853a strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x0001853e add r0, pc | r0 = 0x30ae2;
0x00018540 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018544 b 0x18310 | goto label_1;
| label_11:
0x00018546 blx 0x348c | fprintf_chk ()
0x0001854a nop |
0x0001854c str r4, [r6, 0x1c] | *((r6 + 0x1c)) = r4;
0x0001854e movs r0, r0 |
0x00018550 ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x00018552 movs r1, r0 | r1 = r0;
0x00018554 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00018556 movs r0, r0 |
0x00018558 ldrsb r6, [r2, r7] | r6 = *((r2 + r7));
0x0001855a movs r0, r0 |
0x0001855c str r4, [r1, 0x18] | *((r1 + 0x18)) = r4;
0x0001855e movs r0, r0 |
0x00018560 ldr r6, [r3, 0x14] | r6 = *((r3 + 0x14));
0x00018562 movs r1, r0 | r1 = r0;
0x00018564 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x185a4 */
| #include <stdint.h>
|
; (fcn) fcn.000185a4 () | void fcn_000185a4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x000185a4 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x000185a8 mov sb, r2 | sb = r2;
0x000185aa ldr r2, [pc, 0x180] |
0x000185ac mov r7, r3 | r7 = r3;
0x000185ae sub sp, 0x10 |
0x000185b0 mov r6, r0 | r6 = r0;
0x000185b2 ldr r3, [pc, 0x17c] | r3 = *(0x18732);
0x000185b4 movs r0, 1 | r0 = 1;
0x000185b6 add r2, pc | r2 = 0x30ce8;
0x000185b8 mov r8, r1 | r8 = r1;
0x000185ba movw r1, 0x2c5 | r1 = 0x2c5;
0x000185be ldr r3, [r2, r3] |
0x000185c0 movs r2, 3 | r2 = 3;
0x000185c2 ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x000185c4 str r3, [sp, 0xc] | var_ch = r3;
0x000185c6 mov.w r3, 0 | r3 = 0;
0x000185ca str r0, [sp, 8] | var_8h = r0;
0x000185cc ldr r0, [pc, 0x164] |
0x000185ce add r0, pc | r0 = 0x30d06;
0x000185d0 adds r0, 0x9c | r0 += 0x9c;
0x000185d2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000185d6 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x000185d8 cmp r0, 0 |
| if (r0 == 0) {
0x000185da beq.w 0x186f8 | goto label_4;
| }
| label_1:
0x000185de ldr r1, [pc, 0x158] |
0x000185e0 add r1, pc | r1 = 0x30d1e;
0x000185e2 blx 0x345c | BIO_write ();
0x000185e6 ldr r1, [pc, 0x154] |
0x000185e8 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x000185ea add r1, pc | r1 = 0x30d2c;
0x000185ec blx 0x35c0 | fcn_000035c0 ();
0x000185f0 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x000185f4 cmp r3, 0 |
| if (r3 != 0) {
0x000185f6 bne.w 0x1870a | goto label_5;
| }
| label_2:
0x000185fa ldr.w sl, [pc, 0x144] |
0x000185fe movs r5, 0 | r5 = 0;
0x00018600 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00018602 blx 0x31b4 | fcn_000031b4 ();
0x00018606 add sl, pc | sl = 0x30d4c;
0x00018608 str r0, [r6, 0x1c] | *((r6 + 0x1c)) = r0;
0x0001860a b 0x1861e |
| while (r0 != 0) {
0x0001860c mov r3, r5 | r3 = r5;
0x0001860e movs r1, 1 | r1 = 1;
0x00018610 movs r0, 4 | r0 = 4;
0x00018612 mov r2, sl | r2 = sl;
0x00018614 str r4, [sp] | *(sp) = r4;
0x00018616 add r5, r1 | r5 += r1;
0x00018618 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0001861c ldr r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0001861e mov r1, r5 | r1 = r5;
0x00018620 blx 0x354c | r0 = fcn_0000354c ();
0x00018624 mov r4, r0 | r4 = r0;
0x00018626 cmp r0, 0 |
0x00018628 bne 0x1860c |
| }
0x0001862a ldr r1, [r6] | r1 = *(r6);
0x0001862c ldr r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0001862e blx 0x3138 | r0 = SSL_CTX_ctrl ();
0x00018632 cmp r0, 1 |
0x00018634 mov r3, r0 | r3 = r0;
0x00018636 str r0, [sp, 8] | var_8h = r0;
| if (r0 == 1) {
0x00018638 beq 0x1865a | goto label_6;
| }
0x0001863a ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x0001863e ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x00018640 ldr r2, [r6] | r2 = *(r6);
0x00018642 cmp r0, 2 |
| if (r0 <= 2) {
0x00018644 ble 0x186ea | goto label_7;
| }
0x00018646 ldr.w r0, [r8, 0x30] | r0 = *((r8 + 0x30));
0x0001864a str r0, [sp, 4] | var_4h = r0;
0x0001864c ldr.w r0, [r8, 0x2c] | r0 = *((r8 + 0x2c));
0x00018650 str r0, [sp] | *(sp) = r0;
0x00018652 ldr r0, [pc, 0xf0] |
0x00018654 add r0, pc | r0 = 0x30d9e;
0x00018656 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
| do {
| label_6:
0x0001865a ldr r0, [pc, 0xec] |
0x0001865c adds r7, 1 | r7++;
0x0001865e mov r2, r7 | r2 = r7;
0x00018660 movw r1, 0x2e1 | r1 = 0x2e1;
0x00018664 add r0, pc | r0 = 0x30db2;
0x00018666 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0001866a mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0001866c cbz r0, 0x186b6 |
0x0001866e mov r2, r7 | r2 = r7;
0x00018670 mov r1, sb | r1 = sb;
0x00018672 bl 0x51f4 | fcn_000051f4 (r0, r1, r2);
0x00018676 mov r3, r4 | r3 = r4;
0x00018678 ldr r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0001867a movs r2, 0 | r2 = 0;
0x0001867c movs r1, 0x37 | r1 = 0x37;
0x0001867e blx 0x35e4 | r0 = fcn_000035e4 ();
0x00018682 cmp r0, 1 |
0x00018684 mov r3, r0 | r3 = r0;
0x00018686 str r0, [sp, 8] | var_8h = r0;
| if (r0 != 1) {
0x00018688 beq 0x186a6 |
0x0001868a ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0001868e ldr r2, [r6] | r2 = *(r6);
0x00018690 cmp r1, 2 |
| if (r1 <= 2) {
0x00018692 ble 0x18716 | goto label_8;
| }
0x00018694 ldrd r0, r1, [r8, 0x2c] | __asm ("ldrd r0, r1, [r8, 0x2c]");
0x00018698 str r0, [sp] | *(sp) = r0;
0x0001869a ldr r0, [pc, 0xb0] |
0x0001869c str r1, [sp, 4] | var_4h = r1;
0x0001869e movs r1, 0 | r1 = 0;
0x000186a0 add r0, pc | r0 = 0x30df2;
0x000186a2 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
| }
| label_3:
0x000186a6 ldr r0, [pc, 0xa8] |
0x000186a8 mov r2, r4 | r2 = r4;
0x000186aa movw r1, 0x2eb | r1 = 0x2eb;
0x000186ae add r0, pc | r0 = 0x30e04;
0x000186b0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x000186b4 b 0x186bc |
| } else {
0x000186b6 mvn r3, 0x62 | r3 = ~0x62;
0x000186ba str r3, [sp, 8] | var_8h = r3;
| }
| label_0:
0x000186bc ldr r0, [pc, 0x94] |
0x000186be movs r3, 3 | r3 = 3;
0x000186c0 add r2, sp, 8 | r2 += var_8h;
0x000186c2 movw r1, 0x2f1 | r1 = 0x2f1;
0x000186c6 add r0, pc | r0 = 0x30e1e;
0x000186c8 adds r0, 0x9c | r0 += 0x9c;
0x000186ca bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000186ce ldr r2, [pc, 0x88] |
0x000186d0 ldr r3, [pc, 0x5c] | r3 = *(0x18730);
0x000186d2 ldr r0, [sp, 8] | r0 = var_8h;
0x000186d4 add r2, pc | r2 = 0x30e32;
0x000186d6 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x000186d8 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x000186da ldr r3, [sp, 0xc] | r3 = var_ch;
0x000186dc eors r2, r3 | r2 ^= r3;
0x000186de mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000186e2 bne 0x18726 | goto label_9;
| }
0x000186e4 add sp, 0x10 |
0x000186e6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_7:
0x000186ea ldr r0, [pc, 0x70] |
0x000186ec strd r4, r4, [sp] | __asm ("strd r4, r4, [sp]");
0x000186f0 add r0, pc | r0 = 0x30e52;
0x000186f2 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000186f6 b 0x1865a |
| } while (1);
| label_4:
0x000186f8 mov r1, r8 | r1 = r8;
0x000186fa mov r0, r6 | r0 = r6;
0x000186fc bl 0x182b0 | r0 = fcn_000182b0 (r0, r1);
0x00018700 cmp r0, 1 |
0x00018702 str r0, [sp, 8] | var_8h = r0;
| if (r0 != 1) {
0x00018704 bne 0x186bc | goto label_0;
| }
0x00018706 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00018708 b 0x185de | goto label_1;
| label_5:
0x0001870a ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x0001870c movs r2, 0 | r2 = 0;
0x0001870e movs r1, 1 | r1 = 1;
0x00018710 blx 0x376c | fcn_0000376c ();
0x00018714 b 0x185fa | goto label_2;
| label_8:
0x00018716 ldr r0, [pc, 0x48] |
0x00018718 movs r1, 0 | r1 = 0;
0x0001871a strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x0001871e add r0, pc | r0 = 0x30e84;
0x00018720 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018724 b 0x186a6 | goto label_3;
| label_9:
0x00018726 blx 0x348c | fprintf_chk ()
0x0001872a nop |
0x0001872c str r2, [r3, 0x6c] | *((r3 + 0x6c)) = r2;
0x0001872e movs r1, r0 | r1 = r0;
0x00018730 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00018732 movs r0, r0 |
0x00018734 ldrsh r2, [r4, r3] | r2 = *((r4 + r3));
0x00018736 movs r0, r0 |
0x00018738 bl 0xffc4273a | void (*0xffc4273a)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0001873c 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-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x18764 */
| #include <stdint.h>
|
; (fcn) fcn.00018764 () | void fcn_00018764 (int16_t arg_38h, int16_t arg_3ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00018764 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00018768 mov r6, r2 | r6 = r2;
0x0001876a ldr r2, [pc, 0x188] |
0x0001876c mov r5, r3 | r5 = r3;
0x0001876e mov r4, r0 | r4 = r0;
0x00018770 sub sp, 0x18 |
0x00018772 ldr r3, [pc, 0x184] | r3 = *(0x188fa);
0x00018774 mov r7, r1 | r7 = r1;
0x00018776 ldr r0, [pc, 0x184] |
0x00018778 add r2, pc | r2 = 0x31072;
0x0001877a mov.w r1, 0x2fc | r1 = 0x2fc;
0x0001877e mov.w r8, 0 | r8 = 0;
0x00018782 ldr r3, [r2, r3] |
0x00018784 movs r2, 3 | r2 = 3;
0x00018786 add r0, pc | r0 = 0x31088;
0x00018788 ldr.w sb, [sp, 0x38] | sb = *(arg_38h);
0x0001878c adds r0, 0xb8 | r0 += 0xb8;
0x0001878e ldr.w sl, [sp, 0x3c] | sl = *(arg_3ch);
0x00018792 ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018794 str r3, [sp, 0x14] | var_14h = r3;
0x00018796 mov.w r3, 0 | r3 = 0;
0x0001879a str.w r8, [sp, 8] | __asm ("str.w r8, [var_8h]");
0x0001879e bl 0xfb54 | r0 = fcn_0000fb54 (r0, r1, r2);
0x000187a2 blx 0x3010 | fcn_00003010 ();
0x000187a6 mov r0, r4 | r0 = r4;
0x000187a8 blx 0x3348 | r0 = fcn_00003348 ();
0x000187ac cmp r0, 1 |
0x000187ae str r0, [sp, 8] | var_8h = r0;
| if (r0 != 1) {
0x000187b0 bne 0x187e4 | goto label_2;
| }
| if (r5 != 0) {
0x000187b2 cbnz r5, 0x18810 | goto label_3;
| }
| do {
| label_0:
0x000187b4 ldr r0, [pc, 0x148] |
0x000187b6 movs r3, 3 | r3 = 3;
0x000187b8 add r2, sp, 8 | r2 += var_8h;
0x000187ba movw r1, 0x336 | r1 = 0x336;
0x000187be add r0, pc | r0 = 0x310c2;
0x000187c0 adds r0, 0xb8 | r0 += 0xb8;
0x000187c2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000187c6 ldr r2, [pc, 0x13c] |
0x000187c8 ldr r3, [pc, 0x12c] | r3 = *(0x188f8);
0x000187ca ldr r0, [sp, 8] | r0 = var_8h;
0x000187cc add r2, pc | r2 = 0x310d6;
0x000187ce ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x000187d0 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x000187d2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000187d4 eors r2, r3 | r2 ^= r3;
0x000187d6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000187da bne.w 0x188f0 | goto label_4;
| }
0x000187de add sp, 0x18 |
0x000187e0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x000187e4 mov r3, r0 | r3 = r0;
0x000187e6 ldr r0, [pc, 0x120] |
0x000187e8 mov r2, r7 | r2 = r7;
0x000187ea mov r1, r4 | r1 = r4;
0x000187ec str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x000187f0 add r0, pc | r0 = 0x310fe;
0x000187f2 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000187f6 bl 0x17d04 | r0 = fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000187fa adds r3, r0, 3 | r3 = r0 + 3;
0x000187fc it eq |
| if (r3 != r0) {
0x000187fe streq r0, [sp, 8] | var_8h = r0;
| }
0x00018800 beq 0x187b4 |
| } while (r3 == r0);
0x00018802 subs r0, 2 | r0 -= 2;
0x00018804 cmp r0, 1 |
0x00018806 itt ls |
| if (r0 > 1) {
0x00018808 mvnls r3, 0x15 | r3 = ~0x15;
| }
| if (r0 <= 1) {
0x0001880c str r3, [sp, 8] | var_8h = r3;
| }
0x0001880e b 0x187b4 | goto label_0;
| label_3:
0x00018810 mov r0, r4 | r0 = r4;
0x00018812 str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch_2]");
0x00018816 blx 0x34d4 | SSL_get_verify_result ();
0x0001881a movw r3, 0x75b | r3 = 0x75b;
0x0001881e mov r2, r8 | r2 = r8;
0x00018820 mov r4, r0 | r4 = r0;
0x00018822 add r1, sp, 0x10 | r1 += var_10h;
0x00018824 mov r0, r6 | r0 = r6;
0x00018826 bl 0xb70c | fcn_0000b70c (r0, r1, r2, r3);
0x0001882a add r2, sp, 0xc | r2 += var_ch_2;
0x0001882c mov r5, r0 | r5 = r0;
0x0001882e str r2, [sp] | *(sp) = r2;
0x00018830 mov r3, r8 | r3 = r8;
0x00018832 mov r2, r0 | r2 = r0;
0x00018834 mov r1, r6 | r1 = r6;
0x00018836 mov r0, r4 | r0 = r4;
0x00018838 blx 0x2ef8 | r0 = X509_check_host ();
0x0001883c cmp r0, 1 |
0x0001883e str r0, [sp, 8] | var_8h = r0;
| if (r0 == 1) {
0x00018840 beq 0x188de | goto label_5;
| }
0x00018842 ldr r2, [pc, 0xc8] |
0x00018844 mov r3, r5 | r3 = r5;
0x00018846 strd r6, r0, [sp] | __asm ("strd r6, r0, [sp]");
0x0001884a mov.w r1, -1 | r1 = -1;
0x0001884e movs r0, 4 | r0 = 4;
0x00018850 add r2, pc | r2 = 0x31162;
0x00018852 bl 0x9a28 | fcn_00009a28 (r0, r1);
| label_1:
0x00018856 ldr r0, [sp, 0xc] | r0 = var_ch_2;
| if (r0 != 0) {
0x00018858 cbz r0, 0x18866 |
0x0001885a ldr r1, [pc, 0xb4] |
0x0001885c movw r2, 0x31b | r2 = 0x31b;
0x00018860 add r1, pc | r1 = 0x31176;
0x00018862 blx 0x318c | fcn_0000318c ();
| }
0x00018866 ldr r3, [sp, 8] | r3 = var_8h;
0x00018868 adds r2, r3, 1 | r2 = r3 + 1;
0x0001886a cmn.w r3, 2 |
0x0001886e it ne |
| if (r3 != 2) {
0x00018870 cmpne r2, 1 | __asm ("cmpne r2, 1");
| }
| if (r3 <= 2) {
0x00018872 bhi 0x188d0 |
0x00018874 ldr.w r8, [pc, 0x9c] |
0x00018878 adds r2, r5, 1 | r2 = r5 + 1;
0x0001887a mov.w r1, 0x320 | r1 = 0x320;
0x0001887e add r8, pc | r8 = 0x31196;
0x00018880 mov r0, r8 | r0 = r8;
0x00018882 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00018886 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00018888 cbz r0, 0x188bc |
0x0001888a mov r1, r6 | r1 = r6;
0x0001888c mov r2, r5 | r2 = r5;
0x0001888e blx 0x3028 | fcn_00003028 ();
0x00018892 movs r2, 0 | r2 = 0;
0x00018894 mov r1, r7 | r1 = r7;
0x00018896 strb r2, [r7, r5] | *((r7 + r5)) = r2;
0x00018898 mov r0, r4 | r0 = r4;
0x0001889a blx 0x3468 | malloc (r0);
0x0001889e ldr r2, [pc, 0x78] |
0x000188a0 mov r3, r0 | r3 = r0;
0x000188a2 mov.w r1, -1 | r1 = -1;
0x000188a6 str r0, [sp, 8] | var_8h = r0;
0x000188a8 movs r0, 3 | r0 = 3;
0x000188aa add r2, pc | r2 = 0x311c8;
0x000188ac bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000188b0 mov r2, r7 | r2 = r7;
0x000188b2 movw r1, 0x32a | r1 = 0x32a;
0x000188b6 mov r0, r8 | r0 = r8;
0x000188b8 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| }
0x000188bc ldr r3, [sp, 8] | r3 = var_8h;
0x000188be adds r2, r3, 1 | r2 = r3 + 1;
0x000188c0 cmn.w r3, 2 |
0x000188c4 it ne |
| if (r3 != 2) {
0x000188c6 cmpne r2, 1 | __asm ("cmpne r2, 1");
| }
0x000188c8 itt ls |
| if (r3 > 2) {
0x000188ca mvnls r3, 2 | r3 = ~2;
| }
| if (r3 > 2) {
0x000188ce str r3, [sp, 8] | var_8h = r3;
| goto label_6;
| }
| }
| label_6:
0x000188d0 cmp r4, 0 |
| if (r4 == 0) {
0x000188d2 beq.w 0x187b4 | goto label_0;
| }
0x000188d6 mov r0, r4 | r0 = r4;
0x000188d8 blx 0x36c8 | fcn_000036c8 ();
0x000188dc b 0x187b4 | goto label_0;
| label_5:
0x000188de ldr r2, [pc, 0x3c] |
0x000188e0 mov.w r1, -1 | r1 = -1;
0x000188e4 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000188e6 movs r0, 4 | r0 = 4;
0x000188e8 add r2, pc | r2 = 0x3120a;
0x000188ea bl 0x9a28 | fcn_00009a28 (r0, r1);
0x000188ee b 0x18856 | goto label_1;
| label_4:
0x000188f0 blx 0x348c | fprintf_chk ()
0x000188f4 str r0, [r3, 0x50] | *((r3 + 0x50)) = r0;
0x000188f6 movs r1, r0 | r1 = r0;
0x000188f8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000188fa movs r0, r0 |
0x000188fc ldrb r2, [r5, r4] | r2 = *((r5 + r4));
0x000188fe movs r0, r0 |
0x00018900 ldrb r2, [r6, r3] | r2 = *((r6 + r3));
0x00018902 movs r0, r0 |
0x00018904 str r4, [r0, 0x4c] | *((r0 + 0x4c)) = r4;
0x00018906 movs r1, r0 | r1 = r0;
0x00018908 strh r0, [r5, r7] | *((r5 + r7)) = r0;
0x0001890a movs r0, r0 |
0x0001890c strh r0, [r7, r6] | *((r7 + r6)) = r0;
0x0001890e movs r0, r0 |
0x00018910 strh r0, [r5, r0] | *((r5 + r0)) = r0;
0x00018912 movs r0, r0 |
0x00018914 strh r2, [r1, r0] | *((r1 + r0)) = r2;
0x00018916 movs r0, r0 |
0x00018918 strh r6, [r1, r6] | *((r1 + r6)) = r6;
0x0001891a movs r0, r0 |
0x0001891c strh r4, [r7, r3] | *((r7 + r3)) = r4;
0x0001891e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x18920 */
| #include <stdint.h>
|
; (fcn) fcn.00018920 () | void fcn_00018920 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_8h_2;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00018920 push {r1, r4, r5, r8, sb, fp, lr} |
0x00018924 rors r0, r6 | __asm ("rors r0, r6");
0x00018926 mov r6, r1 | r6 = r1;
0x00018928 ldr r1, [pc, 0xc4] |
0x0001892a mov r8, r0 | r8 = r0;
0x0001892c add r3, pc | r3 += pc;
0x0001892e sub sp, 0x10 |
0x00018930 add.w r0, r3, 0xcc | r0 = r3 + 0xcc;
0x00018934 ldr r3, [pc, 0xbc] | r3 = *(0x189f4);
0x00018936 add r1, pc | r1 = 0x3132a;
0x00018938 mov r5, r2 | r5 = r2;
0x0001893a mov.w r7, -1 | r7 = -1;
0x0001893e movs r2, 3 | r2 = 3;
0x00018940 ldr r3, [r1, r3] |
0x00018942 movw r1, 0x346 | r1 = 0x346;
0x00018946 ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018948 str r3, [sp, 0xc] | var_ch = r3;
0x0001894a mov.w r3, 0 | r3 = 0;
0x0001894e str r7, [sp, 8] | var_8h_2 = r7;
0x00018950 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00018954 mov r1, r5 | r1 = r5;
0x00018956 mov r0, r6 | r0 = r6;
0x00018958 bl 0xd130 | r0 = fcn_0000d130 (r0, r1);
0x0001895c cmn.w r0, 0x16 |
0x00018960 str r0, [sp, 8] | var_8h_2 = r0;
0x00018962 beq 0x18992 |
| while (r0 == 0) {
| label_0:
0x00018964 ldr r0, [pc, 0x90] |
0x00018966 movs r3, 3 | r3 = 3;
0x00018968 add r2, sp, 8 | r2 += var_8h_2;
0x0001896a mov.w r1, 0x35c | r1 = 0x35c;
0x0001896e add r0, pc | r0 = 0x3136a;
0x00018970 adds r0, 0xcc | r0 += 0xcc;
0x00018972 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018976 ldr r2, [pc, 0x84] |
0x00018978 ldr r3, [pc, 0x78] | r3 = *(0x189f4);
0x0001897a ldr r0, [sp, 8] | r0 = var_8h_2;
0x0001897c add r2, pc | r2 = 0x3137e;
0x0001897e ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018980 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018982 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00018984 eors r2, r3 | r2 ^= r3;
0x00018986 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001898a bne 0x189e6 | goto label_1;
| }
0x0001898c add sp, 0x10 |
0x0001898e pop.w {r4, r5, r6, r7, r8, pc} |
0x00018992 mov r4, r0 | r4 = r0;
0x00018994 blx 0x3010 | fcn_00003010 ();
0x00018998 movs r2, 1 | r2 = 1;
0x0001899a mov r1, r5 | r1 = r5;
0x0001899c mov r0, r8 | r0 = r8;
0x0001899e blx 0x31e8 | r0 = fcn_000031e8 ();
0x000189a2 cmp r0, 0 |
0x000189a4 str r0, [sp, 8] | var_8h_2 = r0;
| if (r0 < 0) {
0x000189a6 blt 0x189c0 | goto label_2;
| }
0x000189a8 it eq |
| if (r0 != 0) {
0x000189aa streq r7, [sp, 8] | var_8h_2 = r7;
| }
0x000189ac beq 0x18964 |
| }
0x000189ae cmp r0, 1 |
| if (r0 != 1) {
0x000189b0 bne 0x18964 | goto label_0;
| }
0x000189b2 ldrb r1, [r5] | r1 = *(r5);
0x000189b4 mov r0, r6 | r0 = r6;
0x000189b6 bl 0xd318 | fcn_0000d318 (r0, r1);
0x000189ba movs r3, 0 | r3 = 0;
0x000189bc str r3, [sp, 8] | var_8h_2 = r3;
0x000189be b 0x18964 | goto label_0;
| label_2:
0x000189c0 mov r3, r0 | r3 = r0;
0x000189c2 ldr r0, [pc, 0x3c] |
0x000189c4 movs r5, 0 | r5 = 0;
0x000189c6 mov r1, r8 | r1 = r8;
0x000189c8 mov r2, r6 | r2 = r6;
0x000189ca strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x000189ce add r0, pc | r0 = 0x313d4;
0x000189d0 bl 0x17d04 | fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x000189d4 subs r0, 2 | r0 -= 2;
0x000189d6 cmp r0, 1 |
| if (r0 > 1) {
0x000189d8 bhi 0x18964 | goto label_0;
| }
0x000189da mov r1, r5 | r1 = r5;
0x000189dc mov r0, r6 | r0 = r6;
0x000189de str r4, [sp, 8] | var_8h_2 = r4;
0x000189e0 bl 0xd210 | fcn_0000d210 (r0, r1);
0x000189e4 b 0x18964 | goto label_0;
| label_1:
0x000189e6 blx 0x348c | fprintf_chk ()
0x000189ea nop |
0x000189ec ldrh r4, [r0, r6] | r4 = *((r0 + r6));
0x000189ee movs r0, r0 |
0x000189f0 str r2, [r3, 0x34] | *((r3 + 0x34)) = r2;
0x000189f2 movs r1, r0 | r1 = r0;
0x000189f4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000189f6 movs r0, r0 |
0x000189f8 ldrh r2, [r0, r5] | r2 = *((r0 + r5));
0x000189fa movs r0, r0 |
0x000189fc str r4, [r2, 0x30] | *((r2 + 0x30)) = r4;
0x000189fe movs r1, r0 | r1 = r0;
0x00018a00 strh r2, [r1, r2] | *((r1 + r2)) = r2;
0x00018a02 movs r0, r0 |
0x00018a04 ldr r3, [pc, 0x34] |
0x00018a06 movs r2, 3 | r2 = 3;
0x00018a08 push {r4, lr} |
0x00018a0a movw r1, 0x39f | r1 = 0x39f;
0x00018a0e mov r4, r0 | r4 = r0;
0x00018a10 add r3, pc | r3 = 0x31450;
0x00018a12 add.w r0, r3, 0xdc | r0 = r3 + 0xdc;
0x00018a16 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00018a18 ldrb.w r6, [sp, 0xa20] | r6 = *((sp + 0xa20));
| if (r0 != 0) {
0x00018a1c cbz r0, 0x18a22 |
0x00018a1e blx 0x2fa4 | fcn_00002fa4 ();
| }
0x00018a22 ldr r0, [pc, 0x1c] |
0x00018a24 movs r2, 0 | r2 = 0;
0x00018a26 str r2, [r4, 0x20] | *((r4 + 0x20)) = r2;
0x00018a28 movs r3, 3 | r3 = 3;
0x00018a2a pop.w {r4, lr} |
0x00018a2e movw r1, 0x3a3 | r1 = 0x3a3;
0x00018a30 adds r1, 0xa3 | r1 += 0xa3;
0x00018a32 add r0, pc | r0 = 0x31478;
0x00018a34 adds r0, 0xdc | r0 += 0xdc;
0x00018a36 b.w 0xfbf4 | return void (*0xfbf4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x18a44 */
| #include <stdint.h>
|
; (fcn) fcn.00018a44 () | void fcn_00018a44 (int16_t arg1) {
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_68h;
| r0 = arg1;
0x00018a44 ldr r3, [pc, 0xd4] |
0x00018a46 movs r2, 3 | r2 = 3;
0x00018a48 push {r4, r5, r6, lr} |
0x00018a4a mov r4, r0 | r4 = r0;
0x00018a4c ldr r6, [pc, 0xd0] |
0x00018a4e sub sp, 8 |
0x00018a50 add r3, pc | r3 = 0x31570;
0x00018a52 movs r5, 1 | r5 = 1;
0x00018a54 add.w r0, r3, 0xf8 | r0 = r3 + 0xf8;
0x00018a58 ldr r3, [pc, 0xc8] | r3 = *(0x18b24);
0x00018a5a add r6, pc | r6 = 0x3157e;
0x00018a5c mov.w r1, 0x3ac | r1 = 0x3ac;
0x00018a60 ldr r3, [r6, r3] |
0x00018a62 ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018a64 str r3, [sp, 4] | var_4h = r3;
0x00018a66 mov.w r3, 0 | r3 = 0;
0x00018a6a str r5, [sp] | *(sp) = r5;
0x00018a6c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00018a70 ldr r0, [pc, 0xb4] |
0x00018a72 ldr r3, [pc, 0xb8] |
0x00018a74 add r0, pc | r0 = 0x315a0;
0x00018a76 ldr.w r2, [r0, 0xb8] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018a7a add r3, pc | r3 = 0x315ac;
0x00018a7c cmp r2, 0 |
0x00018a7e bgt 0x18af4 |
| while (r0 == 0) {
| label_0:
0x00018a80 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
| if (r3 != 0) {
0x00018a82 cbz r3, 0x18a9c |
0x00018a84 blx 0x3010 | fcn_00003010 ();
0x00018a88 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00018a8a blx 0x3528 | r0 = BIO_set_flags ();
0x00018a8e mov r3, r0 | r3 = r0;
0x00018a90 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00018a92 str r3, [sp] | *(sp) = r3;
0x00018a94 blx 0x33d8 | fcn_000033d8 ();
0x00018a98 movs r3, 0 | r3 = 0;
0x00018a9a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| }
0x00018a9c ldr r0, [pc, 0x90] |
0x00018a9e movs r2, 3 | r2 = 3;
0x00018aa0 movw r1, 0x39f | r1 = 0x39f;
0x00018aa4 add r0, pc | r0 = 0x315d8;
0x00018aa6 adds r0, 0xdc | r0 += 0xdc;
0x00018aa8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00018aac ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
| if (r0 != 0) {
0x00018aae cbz r0, 0x18ab4 |
0x00018ab0 blx 0x2fa4 | fcn_00002fa4 ();
| }
0x00018ab4 ldr r0, [pc, 0x7c] |
0x00018ab6 movs r2, 0 | r2 = 0;
0x00018ab8 str r2, [r4, 0x20] | *((r4 + 0x20)) = r2;
0x00018aba movs r3, 3 | r3 = 3;
0x00018abc movw r1, 0x3a3 | r1 = 0x3a3;
0x00018ac0 add r0, pc | r0 = 0x315f8;
0x00018ac2 mov r4, r0 | r4 = r0;
0x00018ac4 adds r0, 0xdc | r0 += 0xdc;
0x00018ac6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018aca movs r3, 3 | r3 = 3;
0x00018acc mov r2, sp | r2 = sp;
0x00018ace add.w r0, r4, 0xf8 | r0 = r4 + 0xf8;
0x00018ad2 movw r1, 0x3b9 | r1 = 0x3b9;
0x00018ad6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018ada ldr r2, [pc, 0x5c] |
0x00018adc ldr r3, [pc, 0x44] | r3 = *(0x18b24);
0x00018ade ldr r0, [sp] | r0 = *(sp);
0x00018ae0 add r2, pc | r2 = 0x3161e;
0x00018ae2 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018ae4 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018ae6 ldr r3, [sp, 4] | r3 = var_4h;
0x00018ae8 eors r2, r3 | r2 ^= r3;
0x00018aea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00018aee bne 0x18b16 | goto label_1;
| }
0x00018af0 add sp, 8 |
0x00018af2 pop {r4, r5, r6, pc} |
0x00018af4 ldr r2, [pc, 0x44] | r2 = *(0x18b3c);
0x00018af6 add.w r5, r0, 0xac | r5 = r0 + 0xac;
0x00018afa mov r1, r4 | r1 = r4;
0x00018afc mov r0, r5 | r0 = r5;
0x00018afe ldr r6, [r3, r2] | r6 = *((r3 + r2));
0x00018b00 mov r2, r6 | r2 = r6;
0x00018b02 bl 0xd6c0 | r0 = fcn_0000d6c0 (r0, r1, r2);
0x00018b06 cmp r0, 0 |
0x00018b08 beq 0x18a80 |
| }
0x00018b0a mov r2, r6 | r2 = r6;
0x00018b0c mov r1, r4 | r1 = r4;
0x00018b0e mov r0, r5 | r0 = r5;
0x00018b10 bl 0xd948 | fcn_0000d948 (r0, r1, r2);
0x00018b14 b 0x18a80 | goto label_0;
| label_1:
0x00018b16 blx 0x348c | fprintf_chk ()
0x00018b1a nop |
0x00018b1c ldrh r0, [r4, r1] | r0 = *((r4 + r1));
0x00018b1e movs r0, r0 |
0x00018b20 str r6, [r6, 0x20] | *((r6 + 0x20)) = r6;
0x00018b22 movs r1, r0 | r1 = r0;
0x00018b24 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00018b26 movs r0, r0 |
0x00018b28 cmp r0, r0 |
0x00018b2a movs r1, r1 |
0x00018b2c str r6, [r2, 0x20] | *((r2 + 0x20)) = r6;
0x00018b2e movs r1, r0 | r1 = r0;
0x00018b30 ldrh r4, [r1, r0] | r4 = *((r1 + r0));
0x00018b32 movs r0, r0 |
0x00018b34 ldr r0, [r6, r7] | r0 = *((r6 + r7));
0x00018b36 movs r0, r0 |
0x00018b38 str r0, [r6, 0x18] | *((r6 + 0x18)) = r0;
0x00018b3a movs r1, r0 | r1 = r0;
0x00018b3c lsls r4, r3, 0xb | r4 = r3 << 0xb;
0x00018b3e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x18b40 */
| #include <stdint.h>
|
; (fcn) fcn.00018b40 () | void fcn_00018b40 (int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| char * mode;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00018b40 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00018b44 mov sl, r2 | sl = r2;
0x00018b46 ldr r4, [pc, 0x240] |
0x00018b48 mov r6, r3 | r6 = r3;
0x00018b4a sub sp, 0x3c |
0x00018b4c mov sb, r0 | sb = r0;
0x00018b4e ldr r2, [pc, 0x23c] |
0x00018b50 mov fp, r1 |
0x00018b52 ldr r3, [pc, 0x23c] | r3 = *(0x18d92);
0x00018b54 add r4, pc | r4 = 0x318e2;
0x00018b56 str r4, [sp, 0x18] | var_18h = r4;
0x00018b58 movw r1, 0x3c7 | r1 = 0x3c7;
0x00018b5c add r2, pc | r2 = 0x318ee;
0x00018b5e ldr r0, [pc, 0x234] |
0x00018b60 ldr r3, [r2, r3] |
0x00018b62 movs r2, 3 | r2 = 3;
0x00018b64 ldr.w r8, [sp, 0x60] | r8 = *(arg_60h);
0x00018b68 add r0, pc |
0x00018b6a ldr r4, [sp, 0x68] | r4 = *(arg_68h);
0x00018b6c ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018b6e str r3, [sp, 0x34] | var_34h = r3;
0x00018b70 mov.w r3, 0 | r3 = 0;
0x00018b74 movs r3, 0 | r3 = 0;
0x00018b76 str r3, [sp, 0x24] | var_24h = r3;
0x00018b78 add.w r0, r0, 0x108 | r0 = 0x31a0a;
0x00018b7c ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x00018b7e str r3, [sp, 0x14] | var_14h = r3;
0x00018b80 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00018b84 cmp.w r8, 0 |
0x00018b88 str r6, [sp, 0x30] | var_30h = r6;
| if (r8 <= 0) {
0x00018b8a ble.w 0x18d58 | goto label_6;
| }
0x00018b8e add.w r5, r4, r8, lsl 2 | r5 = r4 + (r8 << 2);
0x00018b92 mov r2, r6 | r2 = r6;
0x00018b94 mov r3, r4 | r3 = r4;
| do {
0x00018b96 ldr r1, [r3], 4 | r1 = *(r3);
| r3 += 4;
0x00018b9a cmp r3, r5 |
0x00018b9c add r2, r1 | r2 += r1;
0x00018b9e bne 0x18b96 |
| } while (r3 != r5);
0x00018ba0 ldr r0, [pc, 0x1f4] |
0x00018ba2 mov.w r1, 0x3cc | r1 = 0x3cc;
0x00018ba6 str r2, [sp, 0x30] | var_30h = r2;
0x00018ba8 add r0, pc | r0 = 0x31944;
0x00018baa bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00018bae mov r3, r0 | r3 = r0;
0x00018bb0 str r0, [sp, 0x2c] | mode = r0;
0x00018bb2 cmp r0, 0 |
| if (r0 == 0) {
0x00018bb4 beq.w 0x18d50 | goto label_7;
| }
0x00018bb8 mov r2, r6 | r2 = r6;
0x00018bba mov r1, sl | r1 = sl;
0x00018bbc adds r7, r3, r6 | r7 = r3 + r6;
0x00018bbe blx 0x32a0 | pthread_cond_signal ();
0x00018bc2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00018bc4 subs r6, r3, 4 | r6 = r3 - 4;
0x00018bc6 b 0x18bce |
| while (r1 == 0) {
| label_0:
0x00018bc8 adds r4, 4 | r4 += 4;
0x00018bca cmp r4, r5 |
| if (r4 == r5) {
0x00018bcc beq 0x18bee | goto label_5;
| }
| label_1:
0x00018bce ldr r1, [r6, 4]! | r1 = *((r6 += 4));
0x00018bd2 cmp r1, 0 |
0x00018bd4 beq 0x18bc8 |
| }
0x00018bd6 ldr r2, [r4] | r2 = *(r4);
0x00018bd8 cmp r2, 0 |
| if (r2 == 0) {
0x00018bda beq 0x18bc8 | goto label_0;
| }
0x00018bdc mov r0, r7 | r0 = r7;
0x00018bde adds r4, 4 | r4 += 4;
0x00018be0 blx 0x32a0 | pthread_cond_signal ();
0x00018be4 ldr r3, [r4, -0x4] | r3 = *((r4 - 0x4));
0x00018be8 cmp r4, r5 |
0x00018bea add r7, r3 | r7 += r3;
| if (r4 != r5) {
0x00018bec bne 0x18bce | goto label_1;
| }
| label_5:
0x00018bee ldr r4, [pc, 0x1ac] |
0x00018bf0 add r4, pc | r4 = 0x31992;
0x00018bf2 adds r4, 0x94 | r4 += 0x94;
0x00018bf4 mov r0, r4 | r0 = r4;
0x00018bf6 blx 0x324c | fcn_0000324c ();
0x00018bfa blx 0x3010 | fcn_00003010 ();
0x00018bfe ldrd r1, r2, [sp, 0x2c] | __asm ("ldrd r1, r2, [var_30h]");
0x00018c02 mov r0, sb | r0 = sb;
0x00018c04 blx 0x30b4 | fopen (r0, r1);
0x00018c08 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00018c0a str r0, [sp, 0x24] | var_24h = r0;
0x00018c0c cmp r0, r2 |
0x00018c0e itt eq |
| if (r0 != r2) {
0x00018c10 moveq r3, 0 | r3 = 0;
| }
| if (r0 != r2) {
0x00018c12 streq r3, [sp, 0x24] | var_24h = r3;
| }
0x00018c14 bne 0x18c66 |
| while (r0 != 3) {
| label_2:
0x00018c16 ldr r0, [pc, 0x188] |
0x00018c18 add r0, pc | r0 = 0x319be;
0x00018c1a adds r0, 0x94 | r0 += 0x94;
0x00018c1c blx 0x31dc | fcn_000031dc ();
0x00018c20 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00018c22 adds r3, 0x16 | r3 += 0x16;
| if (r3 == 0x16) {
0x00018c24 beq 0x18d08 | goto label_8;
| }
0x00018c26 ldr r0, [pc, 0x17c] |
0x00018c28 movw r1, 0x3fe | r1 = 0x3fe;
0x00018c2c ldr r2, [sp, 0x2c] | r2 = mode;
0x00018c2e add r0, pc | r0 = 0x319d8;
0x00018c30 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_3:
0x00018c34 ldr r0, [pc, 0x170] |
0x00018c36 movs r3, 3 | r3 = 3;
0x00018c38 add r2, sp, 0x24 | r2 += var_24h;
0x00018c3a movw r1, 0x40d | r1 = 0x40d;
0x00018c3e add r0, pc |
0x00018c40 add.w r0, r0, 0x108 | r0 = 0x31af2;
0x00018c44 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018c48 ldr r2, [pc, 0x160] |
0x00018c4a ldr r3, [pc, 0x144] | r3 = *(0x18d92);
0x00018c4c ldr r0, [sp, 0x24] | r0 = var_24h;
0x00018c4e add r2, pc | r2 = 0x319fe;
0x00018c50 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018c52 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018c54 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00018c56 eors r2, r3 | r2 ^= r3;
0x00018c58 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00018c5c bne.w 0x18d84 | goto label_9;
| }
0x00018c60 add sp, 0x3c |
0x00018c62 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00018c66 mov r3, r0 | r3 = r0;
0x00018c68 ldr r0, [pc, 0x144] |
0x00018c6a movs r5, 0 | r5 = 0;
0x00018c6c mov r2, fp | r2 = fp;
0x00018c6e mov r1, sb | r1 = sb;
0x00018c70 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00018c74 add r0, pc | r0 = 0x31a28;
0x00018c76 bl 0x17d04 | r0 = fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018c7a cmp r0, 3 |
0x00018c7c mov r3, r0 | r3 = r0;
0x00018c7e itt ne |
| if (r0 == 3) {
0x00018c80 movne r3, -1 | r3 = -1;
| }
| if (r0 != 3) {
0x00018c84 str r3, [sp, 0x24] | var_24h = r3;
| }
0x00018c86 bne 0x18c16 |
| }
0x00018c88 ldr r0, [pc, 0x128] |
0x00018c8a movs r2, 4 | r2 = 4;
0x00018c8c movw r1, 0x3e7 | r1 = 0x3e7;
0x00018c90 movs r7, 1 | r7 = 1;
0x00018c92 str r3, [sp, 0x1c] | var_1ch = r3;
0x00018c94 add r0, pc | r0 = 0x31a4c;
0x00018c96 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00018c9a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00018c9c mov r6, r0 | r6 = r0;
0x00018c9e str r7, [sp, 0x28] | var_28h = r7;
0x00018ca0 cmp r0, 0 |
| if (r0 == 0) {
0x00018ca2 beq 0x18d76 | goto label_10;
| }
0x00018ca4 ldr r2, [pc, 0x110] |
0x00018ca6 mov r0, r3 | r0 = r3;
0x00018ca8 mov.w r1, -1 | r1 = -1;
0x00018cac ldr r3, [sp, 0x30] | r3 = var_30h;
0x00018cae str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00018cb2 add r2, pc | r2 = 0x31a6e;
0x00018cb4 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00018cb8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00018cba mov r1, sb | r1 = sb;
0x00018cbc mov r2, r7 | r2 = r7;
0x00018cbe mov r0, fp | r0 = fp;
0x00018cc0 str r5, [sp, 8] | var_8h = r5;
0x00018cc2 str r3, [sp, 4] | var_4h_2 = r3;
0x00018cc4 add r3, sp, 0x28 | r3 += var_28h;
0x00018cc6 str r3, [sp] | *(sp) = r3;
0x00018cc8 add r3, sp, 0x2c | r3 += mode;
0x00018cca bl 0xd3ec | fcn_0000d3ec (r0, r1, r2, r3, r4, r5, r6);
0x00018cce ldr r3, [pc, 0xec] | r3 = *(0x18dbe);
0x00018cd0 mov r1, r6 | r1 = r6;
0x00018cd2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00018cd4 str.w fp, [r6] | __asm ("str.w fp, [r6]");
0x00018cd8 ldr r4, [r2, r3] | r4 = *((r2 + r3));
0x00018cda movs r2, 4 | r2 = 4;
0x00018cdc ldr.w r0, [r4, 0x110] | r0 = *((r4 + 0x110));
0x00018ce0 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00018ce4 mov r0, fp | r0 = fp;
0x00018ce6 and fp, fp, 0x1f |
0x00018cea blx 0x3760 | r0 = fcn_00003760 ();
0x00018cee add.w r3, r0, 0x44 | r3 = r0 + 0x44;
0x00018cf2 mvn r2, 0x15 | r2 = ~0x15;
0x00018cf6 add.w r4, r4, r3, lsl 2 | r4 += (r3 << 2);
0x00018cfa str r2, [sp, 0x24] | var_24h = r2;
0x00018cfc lsl.w r3, r7, fp | r3 = r7 << fp;
0x00018d00 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00018d02 orrs r3, r2 | r3 |= r2;
0x00018d04 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00018d06 b 0x18c16 | goto label_2;
| label_8:
0x00018d08 ldr r0, [pc, 0xb4] |
0x00018d0a mov r2, sl | r2 = sl;
0x00018d0c movw r1, 0x402 | r1 = 0x402;
0x00018d10 add r0, pc | r0 = 0x31ad4;
0x00018d12 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00018d16 cmp.w r8, 0 |
| if (r8 <= 0) {
0x00018d1a ble 0x18c34 | goto label_3;
| }
0x00018d1c ldr r5, [sp, 0x6c] | r5 = *(arg_6ch);
0x00018d1e movs r4, 0 | r4 = 0;
0x00018d20 ldr.w sb, [pc, 0xa0] |
0x00018d24 mov r6, r4 | r6 = r4;
0x00018d26 ldr r7, [sp, 0x14] | r7 = var_14h;
0x00018d28 subs r5, 4 | r5 -= 4;
0x00018d2a add sb, pc | sb = 0x31af2;
0x00018d2c b 0x18d38 | goto label_11;
| label_4:
0x00018d2e adds r4, 1 | r4++;
0x00018d30 adds r7, 4 | r7 += 4;
0x00018d32 cmp r8, r4 |
| if (r8 == r4) {
0x00018d34 beq.w 0x18c34 | goto label_3;
| }
| label_11:
0x00018d38 ldr r3, [r5, 4]! | r3 = *((r5 += 4));
0x00018d3c cmp r3, 0 |
| if (r3 == 0) {
0x00018d3e beq 0x18d2e | goto label_4;
| }
0x00018d40 ldr r2, [r7] | r2 = *(r7);
0x00018d42 movw r1, 0x407 | r1 = 0x407;
0x00018d46 mov r0, sb | r0 = sb;
0x00018d48 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00018d4c str r6, [r7] | *(r7) = r6;
0x00018d4e b 0x18d2e | goto label_4;
| do {
| label_7:
0x00018d50 mvn r3, 0x62 | r3 = ~0x62;
0x00018d54 str r3, [sp, 0x24] | var_24h = r3;
0x00018d56 b 0x18c34 | goto label_3;
| label_6:
0x00018d58 ldr r0, [pc, 0x6c] |
0x00018d5a mov r2, r6 | r2 = r6;
0x00018d5c mov.w r1, 0x3cc | r1 = 0x3cc;
0x00018d60 add r0, pc | r0 = 0x31b2c;
0x00018d62 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00018d66 str r0, [sp, 0x2c] | mode = r0;
0x00018d68 cmp r0, 0 |
0x00018d6a beq 0x18d50 |
| } while (r0 == 0);
0x00018d6c mov r2, r6 | r2 = r6;
0x00018d6e mov r1, sl | r1 = sl;
0x00018d70 blx 0x32a0 | pthread_cond_signal ();
0x00018d74 b 0x18bee | goto label_5;
| label_10:
0x00018d76 mvn r3, 0x62 | r3 = ~0x62;
0x00018d7a mov r0, r4 | r0 = r4;
0x00018d7c str r3, [sp, 0x24] | var_24h = r3;
0x00018d7e blx 0x31dc | fcn_000031dc ();
0x00018d82 b 0x18c34 | goto label_3;
| label_9:
0x00018d84 blx 0x348c | fprintf_chk ()
0x00018d88 str r4, [r7, 0x10] | *((r7 + 0x10)) = r4;
0x00018d8a movs r1, r0 | r1 = r0;
0x00018d8c str r4, [r6, 0x10] | *((r6 + 0x10)) = r4;
0x00018d8e movs r1, r0 | r1 = r0;
0x00018d90 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00018d92 movs r0, r0 |
0x00018d94 ldr r0, [r1, r5] | r0 = *((r1 + r5));
0x00018d96 movs r0, r0 |
0x00018d98 ldr r6, [pc, 0x380] | r6 = *(0x1911c);
0x00018d9a movs r0, r0 |
0x00018d9c asrs r4, r0 | r4 >>= r0;
0x00018d9e movs r1, r1 |
0x00018da0 lsrs r4, r3 | r4 >>= r3;
0x00018da2 movs r1, r1 |
0x00018da4 ldr r6, [pc, 0x168] | r6 = *(0x18f10);
0x00018da6 movs r0, r0 |
0x00018da8 ldr r2, [r6, r1] | r2 = *(0x18f10);
0x00018daa movs r0, r0 |
0x00018dac str r2, [r0, 4] | *((r0 + 4)) = r2;
0x00018dae movs r1, r0 | r1 = r0;
0x00018db0 ldr r7, [pc, 0x3e0] | r7 = *(0x19194);
0x00018db2 movs r0, r0 |
0x00018db4 ldr r5, [pc, 0x3d0] | r5 = *(0x19188);
0x00018db6 movs r0, r0 |
0x00018db8 ldr r7, [pc, 0x318] | r7 = *(0x190d4);
0x00018dba movs r0, r0 |
0x00018dbc lsls r0, r6, 0xc | r0 = r6 << 0xc;
0x00018dbe movs r0, r0 |
0x00018dc0 ldr r5, [pc, 0x1e0] | r5 = *(0x18fa4);
0x00018dc2 movs r0, r0 |
0x00018dc4 ldr r5, [pc, 0x178] | r5 = *(0x18f40);
0x00018dc6 movs r0, r0 |
0x00018dc8 ldr r5, [pc, 0xa0] | r5 = *(0x18e6c);
0x00018dca movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x18f6c */
| #include <stdint.h>
|
; (fcn) fcn.00018f6c () | void fcn_00018f6c (int16_t arg1) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| if (? < ?) {
0x00018f6c andhs r4, r3, 44, 22 | r4 = r3 & (44 22);
| }
0x00018f70 ldr.w ip, [pc, 0xb0] |
0x00018f74 movw r1, 0x436 | r1 = 0x436;
0x00018f78 push {r4, r5, lr} |
0x00018f7a mov r4, r0 | r4 = r0;
0x00018f7c add r3, pc | r3 += pc;
0x00018f7e sub sp, 0x14 |
0x00018f80 add.w r0, r3, 0x14c | r0 = r3 + 0x14c;
0x00018f84 add ip, pc | ip = 0x31fac;
0x00018f86 ldr r3, [pc, 0xa0] | r3 = *(0x1902a);
0x00018f88 movs r5, 0 | r5 = 0;
0x00018f8a ldr.w r3, [ip, r3] |
0x00018f8e ldr r3, [r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018f90 str r3, [sp, 0xc] | var_ch = r3;
0x00018f92 mov.w r3, 0 | r3 = 0;
0x00018f96 str r5, [sp, 8] | var_8h = r5;
0x00018f98 bl 0xfb54 | r0 = fcn_0000fb54 (r0, r1, r2);
0x00018f9c blx 0x3010 | fcn_00003010 ();
0x00018fa0 ldrd r1, r2, [r4, 0x14] | __asm ("ldrd r1, r2, [r4, 0x14]");
0x00018fa4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00018fa6 blx 0x30b4 | fopen (r0, r1);
0x00018faa ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00018fac str r0, [sp, 8] | var_8h = r0;
0x00018fae cmp r0, r2 |
| if (r0 == r2) {
0x00018fb0 beq 0x18ff8 | goto label_0;
| }
0x00018fb2 mov r3, r0 | r3 = r0;
0x00018fb4 ldr r0, [pc, 0x74] |
0x00018fb6 ldr r2, [r4] | r2 = *(r4);
0x00018fb8 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00018fba add r0, pc | r0 = 0x31fea;
0x00018fbc strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00018fc0 bl 0x17d04 | r0 = fcn_00017d04 (r0, r1, r2, r3, r4, r5);
0x00018fc4 cmp r0, 3 |
0x00018fc6 it eq |
0x00018fc8 streq r5, [sp, 8] | var_8h = r5;
| while (1) {
0x00018fca ldr r0, [pc, 0x64] |
0x00018fcc movs r3, 3 | r3 = 3;
0x00018fce add r2, sp, 8 | r2 += var_8h;
0x00018fd0 movw r1, 0x445 | r1 = 0x445;
0x00018fd4 add r0, pc |
0x00018fd6 add.w r0, r0, 0x14c | r0 = 0x32156;
0x00018fda bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00018fde ldr r2, [pc, 0x54] |
0x00018fe0 ldr r3, [pc, 0x44] | r3 = *(0x19028);
0x00018fe2 ldr r0, [sp, 8] | r0 = var_8h;
0x00018fe4 add r2, pc | r2 = 0x3201e;
0x00018fe6 ldr r3, [r2, r3] | r3 = imp._ITM_deregisterTMCloneTable;
0x00018fe8 ldr r2, [r3] | r2 = imp._ITM_deregisterTMCloneTable;
0x00018fea ldr r3, [sp, 0xc] | r3 = var_ch;
0x00018fec eors r2, r3 | r2 ^= r3;
0x00018fee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00018ff2 bne 0x1901c | goto label_1;
| }
0x00018ff4 add sp, 0x14 |
0x00018ff6 pop {r4, r5, pc} |
| label_0:
0x00018ff8 ldr r0, [pc, 0x3c] |
0x00018ffa movw r1, 0x43b | r1 = 0x43b;
0x00018ffe ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00019000 add r0, pc | r0 = 0x3203c;
0x00019002 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00019006 ldr r2, [pc, 0x34] |
0x00019008 mov.w r1, -1 | r1 = -1;
0x0001900c ldr r3, [r4] | r3 = *(r4);
0x0001900e movs r0, 3 | r0 = 3;
0x00019010 add r2, pc | r2 = 0x32052;
0x00019012 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x00019016 movs r3, 1 | r3 = 1;
0x00019018 str r3, [sp, 8] | var_8h = r3;
0x0001901a b 0x18fca |
| }
| label_1:
0x0001901c blx 0x348c | fprintf_chk ()
0x00019020 strb r4, [r6, r4] | *((r6 + r4)) = r4;
0x00019022 movs r0, r0 |
0x00019024 ldrb r4, [r1, r4] | r4 = *((r1 + r4));
0x00019026 movs r1, r0 | r1 = r0;
0x00019028 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0001902a movs r0, r0 |
0x0001902c ldr r4, [pc, 0x2c8] | r4 = *(0x192f8);
0x0001902e movs r0, r0 |
0x00019030 strb r4, [r3, r3] | *((r3 + r3)) = r4;
0x00019032 movs r0, r0 |
0x00019034 ldrb r4, [r5, r2] | r4 = *((r5 + r2));
0x00019036 movs r1, r0 | r1 = r0;
0x00019038 ldr r2, [pc, 0x220] | r2 = *(0x1925c);
0x0001903a movs r0, r0 |
0x0001903c ldr r5, [pc, 0xb0] | r5 = *(0x190f0);
0x0001903e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x108b0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.MQTTAsync_connect () | void MQTTAsync_connect (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_14h_2;
| int32_t var_1ch;
| int32_t var_1ch_2;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
0x000108b0 invalid |
0x000108b4 movs r2, 3 | r2 = 3;
0x000108b6 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000108ba mov r4, r1 | r4 = r1;
0x000108bc ldr.w r1, [pc, 0x77c] |
0x000108c0 mov r6, r0 | r6 = r0;
0x000108c2 add r3, pc | r3 += pc;
0x000108c4 sub sp, 0x2c |
0x000108c6 add.w r0, r3, 0x14 | r0 = r3 + 0x14;
0x000108ca ldr.w r3, [pc, 0x774] | r3 = *(0x11042);
0x000108ce add r1, pc | r1 = 0x2190e;
0x000108d0 movs r5, 0 | r5 = 0;
0x000108d2 str r5, [sp, 0x10] | var_10h = r5;
0x000108d4 ldr r3, [r1, r3] |
0x000108d6 movw r1, 0x21a | r1 = 0x21a;
0x000108da ldr.w r7, [pc, 0x768] |
0x000108dc strb r0, [r5, 0x1d] | *((r5 + 0x1d)) = r0;
0x000108de ldr r3, [r3] | r3 = *(0x2190e);
0x000108e0 str r3, [sp, 0x24] | var_24h = r3;
0x000108e2 mov.w r3, 0 | r3 = 0;
0x000108e6 add r7, pc | r7 = 0x21930;
0x000108e8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000108ec cmp r4, 0 |
| if (r4 == 0) {
0x000108ee beq 0x10996 | goto label_15;
| }
0x000108f0 ldr.w r1, [pc, 0x754] |
0x000108f4 movs r2, 4 | r2 = 4;
0x000108f6 mov r0, r4 | r0 = r4;
0x000108f8 add r1, pc | r1 = 0x21944;
0x000108fa blx 0x3698 | fcn_00003698 ();
0x000108fc cdp p6, 0xc, c4, c14, c5, 0 | __asm ("cdp p6, 0xc, c4, c14, c5, 0");
| if (r0 != 0) {
0x00010900 cbnz r0, 0x1090c | goto label_0;
| }
0x00010902 ldr.w r8, [r4, 4] | r8 = *((r4 + 4));
0x00010906 cmp.w r8, 8 |
0x0001090a bls 0x10948 |
| while (r0 != 0) {
| label_0:
0x0001090c mvn r3, 7 | r3 = ~7;
0x00010910 str r3, [sp, 0x10] | var_10h = r3;
| label_1:
0x00010912 ldr.w r0, [pc, 0x738] |
0x00010916 movs r3, 3 | r3 = 3;
0x00010918 add r2, sp, 0x10 | r2 += var_10h;
0x0001091a mov.w r1, 0x38c | r1 = 0x38c;
0x0001091e add r0, pc | r0 = 0x21970;
0x00010920 adds r0, 0x14 | r0 += 0x14;
0x00010922 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00010926 ldr.w r2, [pc, 0x728] |
0x0001092a ldr.w r3, [pc, 0x714] | r3 = *(0x11042);
0x0001092e ldr r0, [sp, 0x10] | r0 = var_10h;
0x00010930 add r2, pc | r2 = 0x21986;
0x00010932 ldr r3, [r2, r3] | r3 = *(0x21986);
0x00010934 ldr r2, [r3] | r2 = *(0x21986);
0x00010936 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00010938 eors r2, r3 | r2 ^= r3;
0x0001093a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001093e bne.w 0x1102a | goto label_16;
| }
0x00010942 add sp, 0x2c |
0x00010944 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x00010948 ldr r3, [r6, 4] | r3 = *((r6 + 4));
| if (r3 != 0) {
0x0001094a cbz r3, 0x10950 |
0x0001094c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
| if (r3 == 0) {
0x0001094e cbz r3, 0x10996 | goto label_15;
| }
| }
0x00010950 ldr.w sb, [r4, 0x14] | sb = *((r4 + 0x14));
0x00010954 cmp.w sb, 0 |
| if (sb == 0) {
0x00010958 beq 0x1099e | goto label_17;
| }
0x0001095a ldr.w r1, [pc, 0x6f8] |
0x0001095e movs r2, 4 | r2 = 4;
0x00010960 mov r0, sb | r0 = sb;
0x00010962 add r1, pc | r1 = 0x219bc;
0x00010964 blx 0x3698 | r0 = fcn_00003698 ();
0x00010968 cmp r0, 0 |
0x0001096a bne 0x1090c |
| }
0x0001096c ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00010970 cmp r3, 1 |
| if (r3 > 1) {
0x00010972 bhi 0x1090c | goto label_0;
| }
0x00010974 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00010978 cmp r3, 2 |
0x0001097a itt hi |
| if (r3 <= 2) {
0x0001097c mvnhi r3, 8 | r3 = ~8;
| }
| if (r3 <= 2) {
0x00010980 str r3, [sp, 0x10] | var_10h = r3;
| goto label_18;
| }
| if (r3 > 2) {
| label_18:
0x00010982 bhi 0x10912 | goto label_1;
| }
0x00010984 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
| if (r3 != 0) {
0x00010988 cbz r3, 0x10996 |
0x0001098a ldrb r3, [r3] | r3 = *(r3);
| if (r3 != 0) {
0x0001098c cbnz r3, 0x1099e | goto label_17;
| }
0x0001098e mvn r3, 0x10 | r3 = ~0x10;
0x00010992 str r3, [sp, 0x10] | var_10h = r3;
0x00010994 b 0x10912 | goto label_1;
| }
| label_15:
0x00010996 mvn r3, 5 | r3 = ~5;
0x0001099a str r3, [sp, 0x10] | var_10h = r3;
0x0001099c b 0x10912 | goto label_1;
| label_17:
0x0001099e cmp.w r8, 0 |
| if (r8 == 0) {
0x000109a2 beq 0x109c8 | goto label_19;
| }
0x000109a4 ldr.w r8, [r4, 0x28] | r8 = *((r4 + 0x28));
0x000109a8 cmp.w r8, 0 |
| if (r8 == 0) {
0x000109ac beq 0x109c8 | goto label_19;
| }
0x000109ae ldr.w r1, [pc, 0x6a8] |
0x000109b2 movs r2, 4 | r2 = 4;
0x000109b4 mov r0, r8 | r0 = r8;
0x000109b6 add r1, pc | r1 = 0x21a14;
0x000109b8 blx 0x3698 | r0 = fcn_00003698 ();
0x000109bc cmp r0, 0 |
| if (r0 != 0) {
0x000109be bne 0x1090c | goto label_0;
| }
0x000109c0 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000109c4 cmp r3, 5 |
| if (r3 > 5) {
0x000109c6 bhi 0x1090c | goto label_0;
| }
| label_19:
0x000109c8 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x000109ca cmp r3, 4 |
| if (r3 <= 4) {
0x000109cc ble 0x109e0 | goto label_20;
| }
0x000109ce ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000109d0 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x000109d4 cmp r3, 4 |
0x000109d6 itt le |
| if (r3 > 4) {
0x000109d8 mvnle r3, 0xf | r3 = ~0xf;
| }
| if (r3 > 4) {
0x000109dc str r3, [sp, 0x10] | var_10h = r3;
| goto label_21;
| }
| if (r3 <= 4) {
| label_21:
0x000109de ble 0x10912 | goto label_1;
| }
| label_20:
0x000109e0 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
| if (r0 != 0) {
0x000109e2 cbz r0, 0x109ee |
0x000109e4 bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x000109e8 cmp r0, 0 |
| if (r0 == 0) {
0x000109ea beq.w 0x10ece | goto label_22;
| }
| }
0x000109ee ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
| if (r0 != 0) {
0x000109f0 cbz r0, 0x109fc |
0x000109f2 bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x000109f6 cmp r0, 0 |
| if (r0 == 0) {
0x000109f8 beq.w 0x10ece | goto label_22;
| }
| }
0x000109fc ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x000109fe ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00010a00 cmp r3, 4 |
| if (r3 <= 4) {
0x00010a02 bgt 0x10a1e |
0x00010a04 cmp r2, 5 |
| if (r2 <= 5) {
0x00010a06 ble.w 0x10f20 | goto label_23;
| }
0x00010a0a ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
| if (r3 == 0) {
0x00010a0c cbnz r3, 0x10a16 |
0x00010a0e ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00010a10 cmp r3, 0 |
| if (r3 == 0) {
0x00010a12 beq.w 0x10fda | goto label_24;
| }
| }
| label_2:
0x00010a16 mvn r3, 0xe | r3 = ~0xe;
0x00010a1a str r3, [sp, 0x10] | var_10h = r3;
0x00010a1c b 0x10912 | goto label_1;
| }
0x00010a1e cmp r2, 5 |
| if (r2 <= 5) {
0x00010a20 ble.w 0x1090c | goto label_0;
| }
0x00010a24 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00010a26 cmp r3, 0 |
| if (r3 != 0) {
0x00010a28 bne 0x10a16 | goto label_2;
| }
0x00010a2a ldrd r2, r3, [r4, 0x64] | __asm ("ldrd r2, r3, [r4, 0x64]");
| label_9:
0x00010a2e ldr r1, [r4, 0x2c] | r1 = *((r4 + 0x2c));
0x00010a30 str r1, [r6, 0x44] | *((r6 + 0x44)) = r1;
0x00010a32 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x00010a34 strd r2, r3, [r6, 0x4c] | __asm ("strd r2, r3, [r6, 0x4c]");
0x00010a38 str r1, [r6, 0x48] | *((r6 + 0x48)) = r1;
| label_6:
0x00010a3a ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00010a3c mov.w sb, 0 | sb = 0;
0x00010a40 ldr.w r8, [pc, 0x618] | r8 = *(0x0001105c);
0x00010a44 str r3, [r6, 0x58] | *((r6 + 0x58)) = r3;
0x00010a46 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00010a48 add r8, pc | r8 += pc;
0x00010a4a str.w sb, [r8, 4] | __asm ("str.w sb, [r8, 4]");
0x00010a4e str.w r3, [r6, 0x110] | __asm ("str.w r3, [r6, 0x110]");
0x00010a52 blx 0x3564 | SSL_pending ();
0x00010a56 ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x00010a5a cmp r3, r0 |
| if (r3 != r0) {
0x00010a5c beq 0x10a76 |
0x00010a5e ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00010a62 cmp r3, r0 |
| if (r3 == r0) {
0x00010a64 beq 0x10a76 | goto label_25;
| }
0x00010a66 ldr.w r3, [pc, 0x5f8] | r3 = *(0x00011060);
0x00010a6a mov.w sb, 1 | sb = 1;
0x00010a6e add r3, pc | r3 += pc;
0x00010a70 ldr r0, [r3] | r0 = *(r3);
0x00010a72 bl 0x13684 | fcn_00013684 ();
| }
| label_25:
0x00010a76 ldr.w r2, [pc, 0x5ec] | r2 = *(0x00011064);
0x00010a7a add r2, pc | r2 += pc;
0x00010a7c ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00010a7e subs r3, 1 | r3--;
0x00010a80 cmp r3, 1 |
| if (r3 >= 1) {
0x00010a82 bls 0x10a94 |
0x00010a84 ldr.w r3, [pc, 0x5e0] | r3 = *(0x11068);
0x00010a88 movs r1, 1 | r1 = 1;
0x00010a8a str r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
0x00010a8c movs r1, 0 | r1 = 0;
0x00010a8e ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00010a90 blx 0x3638 | fcn_00003638 ();
| }
0x00010a94 ldr.w r2, [pc, 0x5d4] | r2 = *(0x0001106c);
0x00010a98 add r2, pc | r2 += pc;
0x00010a9a ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00010a9c subs r3, 1 | r3--;
0x00010a9e cmp r3, 1 |
0x00010aa0 bhi.w 0x10ebe |
| while (1) {
0x00010aa4 cmp.w sb, 0 |
| if (sb != 0) {
0x00010aa8 bne.w 0x10f14 | goto label_26;
| }
| label_5:
0x00010aac ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010aae ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00010ab0 str r0, [r3, 0x60] | *((r3 + 0x60)) = r0;
0x00010ab2 bl 0x167c8 | fcn_000167c8 (r0);
0x00010ab6 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010ab8 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00010aba ldrb r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00010abc bfi r3, r2, 0, 1 | value_0 = BIT_MASK (0, 1);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x00010ac0 strb r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x00010ac2 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00010ac4 str r3, [r7, 0x68] | *((r7 + 0x68)) = r3;
0x00010ac6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00010ac8 cmp r3, 2 |
0x00010aca itt le |
| if (r3 > 2) {
0x00010acc movle r3, 0 | r3 = 0;
| }
| if (r3 > 2) {
0x00010ace strle r3, [r7, 0x9c] | *((r7 + 0x9c)) = r3;
| }
| if (r3 > 2) {
0x00010ad2 ble 0x10b18 |
0x00010ad4 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x00010ad6 cmp r3, 3 |
0x00010ad8 str.w r2, [r7, 0x9c] | __asm ("str.w r2, [r7, 0x9c]");
| if (r3 == 3) {
0x00010adc beq 0x10b18 | goto label_27;
| }
0x00010ade ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x00010ae0 cmp r3, 6 |
0x00010ae2 str.w r2, [r6, 0xfc] | __asm ("str.w r2, [r6, 0xfc]");
0x00010ae6 ldr r2, [r4, 0x48] | r2 = *((r4 + 0x48));
0x00010ae8 str.w r2, [r6, 0x100] | __asm ("str.w r2, [r6, 0x100]");
0x00010aec ldr r2, [r4, 0x4c] | r2 = *((r4 + 0x4c));
0x00010aee str.w r2, [r6, 0x104] | __asm ("str.w r2, [r6, 0x104]");
| if (r3 <= 6) {
0x00010af2 ble 0x10b18 | goto label_27;
| }
0x00010af4 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00010af6 cmp r3, 7 |
0x00010af8 str r2, [r7, 0x58] | *((r7 + 0x58)) = r2;
| if (r3 == 7) {
0x00010afa beq 0x10b18 | goto label_27;
| }
0x00010afc ldr r0, [r4, 0x70] | r0 = *((r4 + 0x70));
| if (r0 != 0) {
0x00010afe cbz r0, 0x10b0a |
0x00010b00 bl 0x5274 | fcn_00005274 (r0);
0x00010b04 str.w r0, [r7, 0xa4] | __asm ("str.w r0, [r7, 0xa4]");
0x00010b08 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
| }
0x00010b0a ldr r0, [r4, 0x74] | r0 = *((r4 + 0x74));
| if (r0 == 0) {
0x00010b0c cbz r0, 0x10b18 | goto label_27;
| }
0x00010b0e bl 0x5274 | fcn_00005274 (r0);
0x00010b12 str.w r0, [r7, 0xa8] | __asm ("str.w r0, [r7, 0xa8]");
0x00010b16 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
| }
| label_27:
0x00010b18 ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
| if (r3 != 0) {
0x00010b1a cbz r3, 0x10b52 |
0x00010b1c ldr.w r7, [pc, 0x550] |
0x00010b20 mov.w r1, 0x2a8 | r1 = 0x2a8;
0x00010b24 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00010b26 add r7, pc | r7 = 0x21b9a;
0x00010b28 mov r0, r7 | r0 = r7;
0x00010b2a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010b2e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010b30 mov r0, r7 | r0 = r7;
0x00010b32 movw r1, 0x2a9 | r1 = 0x2a9;
0x00010b36 ldr r3, [r3, 0x6c] | r3 = *((r3 + 0x6c));
0x00010b38 ldr r2, [r3] | r2 = *(r3);
0x00010b3a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010b3e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010b40 mov r0, r7 | r0 = r7;
0x00010b42 movw r1, 0x2aa | r1 = 0x2aa;
0x00010b46 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x00010b48 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010b4c ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010b4e movs r3, 0 | r3 = 0;
0x00010b50 str r3, [r7, 0x6c] | *((r7 + 0x6c)) = r3;
| }
0x00010b52 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 != 0) {
0x00010b54 cbz r3, 0x10b5e |
0x00010b56 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00010b58 cmp r3, 1 |
| if (r3 < 1) {
0x00010b5a bls.w 0x10f6a | goto label_28;
| }
| }
| label_8:
0x00010b5e ldr.w r3, [r7, 0xac] | r3 = *((r7 + 0xac));
0x00010b62 cmp r3, 0 |
| if (r3 != 0) {
0x00010b64 beq 0x10c14 |
0x00010b66 ldr r2, [r3, 8] | r2 = *((r3 + 8));
| if (r2 != 0) {
0x00010b68 cbz r2, 0x10b7e |
0x00010b6a ldr.w r0, [pc, 0x508] |
0x00010b6e mov.w r1, 0x2d8 | r1 = 0x2d8;
0x00010b72 add r0, pc | r0 = 0x21bec;
0x00010b74 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010b78 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010b7a ldr.w r3, [r3, 0xac] | r3 = *((r3 + 0xac));
| }
0x00010b7e ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| if (r2 != 0) {
0x00010b80 cbz r2, 0x10b96 |
0x00010b82 ldr.w r0, [pc, 0x4f4] |
0x00010b86 movw r1, 0x2da | r1 = 0x2da;
0x00010b8a add r0, pc | r0 = 0x21c08;
0x00010b8c bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010b90 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010b92 ldr.w r3, [r3, 0xac] | r3 = *((r3 + 0xac));
| }
0x00010b96 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
| if (r2 != 0) {
0x00010b98 cbz r2, 0x10bae |
0x00010b9a ldr.w r0, [pc, 0x4e0] |
0x00010b9e mov.w r1, 0x2dc | r1 = 0x2dc;
0x00010ba2 add r0, pc | r0 = 0x21c24;
0x00010ba4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010ba8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010baa ldr.w r3, [r3, 0xac] | r3 = *((r3 + 0xac));
| }
0x00010bae ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
| if (r2 != 0) {
0x00010bb0 cbz r2, 0x10bc6 |
0x00010bb2 ldr.w r0, [pc, 0x4cc] |
0x00010bb6 movw r1, 0x2de | r1 = 0x2de;
0x00010bba add r0, pc | r0 = 0x21c40;
0x00010bbc bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010bc0 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010bc2 ldr.w r3, [r3, 0xac] | r3 = *((r3 + 0xac));
| }
0x00010bc6 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
| if (r2 != 0) {
0x00010bc8 cbz r2, 0x10bde |
0x00010bca ldr.w r0, [pc, 0x4b8] |
0x00010bce mov.w r1, 0x2e0 | r1 = 0x2e0;
0x00010bd2 add r0, pc | r0 = 0x21c5c;
0x00010bd4 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010bd8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010bda ldr.w r3, [r3, 0xac] | r3 = *((r3 + 0xac));
| }
0x00010bde ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00010be0 cmp r2, 1 |
| if (r2 > 1) {
0x00010be2 ble 0x10bfc |
0x00010be4 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
| if (r2 == 0) {
0x00010be6 cbz r2, 0x10bfc | goto label_29;
| }
0x00010be8 ldr.w r0, [pc, 0x49c] |
0x00010bec mov.w r1, 0x2e4 | r1 = 0x2e4;
0x00010bf0 add r0, pc | r0 = 0x21c7c;
0x00010bf2 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010bf6 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010bf8 ldr.w r3, [r3, 0xac] | r3 = *((r3 + 0xac));
| }
| label_29:
0x00010bfc ldr.w r0, [pc, 0x48c] |
0x00010c00 mov r2, r3 | r2 = r3;
0x00010c02 movw r1, 0x2e6 | r1 = 0x2e6;
0x00010c06 add r0, pc | r0 = 0x21c96;
0x00010c08 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010c0c ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010c0e movs r3, 0 | r3 = 0;
0x00010c10 str.w r3, [r7, 0xac] | __asm ("str.w r3, [r7, 0xac]");
| }
0x00010c14 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00010c16 cmp r3, 0 |
| if (r3 != 0) {
0x00010c18 beq.w 0x10d2e |
0x00010c1c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010c1e cmp r3, 0 |
| if (r3 == 0) {
0x00010c20 beq.w 0x10d2e | goto label_30;
| }
0x00010c24 ldr.w r0, [pc, 0x468] |
0x00010c28 movs r2, 0x48 | r2 = 0x48;
0x00010c2a mov.w r1, 0x2ec | r1 = 0x2ec;
0x00010c2e add r0, pc | r0 = 0x21cc2;
0x00010c30 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00010c34 str.w r0, [r7, 0xac] | __asm ("str.w r0, [r7, 0xac]");
0x00010c38 cmp r0, 0 |
| if (r0 == 0) {
0x00010c3a beq.w 0x10ed6 | goto label_4;
| }
0x00010c3e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010c40 movs r2, 0x48 | r2 = 0x48;
0x00010c42 movs r1, 0 | r1 = 0;
0x00010c44 ldr.w r0, [r3, 0xac] | r0 = *((r3 + 0xac));
0x00010c48 blx 0x30d8 | fcn_000030d8 ();
0x00010c4c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010c4e ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010c50 ldrd r2, r0, [r3, 4] | __asm ("ldrd r2, r0, [r3, 4]");
0x00010c54 ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
0x00010c58 str.w r2, [r8, 4] | __asm ("str.w r2, [r8, 4]");
| if (r0 != 0) {
0x00010c5c cbz r0, 0x10c6e |
0x00010c5e bl 0x5274 | fcn_00005274 (r0);
0x00010c62 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010c64 str.w r0, [r8, 8] | __asm ("str.w r0, [r8, 8]");
0x00010c68 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010c6a ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
| }
0x00010c6e ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
| if (r0 != 0) {
0x00010c70 cbz r0, 0x10c82 |
0x00010c72 bl 0x5274 | fcn_00005274 (r0);
0x00010c76 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010c78 str.w r0, [r8, 0xc] | __asm ("str.w r0, [r8, 0xc]");
0x00010c7c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010c7e ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
| }
0x00010c82 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
| if (r0 != 0) {
0x00010c84 cbz r0, 0x10c96 |
0x00010c86 bl 0x5274 | fcn_00005274 (r0);
0x00010c8a ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010c8c str.w r0, [r8, 0x10] | __asm ("str.w r0, [r8, 0x10]");
0x00010c90 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010c92 ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
| }
0x00010c96 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
| if (r0 != 0) {
0x00010c98 cbz r0, 0x10caa |
0x00010c9a bl 0x5274 | fcn_00005274 (r0);
0x00010c9e ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010ca0 str.w r0, [r8, 0x14] | __asm ("str.w r0, [r8, 0x14]");
0x00010ca4 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010ca6 ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
| }
0x00010caa ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
| if (r0 != 0) {
0x00010cac cbz r0, 0x10cbe |
0x00010cae bl 0x5274 | fcn_00005274 (r0);
0x00010cb2 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010cb4 str.w r0, [r8, 0x18] | __asm ("str.w r0, [r8, 0x18]");
0x00010cb8 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010cba ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
| }
0x00010cbe ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00010cc0 str.w r2, [r8, 0x1c] | __asm ("str.w r2, [r8, 0x1c]");
0x00010cc4 ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x00010cc8 cmp r2, 0 |
| if (r2 <= 0) {
0x00010cca ble 0x10d2e | goto label_30;
| }
0x00010ccc ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x00010cce cmp r2, 1 |
0x00010cd0 str.w r1, [r8, 0x20] | __asm ("str.w r1, [r8, 0x20]");
| if (r2 == 1) {
0x00010cd4 beq 0x10d2e | goto label_30;
| }
0x00010cd6 ldrd r3, r0, [r3, 0x24] | __asm ("ldrd r3, r0, [r3, 0x24]");
0x00010cda str.w r3, [r8, 0x24] | __asm ("str.w r3, [r8, 0x24]");
| if (r0 != 0) {
0x00010cde cbz r0, 0x10cf2 |
0x00010ce0 bl 0x5274 | fcn_00005274 (r0);
0x00010ce4 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010ce6 str.w r0, [r8, 0x28] | __asm ("str.w r0, [r8, 0x28]");
0x00010cea ldr.w r8, [r7, 0xac] | r8 = *((r7 + 0xac));
0x00010cee ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
| }
0x00010cf2 cmp r2, 2 |
| if (r2 <= 2) {
0x00010cf4 ble 0x10d2e | goto label_30;
| }
0x00010cf6 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00010cf8 cmp r2, 3 |
0x00010cfa ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x00010cfc str.w r1, [r8, 0x2c] | __asm ("str.w r1, [r8, 0x2c]");
0x00010d00 ldr r1, [r3, 0x30] | r1 = *((r3 + 0x30));
0x00010d02 str.w r1, [r8, 0x30] | __asm ("str.w r1, [r8, 0x30]");
| if (r2 == 3) {
0x00010d06 beq 0x10d2e | goto label_30;
| }
0x00010d08 ldr r1, [r3, 0x34] | r1 = *((r3 + 0x34));
0x00010d0a cmp r2, 4 |
0x00010d0c it ne |
| if (r2 == 4) {
0x00010d0e ldrne r2, [r3, 0x40] | r2 = *((r3 + 0x40));
| }
0x00010d10 str.w r1, [r8, 0x34] | __asm ("str.w r1, [r8, 0x34]");
0x00010d14 ldr r1, [r3, 0x38] | r1 = *((r3 + 0x38));
0x00010d16 str.w r1, [r8, 0x38] | __asm ("str.w r1, [r8, 0x38]");
0x00010d1a ldr r1, [r3, 0x3c] | r1 = *((r3 + 0x3c));
0x00010d1c itt ne |
| if (r2 == 4) {
0x00010d1e ldrne r3, [r3, 0x44] | r3 = *((r3 + 0x44));
| }
| if (r2 == 4) {
0x00010d20 strne r2, [r8, 0x40] | *((r8 + 0x40)) = r2;
| }
0x00010d24 str.w r1, [r8, 0x3c] | __asm ("str.w r1, [r8, 0x3c]");
0x00010d28 it ne |
| if (r2 != 4) {
0x00010d2a strne r3, [r8, 0x44] | *((r8 + 0x44)) = r3;
| goto label_30;
| }
| }
| label_30:
0x00010d2e ldr r2, [r7, 4] | r2 = *((r7 + 4));
| if (r2 != 0) {
0x00010d30 cbz r2, 0x10d40 |
0x00010d32 ldr r0, [pc, 0x360] |
0x00010d34 mov.w r1, 0x320 | r1 = 0x320;
0x00010d38 add r0, pc | r0 = 0x21dd2;
0x00010d3a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010d3e ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
| }
0x00010d40 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
| if (r0 != 0) {
0x00010d42 cbz r0, 0x10d4c |
0x00010d44 bl 0x5274 | fcn_00005274 (r0);
0x00010d48 str r0, [r7, 4] | *((r7 + 4)) = r0;
0x00010d4a ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
| }
0x00010d4c ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
| if (r2 != 0) {
0x00010d4e cbz r2, 0x10d5e |
0x00010d50 ldr r0, [pc, 0x344] |
0x00010d52 mov.w r1, 0x324 | r1 = 0x324;
0x00010d56 add r0, pc | r0 = 0x21df2;
0x00010d58 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010d5a invalid |
| }
0x00010d5e ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00010d60 cmp r0, 0 |
| if (r0 == 0) {
0x00010d62 beq.w 0x10ede | goto label_31;
| }
0x00010d66 bl 0x5274 | fcn_00005274 (r0);
0x00010d6a str r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x00010d6c ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00010d6e blx 0x3258 | unlink (r0);
0x00010d72 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010d74 str r0, [r7, 8] | *((r7 + 8)) = r0;
| label_3:
0x00010d76 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00010d78 movs r2, 1 | r2 = 1;
0x00010d7a mov r0, r6 | r0 = r6;
0x00010d7c str r3, [r7, 0x64] | *((r7 + 0x64)) = r3;
0x00010d7e ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00010d80 str.w r2, [r6, 0xf4] | __asm ("str.w r2, [r6, 0xf4]");
0x00010d84 str.w r3, [r6, 0x110] | __asm ("str.w r3, [r6, 0x110]");
0x00010d88 bl 0x1057c | fcn_0001057c (r0);
0x00010d8c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00010d8e cmp r3, 1 |
| if (r3 > 1) {
0x00010d90 ble 0x10d9a |
0x00010d92 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00010d94 cmp r3, 0 |
| if (r3 > 0) {
0x00010d96 bgt.w 0x10f2a | goto label_32;
| }
| }
| label_7:
0x00010d9a ldr.w r0, [r6, 0x12c] | r0 = *((r6 + 0x12c));
| if (r0 != 0) {
0x00010d9e cbz r0, 0x10dba |
0x00010da0 blx 0x3620 | fcn_00003620 ();
0x00010da4 ldr r0, [pc, 0x2f4] |
0x00010da6 mov.w r1, 0x34c | r1 = 0x34c;
0x00010daa ldr.w r2, [r6, 0x12c] | r2 = *((r6 + 0x12c));
0x00010dae add r0, pc | r0 = 0x21e4e;
0x00010db0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010db4 movs r3, 0 | r3 = 0;
0x00010db6 str.w r3, [r6, 0x12c] | __asm ("str.w r3, [r6, 0x12c]");
| }
0x00010dba ldr.w r0, [r6, 0x130] | r0 = *((r6 + 0x130));
| if (r0 != 0) {
0x00010dbe cbz r0, 0x10dda |
0x00010dc0 blx 0x3620 | fcn_00003620 ();
0x00010dc4 ldr r0, [pc, 0x2d8] |
0x00010dc6 movw r1, 0x352 | r1 = 0x352;
0x00010dca ldr.w r2, [r6, 0x130] | r2 = *((r6 + 0x130));
0x00010dce add r0, pc | r0 = 0x21e72;
0x00010dd0 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00010dd4 movs r3, 0 | r3 = 0;
0x00010dd6 str.w r3, [r6, 0x130] | __asm ("str.w r3, [r6, 0x130]");
| }
0x00010dda ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00010ddc cmp r3, 5 |
| if (r3 > 5) {
0x00010dde ble 0x10e7e |
0x00010de0 ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
| if (r3 != 0) {
0x00010de2 cbz r3, 0x10e30 |
0x00010de4 ldr r0, [pc, 0x2bc] |
0x00010de6 movs r3, 0 | r3 = 0;
0x00010de8 movs r2, 0x10 | r2 = 0x10;
0x00010dea movw r1, 0x35b | r1 = 0x35b;
0x00010dee strd r3, r3, [sp, 0x14] | __asm ("strd r3, r3, [var_14h]");
0x00010df2 add r7, sp, 0x14 | r7 += var_14h;
0x00010df4 add r0, pc | r0 = 0x21e9c;
0x00010df6 strd r3, r3, [sp, 0x1c] | __asm ("strd r3, r3, [var_1ch]");
0x00010dfa bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00010dfe mov r5, r0 | r5 = r0;
0x00010e00 str.w r0, [r6, 0x12c] | __asm ("str.w r0, [r6, 0x12c]");
0x00010e04 cmp r0, 0 |
| if (r0 == 0) {
0x00010e06 beq 0x10ed6 | goto label_4;
| }
0x00010e08 ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x00010e0c mov r7, sp | r7 = sp;
0x00010e0e stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x00010e12 mov r0, r7 | r0 = r7;
0x00010e14 ldr r1, [r4, 0x5c] | r1 = *((r4 + 0x5c));
0x00010e16 blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x00010e1a ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x00010e1e stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x00010e22 movs r1, 0x11 | r1 = 0x11;
0x00010e24 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00010e26 blx 0x3230 | r0 = fcn_00003230 ();
0x00010e2a cmp r0, 0 |
| if (r0 != 0) {
0x00010e2c bne.w 0x10ff4 | goto label_33;
| }
| }
| label_10:
0x00010e30 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
| if (r3 != 0) {
0x00010e32 cbz r3, 0x10e72 |
0x00010e34 ldr r0, [pc, 0x270] |
0x00010e36 movs r3, 0 | r3 = 0;
0x00010e38 movs r2, 0x10 | r2 = 0x10;
0x00010e3a mov.w r1, 0x36c | r1 = 0x36c;
0x00010e3e strd r3, r3, [sp, 0x14] | __asm ("strd r3, r3, [var_14h]");
0x00010e42 add r7, sp, 0x14 | r7 += var_14h;
0x00010e44 add r0, pc | r0 = 0x21ef0;
0x00010e46 strd r3, r3, [sp, 0x1c] | __asm ("strd r3, r3, [var_1ch]");
0x00010e4a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00010e4e mov r5, r0 | r5 = r0;
0x00010e50 str.w r0, [r6, 0x130] | __asm ("str.w r0, [r6, 0x130]");
0x00010e54 cmp r0, 0 |
| if (r0 == 0) {
0x00010e56 beq 0x10ed6 | goto label_4;
| }
0x00010e58 ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x00010e5c mov r7, sp | r7 = sp;
0x00010e5e stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x00010e62 mov r0, r7 | r0 = r7;
0x00010e64 ldr r1, [r4, 0x60] | r1 = *((r4 + 0x60));
0x00010e66 blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x00010e6a ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x00010e6e stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
| }
0x00010e72 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010e74 ldr r1, [r4, 0x58] | r1 = *((r4 + 0x58));
0x00010e76 ldrb r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00010e78 bfi r2, r1, 1, 1 | value_2 = BIT_MASK (1, 1);
| value_3 = r1 & value_2;
| value_2 = ~value_2;
| r2 &= value_2;
| r2 |= value_3;
0x00010e7c strb r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| }
0x00010e7e ldr r0, [pc, 0x22c] |
0x00010e80 movs r2, 0x60 | r2 = 0x60;
0x00010e82 mov.w r1, 0x378 | r1 = 0x378;
0x00010e86 add r0, pc | r0 = 0x21f38;
0x00010e88 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00010e8c mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00010e8e cbz r0, 0x10ed6 | goto label_4;
| }
0x00010e90 movs r2, 0x60 | r2 = 0x60;
0x00010e92 movs r1, 0 | r1 = 0;
0x00010e94 blx 0x30d8 | fcn_000030d8 ();
0x00010e98 ldrd r3, r1, [r4, 0x2c] | __asm ("ldrd r3, r1, [r4, 0x2c]");
0x00010e9c ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00010e9e str r6, [r5, 0x50] | *((r5 + 0x50)) = r6;
0x00010ea0 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00010ea2 ldrd r3, r0, [r4, 0x64] | __asm ("ldrd r3, r0, [r4, 0x64]");
0x00010ea6 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x00010ea8 strd r1, r3, [r5, 8] | __asm ("strd r1, r3, [r5, 8]");
0x00010eac movs r3, 1 | r3 = 1;
0x00010eae str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
0x00010eb0 movs r1, 4 | r1 = 4;
0x00010eb2 mov r0, r5 | r0 = r5;
0x00010eb4 str r3, [r5] | *(r5) = r3;
0x00010eb6 bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x00010eba str r0, [sp, 0x10] | var_10h = r0;
0x00010ebc b 0x10912 | goto label_1;
0x00010ebe ldr r3, [pc, 0x1f0] | r3 = *(0x110b2);
0x00010ec0 movs r1, 1 | r1 = 1;
0x00010ec2 str r1, [r2, 0x14] | *((r2 + 0x14)) = r1;
0x00010ec4 mov r1, r6 | r1 = r6;
0x00010ec6 ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00010ec8 blx 0x3638 | fcn_00003638 ();
0x00010ecc b 0x10aa4 |
| }
| label_22:
0x00010ece mvn r3, 4 | r3 = ~4;
0x00010ed2 str r3, [sp, 0x10] | var_10h = r3;
0x00010ed4 b 0x10912 | goto label_1;
| label_4:
0x00010ed6 mvn r3, 0x62 | r3 = ~0x62;
0x00010eda str r3, [sp, 0x10] | var_10h = r3;
0x00010edc b 0x10912 | goto label_1;
| label_31:
0x00010ede ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00010ee0 cmp r3, 4 |
| if (r3 <= 4) {
0x00010ee2 ble.w 0x10d76 | goto label_3;
| }
0x00010ee6 ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x00010ee8 cmp r3, 0 |
| if (r3 == 0) {
0x00010eea beq.w 0x10d76 | goto label_3;
| }
0x00010eee ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x00010ef0 movw r1, 0x32d | r1 = 0x32d;
0x00010ef4 ldr r0, [pc, 0x1bc] |
0x00010ef6 str r2, [r7, 8] | *((r7 + 8)) = r2;
0x00010ef8 add r0, pc | r0 = 0x21fb0;
0x00010efa bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00010efe str r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x00010f00 cmp r0, 0 |
| if (r0 == 0) {
0x00010f02 beq 0x10ed6 | goto label_4;
| }
0x00010f04 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010f06 ldr r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x00010f08 ldrd r2, r0, [r3, 8] | __asm ("ldrd r2, r0, [r3, 8]");
0x00010f0c blx 0x32a0 | pthread_cond_signal ();
0x00010f10 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010f12 b 0x10d76 | goto label_3;
| label_26:
0x00010f14 ldr r3, [pc, 0x1a0] |
0x00010f16 add r3, pc | r3 = 0x21fd2;
0x00010f18 ldr r0, [r3] | r0 = *(0x21fd2);
0x00010f1a bl 0x136a8 | fcn_000136a8 ();
0x00010f1e b 0x10aac | goto label_5;
| label_23:
0x00010f20 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00010f22 str r3, [r6, 0x44] | *((r6 + 0x44)) = r3;
0x00010f24 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00010f26 str r3, [r6, 0x48] | *((r6 + 0x48)) = r3;
0x00010f28 b 0x10a3a | goto label_6;
| label_32:
0x00010f2a ldr r0, [pc, 0x190] |
0x00010f2c lsls r2, r3, 2 | r2 = r3 << 2;
0x00010f2e mov.w r1, 0x340 | r1 = 0x340;
0x00010f32 str.w r3, [r6, 0x108] | __asm ("str.w r3, [r6, 0x108]");
0x00010f36 add r0, pc | r0 = 0x21ff8;
0x00010f38 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00010f3c mov r7, r0 | r7 = r0;
0x00010f3e str.w r0, [r6, 0x10c] | __asm ("str.w r0, [r6, 0x10c]");
0x00010f42 cmp r0, 0 |
| if (r0 == 0) {
0x00010f44 beq 0x10ed6 | goto label_4;
| }
0x00010f46 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00010f48 cmp r3, 0 |
| if (r3 > 0) {
0x00010f4a bgt 0x10f52 | goto label_34;
| }
0x00010f4c b 0x10d9a | goto label_7;
| do {
0x00010f4e ldr.w r7, [r6, 0x10c] | r7 = *((r6 + 0x10c));
| label_34:
0x00010f52 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00010f54 ldr.w r0, [r3, r5, lsl 2] | offset_4 = r5 << 2;
| r0 = *((r3 + offset_4));
0x00010f58 bl 0x5274 | fcn_00005274 (r0);
0x00010f5c ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00010f5e str.w r0, [r7, r5, lsl 2] | __asm ("str.w r0, [r7, r5, lsl 2]");
0x00010f62 adds r5, 1 | r5++;
0x00010f64 cmp r3, r5 |
0x00010f66 bgt 0x10f4e |
| } while (r3 > r5);
0x00010f68 b 0x10d9a | goto label_7;
| label_28:
0x00010f6a ldr r0, [pc, 0x154] |
0x00010f6c movs r2, 0x14 | r2 = 0x14;
0x00010f6e movw r1, 0x2b2 | r1 = 0x2b2;
0x00010f72 add r0, pc | r0 = 0x22038;
0x00010f74 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00010f78 str r0, [r7, 0x6c] | *((r7 + 0x6c)) = r0;
0x00010f7a cmp r0, 0 |
| if (r0 == 0) {
0x00010f7c beq 0x10ed6 | goto label_4;
| }
0x00010f7e ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00010f80 ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
0x00010f82 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00010f84 cmp r7, 0 |
| if (r7 == 0) {
0x00010f86 beq 0x11004 | goto label_35;
| }
0x00010f88 cmp r2, 1 |
| if (r2 == 1) {
0x00010f8a beq 0x11014 | goto label_36;
| }
| label_12:
0x00010f8c mov r0, r7 | r0 = r7;
0x00010f8e blx 0x3258 | unlink (r0);
0x00010f92 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010f94 mov r2, r0 | r2 = r0;
0x00010f96 ldr.w r8, [r3, 0x6c] | r8 = *((r3 + 0x6c));
0x00010f9a str.w r0, [r8, 4] | __asm ("str.w r0, [r8, 4]");
| label_13:
0x00010f9e ldr r0, [pc, 0x124] |
0x00010fa0 movw r1, 0x2c3 | r1 = 0x2c3;
0x00010fa2 movs r1, 0xc3 | r1 = 0xc3;
0x00010fa4 add r0, pc | r0 = 0x2206e;
0x00010fa6 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00010faa str.w r0, [r8, 8] | __asm ("str.w r0, [r8, 8]");
0x00010fae cmp r0, 0 |
| if (r0 == 0) {
0x00010fb0 beq 0x10ed6 | goto label_4;
| }
0x00010fb2 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00010fb4 mov r1, r7 | r1 = r7;
0x00010fb6 ldr r3, [r3, 0x6c] | r3 = *((r3 + 0x6c));
0x00010fb8 ldrd r2, r0, [r3, 4] | __asm ("ldrd r2, r0, [r3, 4]");
0x00010fbc blx 0x32a0 | pthread_cond_signal ();
0x00010fbe ldrd r6, sb, [r0, -0x18c]! | __asm ("ldrd r6, sb, [r0, -0x18c]!");
0x00010fc2 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
| label_11:
0x00010fc4 ldr r7, [r2, 0x6c] | r7 = *((r2 + 0x6c));
0x00010fc6 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x00010fc8 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00010fca str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x00010fcc ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00010fce str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x00010fd0 bl 0x5274 | fcn_00005274 (r0);
0x00010fd4 str r0, [r7] | *(r7) = r0;
0x00010fd6 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x00010fd8 b 0x10b5e | goto label_8;
| label_24:
0x00010fda ldr r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x00010fdc cmp r2, 0 |
| if (r2 != 0) {
0x00010fde bne.w 0x10a16 | goto label_2;
| }
0x00010fe2 ldr r1, [r4, 0x5c] | r1 = *((r4 + 0x5c));
0x00010fe4 cmp r1, 0 |
| if (r1 != 0) {
0x00010fe6 bne.w 0x10a16 | goto label_2;
| }
0x00010fea ldr r1, [r4, 0x60] | r1 = *((r4 + 0x60));
0x00010fec cmp r1, 0 |
| if (r1 != 0) {
0x00010fee bne.w 0x10a16 | goto label_2;
| }
0x00010ff2 b 0x10a2e | goto label_9;
| label_33:
0x00010ff4 ldr r5, [r6, 0xc] | r5 = *((r6 + 0xc));
0x00010ff6 movs r1, 0x11 | r1 = 0x11;
0x00010ff8 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00010ffa blx 0x3004 | fcn_00003004 ();
0x00010ffe str.w r0, [r5, 0xa0] | __asm ("str.w r0, [r5, 0xa0]");
0x00011002 b 0x10e30 | goto label_10;
| label_35:
0x00011004 cmp r2, 1 |
| if (r2 == 1) {
0x00011006 beq 0x1102e | goto label_37;
| }
| label_14:
0x00011008 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0001100a movs r0, 0 | r0 = 0;
0x0001100c ldr r1, [r2, 0x6c] | r1 = *((r2 + 0x6c));
0x0001100e strd r0, r0, [r1, 4] | __asm ("strd r0, r0, [r1, 4]");
0x00011012 b 0x10fc4 | goto label_11;
| label_36:
0x00011014 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00011016 cmp r1, 0 |
| if (r1 == 0) {
0x00011018 beq 0x10f8c | goto label_12;
| }
| do {
0x0001101a ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x0001101c mov r7, r1 | r7 = r1;
0x0001101e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00011020 ldr.w r8, [r3, 0x6c] | r8 = *((r3 + 0x6c));
0x00011024 str.w r2, [r8, 4] | __asm ("str.w r2, [r8, 4]");
0x00011028 b 0x10f9e | goto label_13;
| label_16:
0x0001102a blx 0x348c | fprintf_chk ()
| label_37:
0x0001102e ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00011030 cmp r1, 0 |
0x00011032 bne 0x1101a |
| } while (r1 != 0);
0x00011034 b 0x11008 | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12694 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_createWithOptions () | void MQTTAsync_createWithOptions (int16_t arg_18h, int16_t arg_64h, int16_t arg_38h, int16_t arg_3ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00012694 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00012698 mov r5, r2 | r5 = r2;
0x0001269a ldr r2, [pc, 0x370] |
0x0001269c mov r6, r3 | r6 = r3;
0x0001269e mov r7, r0 | r7 = r0;
0x000126a0 sub sp, 0x14 |
0x000126a2 ldr r3, [pc, 0x36c] | r3 = *(0x12a12);
0x000126a4 mov r4, r1 | r4 = r1;
0x000126a6 add r2, pc | r2 = 0x250b8;
0x000126a8 ldr r0, [pc, 0x368] |
0x000126aa movw r1, 0x133 | r1 = 0x133;
0x000126ae ldr.w sb, [sp, 0x38] | sb = *(arg_38h);
0x000126b2 ldr r3, [r2, r3] |
0x000126b4 movs r2, 3 | r2 = 3;
0x000126b6 add r0, pc |
0x000126b8 ldr.w sl, [sp, 0x3c] | sl = *(arg_3ch);
0x000126bc add.w r0, r0, 0x260 | r0 = 0x2532e;
0x000126c0 ldr.w r8, [pc, 0x354] |
0x000126c4 ldr r3, [r3] | r3 = *(0x250b8);
0x000126c6 str r3, [sp, 0xc] | var_ch = r3;
0x000126c8 mov.w r3, 0 | r3 = 0;
0x000126cc movs r3, 0 | r3 = 0;
0x000126ce str r3, [sp, 8] | var_8h = r3;
0x000126d0 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000126d4 ldr r3, [pc, 0x344] |
0x000126d6 add r8, pc | r8 = 0x250f2;
0x000126d8 add r3, pc | r3 = 0x250f8;
0x000126da ldr r0, [r3] | r0 = *(0x250f8);
0x000126dc bl 0x13684 | fcn_00013684 ();
0x000126e0 cmp r5, 0 |
0x000126e2 it ne |
| if (r5 != 0) {
0x000126e4 cmpne r4, 0 | __asm ("cmpne r4, 0");
| }
0x000126e6 itt eq |
| if (r5 != 0) {
0x000126e8 mvneq r3, 5 | r3 = ~5;
| }
| if (r5 == 0) {
0x000126ec str r3, [sp, 8] | var_8h = r3;
| }
0x000126ee bne 0x1272c |
| while (r3 == 0) {
| label_0:
0x000126f0 ldr r3, [pc, 0x32c] |
0x000126f2 add r3, pc | r3 = 0x25116;
0x000126f4 ldr r0, [r3] | r0 = *(0x25116);
0x000126f6 bl 0x136a8 | fcn_000136a8 ();
0x000126fa ldr r0, [pc, 0x328] |
0x000126fc movs r3, 3 | r3 = 3;
0x000126fe add r2, sp, 8 | r2 += var_8h;
0x00012700 mov.w r1, 0x1c6 | r1 = 0x1c6;
0x00012704 add r0, pc |
0x00012706 add.w r0, r0, 0x260 | r0 = 0x2538e;
0x0001270a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001270e ldr r2, [pc, 0x318] |
0x00012710 ldr r3, [pc, 0x2fc] | r3 = *(0x12a10);
0x00012712 ldr r0, [sp, 8] | r0 = var_8h;
0x00012714 add r2, pc | r2 = 0x25142;
0x00012716 ldr r3, [r2, r3] | r3 = *(0x25142);
0x00012718 ldr r2, [r3] | r2 = *(0x25142);
0x0001271a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001271c eors r2, r3 | r2 ^= r3;
0x0001271e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012722 bne.w 0x129fe | goto label_4;
| }
0x00012724 strh r4, [r5, 0xa] | *((r5 + 0xa)) = r4;
0x00012726 add sp, 0x14 |
0x00012728 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001272c mov r0, r5 | r0 = r5;
0x0001272e bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x00012732 cmp r0, 0 |
| if (r0 == 0) {
0x00012734 beq.w 0x1293e | goto label_5;
| }
0x00012738 ldrb r3, [r5] | r3 = *(r5);
0x0001273a cmp r3, 0 |
0x0001273c it eq |
| if (r3 == 0) {
0x0001273e cmpeq r6, 0 | __asm ("cmpeq r6, 0");
| }
0x00012740 itt eq |
| if (r3 != 0) {
0x00012742 mvneq r3, 1 | r3 = ~1;
| }
| if (r3 == 0) {
0x00012746 str r3, [sp, 8] | var_8h = r3;
| }
0x00012748 beq 0x126f0 |
| }
0x0001274a ldr r1, [pc, 0x2e0] |
0x0001274c mov r0, r4 | r0 = r4;
0x0001274e add r1, pc | r1 = 0x25180;
0x00012750 blx 0x339c | r0 = select ();
| if (r0 != 0) {
0x00012754 cbz r0, 0x12796 |
0x00012756 ldr r0, [pc, 0x2d8] |
0x00012758 movs r2, 6 | r2 = 6;
0x0001275a mov r1, r4 | r1 = r4;
0x0001275c add r0, pc | r0 = 0x25192;
0x0001275e blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x00012762 cbz r0, 0x12796 | goto label_6;
| }
0x00012764 ldr r0, [pc, 0x2cc] |
0x00012766 movs r2, 5 | r2 = 5;
0x00012768 mov r1, r4 | r1 = r4;
0x0001276a add r0, pc | r0 = 0x251a2;
0x0001276c blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x00012770 cbz r0, 0x12796 | goto label_6;
| }
0x00012772 ldr r0, [pc, 0x2c4] |
0x00012774 movs r2, 6 | r2 = 6;
0x00012776 mov r1, r4 | r1 = r4;
0x00012778 add r0, pc | r0 = 0x251b6;
0x0001277a blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x0001277e cbz r0, 0x12796 | goto label_6;
| }
0x00012780 ldr r0, [pc, 0x2b8] |
0x00012782 movs r2, 6 | r2 = 6;
0x00012784 mov r1, r4 | r1 = r4;
0x00012786 add r0, pc | r0 = 0x251c6;
0x00012788 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x0001278c cbz r0, 0x12796 | goto label_6;
| }
0x0001278e mvn r3, 0xd | r3 = ~0xd;
0x00012792 str r3, [sp, 8] | var_8h = r3;
0x00012794 b 0x126f0 | goto label_0;
| }
| label_6:
0x00012796 cmp.w sl, 0 |
| if (sl != 0) {
0x0001279a beq 0x127ba |
0x0001279c ldr r1, [pc, 0x2a0] |
0x0001279e movs r2, 4 | r2 = 4;
0x000127a0 mov r0, sl | r0 = sl;
0x000127a2 add r1, pc | r1 = 0x251e6;
0x000127a4 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x000127a8 cbnz r0, 0x127b2 |
0x000127aa ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000127ae cmp r3, 2 |
| if (r3 < 2) {
0x000127b0 bls 0x127ba | goto label_7;
| }
| }
0x000127b2 mvn r3, 7 | r3 = ~7;
0x000127b6 str r3, [sp, 8] | var_8h = r3;
0x000127b8 b 0x126f0 | goto label_0;
| }
| label_7:
0x000127ba ldr.w fp, [pc, 0x288] | fp = *(0x00012a44);
0x000127be add fp, pc |
0x000127c0 ldr.w r3, [fp, 0x64] | r3 = *(arg_64h);
0x000127c4 cmp r3, 0 |
| if (r3 == 0) {
0x000127c6 beq.w 0x12952 | goto label_8;
| }
| label_2:
0x000127ca ldr r0, [pc, 0x27c] |
0x000127cc mov.w r2, 0x134 | r2 = 0x134;
0x000127d0 mov.w r1, 0x16e | r1 = 0x16e;
0x000127d4 add r0, pc | r0 = 0x25222;
0x000127d6 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000127da mov r8, r0 | r8 = r0;
0x000127dc cmp r0, 0 |
| if (r0 == 0) {
0x000127de beq.w 0x12946 | goto label_9;
| }
0x000127e2 mov.w r2, 0x134 | r2 = 0x134;
0x000127e6 movs r1, 0 | r1 = 0;
0x000127e8 str r0, [r7] | *(r7) = r0;
0x000127ea blx 0x30d8 | fcn_000030d8 ();
0x000127ee ldr r0, [pc, 0x25c] |
0x000127f0 movs r2, 6 | r2 = 6;
0x000127f2 mov r1, r4 | r1 = r4;
0x000127f4 add r0, pc | r0 = 0x25246;
0x000127f6 blx 0x3698 | fcn_00003698 ();
0x000127f8 vadd.i16 d18, d0, d0 | __asm ("vadd.i16 d18, d0, d0");
| if (r2 == 6) {
0x000127fc beq.w 0x1294e | goto label_10;
| }
0x00012800 ldr r0, [pc, 0x24c] |
0x00012802 movs r2, 5 | r2 = 5;
0x00012804 mov r1, r4 | r1 = r4;
0x00012806 add r0, pc | r0 = 0x2525a;
0x00012808 blx 0x3698 | r0 = fcn_00003698 ();
0x0001280c cmp r0, 0 |
| if (r0 != 0) {
0x0001280e bne.w 0x12998 | goto label_11;
| }
0x00012812 adds r4, 5 | r4 += 5;
0x00012814 movs r3, 1 | r3 = 1;
0x00012816 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| label_1:
0x0001281a mov r0, r4 | r0 = r4;
0x0001281c bl 0x5274 | fcn_00005274 (r0);
0x00012820 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00012824 cmp r0, 0 |
| if (r0 == 0) {
0x00012826 beq.w 0x12946 | goto label_9;
| }
0x0001282a bl 0xd5ac | fcn_0000d5ac ();
0x0001282e ldr r3, [pc, 0x224] |
0x00012830 mov.w r2, 0x134 | r2 = 0x134;
0x00012834 ldr r4, [pc, 0x220] |
0x00012836 mov r1, r8 | r1 = r8;
0x00012838 str.w r0, [r8, 0xe4] | __asm ("str.w r0, [r8, 0xe4]");
0x0001283c add r3, pc | r3 = 0x25296;
0x0001283e ldr r0, [r3] | r0 = *(0x25296);
0x00012840 add r4, pc | r4 = 0x2529c;
0x00012842 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00012846 movs r2, 0xb4 | r2 = 0xb4;
0x00012848 movw r1, 0x191 | r1 = 0x191;
0x0001284c mov r0, r4 | r0 = r4;
0x0001284e bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00012852 str.w r0, [r8, 0xc] | __asm ("str.w r0, [r8, 0xc]");
0x00012856 cmp r0, 0 |
| if (r0 == 0) {
0x00012858 beq 0x12946 | goto label_9;
| }
0x0001285a movs r2, 0xb4 | r2 = 0xb4;
0x0001285c movs r1, 0 | r1 = 0;
0x0001285e blx 0x30d8 | fcn_000030d8 ();
0x00012862 ldr.w r7, [r8, 0xc] | r7 = *((r8 + 0xc));
0x00012866 str.w r8, [r7, 0x98] | __asm ("str.w r8, [r7, 0x98]");
0x0001286a bl 0xd5ac | fcn_0000d5ac ();
0x0001286c mrc2 p7, 4, r6, c15, c8, 3 | __asm ("mrc2 p7, 4, r6, c15, c8, 3");
0x00012870 ldr.w r7, [r8, 0xc] | r7 = *((r8 + 0xc));
0x00012874 bl 0xd5ac | fcn_0000d5ac ();
0x00012878 str r0, [r7, 0x70] | *((r7 + 0x70)) = r0;
0x0001287a ldr.w r7, [r8, 0xc] | r7 = *((r8 + 0xc));
0x0001287c strb r4, [r1] | *(r1) = r4;
0x0001287e bl 0xd5ac | fcn_0000d5ac ();
0x00012882 str r0, [r7, 0x78] | *((r7 + 0x78)) = r0;
0x00012884 mov r0, r5 | r0 = r5;
0x00012886 ldr.w r5, [r8, 0xc] | r5 = *((r8 + 0xc));
0x0001288a bl 0x5274 | fcn_00005274 (r0);
0x0001288e str r0, [r5] | *(r5) = r0;
0x00012890 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00012894 ldr.w r3, [r0, 0x98] | r3 = *((r0 + 0x98));
0x00012898 cmp r3, 0 |
| if (r3 == 0) {
0x0001289a beq 0x12946 | goto label_9;
| }
0x0001289c ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0001289e cmp r3, 0 |
| if (r3 == 0) {
0x000128a0 beq 0x12946 | goto label_9;
| }
0x000128a2 ldr r3, [r0, 0x70] | r3 = *((r0 + 0x70));
0x000128a4 cmp r3, 0 |
| if (r3 == 0) {
0x000128a6 beq 0x12946 | goto label_9;
| }
0x000128a8 ldr r3, [r0, 0x78] | r3 = *((r0 + 0x78));
0x000128aa cmp r3, 0 |
| if (r3 == 0) {
0x000128ac beq 0x12946 | goto label_9;
| }
0x000128ae ldr r3, [r0] | r3 = *(r0);
0x000128b0 cmp r3, 0 |
| if (r3 == 0) {
0x000128b2 beq 0x12946 | goto label_9;
| }
0x000128b4 movs r3, 0 | r3 = 0;
0x000128b6 str.w r3, [r0, 0x9c] | __asm ("str.w r3, [r0, 0x9c]");
0x000128ba str.w r3, [r8, 0xf4] | __asm ("str.w r3, [r8, 0xf4]");
0x000128be cmp.w sl, 0 |
| if (sl == 0) {
0x000128c2 beq 0x1291a | goto label_12;
| }
0x000128c4 mov r0, r4 | r0 = r4;
0x000128c6 movs r2, 0x24 | r2 = 0x24;
0x000128c8 movw r1, 0x1a7 | r1 = 0x1a7;
0x000128ca asrs r7, r4, 6 | r7 = r4 >> 6;
0x000128cc bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000128d0 str.w r0, [r8, 0xf0] | __asm ("str.w r0, [r8, 0xf0]");
| if (r0 == 0) {
0x000128d4 cbz r0, 0x12946 | goto label_9;
| }
0x000128d6 mov r3, sl | r3 = sl;
0x000128d8 add.w r7, sl, 0x20 | r7 = sl + 0x20;
| do {
0x000128dc ldr r5, [r3] | r5 = *(r3);
0x000128de adds r3, 0x10 | r3 += 0x10;
0x000128e0 ldr r4, [r3, -0xc] | r4 = *((r3 - 0xc));
0x000128e4 adds r0, 0x10 | r0 += 0x10;
0x000128e6 ldr r1, [r3, -0x8] | r1 = *((r3 - 0x8));
0x000128ea ldr r2, [r3, -0x4] | r2 = *((r3 - 0x4));
0x000128ee cmp r3, r7 |
0x000128f0 str r5, [r0, -0x10] | *((r0 - 0x10)) = r5;
0x000128f4 str r4, [r0, -0xc] | *((r0 - 0xc)) = r4;
0x000128f8 str r1, [r0, -0x8] | *((r0 - 0x8)) = r1;
0x000128fc str r2, [r0, -0x4] | *((r0 - 0x4)) = r2;
0x00012900 bne 0x128dc |
| } while (r3 != r7);
0x00012902 ldr r3, [r3] | r3 = *(r3);
0x00012904 str r3, [r0] | *(r0) = r3;
0x00012906 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0001290a ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x0001290e cmp r3, 0 |
0x00012910 itt gt |
| if (r3 <= 0) {
0x00012912 ldrgt r3, [sl, 0x10] | r3 = *((sl + 0x10));
| }
| if (r3 > 0) {
0x00012916 str.w r3, [r0, 0x9c] | __asm ("str.w r3, [r0, 0x9c]");
| }
| label_12:
0x0001291a mov r2, sb | r2 = sb;
0x0001291c mov r1, r6 | r1 = r6;
0x0001291e adds r0, 0x84 | r0 += 0x84;
0x00012920 bl 0x9bb8 | fcn_00009bb8 (r0, r1, r2);
0x00012924 str r0, [sp, 8] | var_8h = r0;
0x00012926 cmp r0, 0 |
| if (r0 == 0) {
0x00012928 beq 0x129cc | goto label_13;
| }
| label_3:
0x0001292a ldr r3, [pc, 0x130] |
0x0001292c movs r2, 0xf0 | r2 = 0xf0;
0x0001292e ldr.w r1, [r8, 0xc] | r1 = *((r8 + 0xc));
0x00012932 add r3, pc |
0x00012934 ldr r3, [r3, 0x10] | r3 = *(0x253a4);
0x00012936 ldr r0, [r3, 4] | r0 = *(0x253a8);
0x00012938 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x0001293c b 0x126f0 | goto label_0;
| label_5:
0x0001293e mvn r3, 4 | r3 = ~4;
0x00012942 str r3, [sp, 8] | var_8h = r3;
0x00012944 b 0x126f0 | goto label_0;
| label_9:
0x00012946 mvn r3, 0x62 | r3 = ~0x62;
0x0001294a str r3, [sp, 8] | var_8h = r3;
0x0001294c b 0x126f0 | goto label_0;
| label_10:
0x0001294e adds r4, 6 | r4 += 6;
0x00012950 b 0x1281a | goto label_1;
| label_8:
0x00012952 bl 0x10388 | fcn_00010388 ();
0x00012956 blx 0x33c0 | SSL_free ();
0x0001295a bl 0x960c | fcn_0000960c (r0);
0x0001295e ldr r3, [pc, 0x100] |
0x00012960 add r3, pc |
0x00012962 ldr r3, [r3, 0x10] | r3 = *(0x253d6);
0x00012964 str r3, [sp, 4] | var_4h = r3;
0x00012966 bl 0xd5ac | fcn_0000d5ac ();
0x0001296a ldr r3, [sp, 4] | r3 = var_4h;
0x0001296c str r0, [r3, 4] | *((r3 + 4)) = r0;
0x0001296e bl 0x7dec | fcn_00007dec ();
0x00012972 ldr r3, [pc, 0xf0] | r3 = *(0x12a66);
0x00012974 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00012978 bl 0x86dc | r0 = fcn_000086dc (r0);
0x0001297c bl 0xd5ac | fcn_0000d5ac ();
0x00012980 str.w r0, [fp] | __asm ("str.w r0, [fp]");
0x00012984 bl 0xd5ac | fcn_0000d5ac ();
0x00012988 str.w r0, [fp, 0x18] | __asm ("str.w r0, [arg_18h]");
0x0001298c bl 0x18030 | fcn_00018030 ();
0x00012990 movs r3, 1 | r3 = 1;
0x00012992 str.w r3, [fp, 0x64] | __asm ("str.w r3, [arg_64h]");
0x00012996 b 0x127ca | goto label_2;
| label_11:
0x00012998 ldr r0, [pc, 0xcc] |
0x0001299a movs r2, 6 | r2 = 6;
0x0001299c mov r1, r4 | r1 = r4;
0x0001299e add r0, pc | r0 = 0x2540a;
0x000129a0 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x000129a4 cbnz r0, 0x129b0 |
0x000129a6 movs r3, 1 | r3 = 1;
0x000129a8 adds r4, 6 | r4 += 6;
0x000129aa str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
0x000129ae b 0x1281a | goto label_1;
| }
0x000129b0 ldr r0, [pc, 0xb8] |
0x000129b2 movs r2, 6 | r2 = 6;
0x000129b4 mov r1, r4 | r1 = r4;
0x000129b6 add r0, pc | r0 = 0x25426;
0x000129b8 blx 0x3698 | r0 = fcn_00003698 ();
0x000129bc cmp r0, 0 |
| if (r0 != 0) {
0x000129be bne.w 0x1281a | goto label_1;
| }
0x000129c2 movs r3, 1 | r3 = 1;
0x000129c4 adds r4, 6 | r4 += 6;
0x000129c6 strd r3, r3, [r8, 4] | __asm ("strd r3, r3, [r8, 4]");
0x000129ca b 0x1281a | goto label_1;
| label_13:
0x000129cc ldr.w r1, [r8] | r1 = *(r8);
0x000129d0 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x000129d4 bl 0xaa18 | fcn_0000aa18 (r0, r1);
0x000129d8 str r0, [sp, 8] | var_8h = r0;
0x000129da cmp r0, 0 |
| if (r0 != 0) {
0x000129dc bne 0x1292a | goto label_3;
| }
0x000129de ldr.w r3, [r8, 0xf0] | r3 = *((r8 + 0xf0));
| if (r3 != 0) {
0x000129e2 cbz r3, 0x129ee |
0x000129e4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000129e6 cmp r2, 1 |
| if (r2 <= 1) {
0x000129e8 ble 0x129ee | goto label_14;
| }
0x000129ea ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| if (r3 == 0) {
0x000129ec cbz r3, 0x12a02 | goto label_15;
| }
| }
| label_14:
0x000129ee mov r0, r8 | r0 = r8;
0x000129f0 bl 0x1391c | fcn_0001391c (r0, r1, r2, r3, r4, r5, r6);
0x000129f4 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x000129f8 bl 0xad90 | fcn_0000ad90 (r0);
0x000129fa invalid |
0x000129fc b 0x1292a | goto label_3;
| label_4:
0x000129fe blx 0x348c | fprintf_chk ()
| label_15:
0x00012a02 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00012a06 bl 0x13b68 | fcn_00013b68 (r0, r1, r2);
0x00012a0a b 0x1292a | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12a70 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_create () | void MQTTAsync_create (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00012a70 push.w {r4, r5, r6, r7, r8, lr} |
0x00012a74 mov r5, r2 | r5 = r2;
0x00012a76 ldr r2, [pc, 0x54] |
0x00012a78 mov r6, r3 | r6 = r3;
0x00012a7a sub sp, 0x18 |
0x00012a7c mov r4, r0 | r4 = r0;
0x00012a7e ldr r3, [pc, 0x50] | r3 = *(0x12ad2);
0x00012a80 add r0, sp, 0xc | r0 += var_ch;
0x00012a82 add r2, pc | r2 = 0x25554;
0x00012a84 ldr r7, [sp, 0x30] | r7 = *(arg_30h);
0x00012a86 mov r8, r1 | r8 = r1;
0x00012a88 ldr r3, [r2, r3] |
0x00012a8a ldr r3, [r3] | r3 = *(0x25554);
0x00012a8c str r3, [sp, 0x14] | var_14h = r3;
0x00012a8e mov.w r3, 0 | r3 = 0;
0x00012a92 bl 0x3874 | fcn_00003874 (r0);
0x00012a96 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00012a98 blx 0x2f50 | fcn_00002f50 ();
0x00012a9c mov r0, r4 | r0 = r4;
0x00012a9e movs r4, 0 | r4 = 0;
0x00012aa0 mov r3, r6 | r3 = r6;
0x00012aa2 mov r2, r5 | r2 = r5;
0x00012aa4 mov r1, r8 | r1 = r8;
0x00012aa6 str r7, [sp] | *(sp) = r7;
0x00012aa8 str r4, [sp, 4] | var_4h = r4;
0x00012aaa blx 0x315c | SSL_CIPHER_get_name ();
0x00012aae ldr r2, [pc, 0x24] |
0x00012ab0 ldr r3, [pc, 0x1c] | r3 = *(0x12ad0);
0x00012ab2 add r2, pc | r2 = 0x2558c;
0x00012ab4 ldr r3, [r2, r3] | r3 = *(0x2558c);
0x00012ab6 ldr r2, [r3] | r2 = *(0x2558c);
0x00012ab8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00012aba eors r2, r3 | r2 ^= r3;
0x00012abc mov.w r3, 0 | r3 = 0;
0x00012abe lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == r0) {
0x00012ac0 bne 0x12ac8 |
0x00012ac2 add sp, 0x18 |
0x00012ac4 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x00012ac8 blx 0x348c | fprintf_chk ()
0x00012acc stm r2!, {r1, r2, r3} | *(r2!) = r1;
| *((r2! + 4)) = r2;
| *((r2! + 8)) = r3;
0x00012ace movs r1, r0 | r1 = r0;
0x00012ad0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00012ad2 movs r0, r0 |
0x00012ad4 stm r1!, {r1, r2, r3, r4, r6, r7} | *(r1!) = r1;
| *((r1! + 4)) = r2;
| *((r1! + 8)) = r3;
| *((r1! + 12)) = r4;
| *((r1! + 16)) = r6;
| *((r1! + 20)) = r7;
0x00012ad6 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12694 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_createWithOptions () | void MQTTAsync_createWithOptions (int16_t arg_18h, int16_t arg_64h, int16_t arg_38h, int16_t arg_3ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00012694 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00012698 mov r5, r2 | r5 = r2;
0x0001269a ldr r2, [pc, 0x370] |
0x0001269c mov r6, r3 | r6 = r3;
0x0001269e mov r7, r0 | r7 = r0;
0x000126a0 sub sp, 0x14 |
0x000126a2 ldr r3, [pc, 0x36c] | r3 = *(0x12a12);
0x000126a4 mov r4, r1 | r4 = r1;
0x000126a6 add r2, pc | r2 = 0x250b8;
0x000126a8 ldr r0, [pc, 0x368] |
0x000126aa movw r1, 0x133 | r1 = 0x133;
0x000126ae ldr.w sb, [sp, 0x38] | sb = *(arg_38h);
0x000126b2 ldr r3, [r2, r3] |
0x000126b4 movs r2, 3 | r2 = 3;
0x000126b6 add r0, pc |
0x000126b8 ldr.w sl, [sp, 0x3c] | sl = *(arg_3ch);
0x000126bc add.w r0, r0, 0x260 | r0 = 0x2532e;
0x000126c0 ldr.w r8, [pc, 0x354] |
0x000126c4 ldr r3, [r3] | r3 = *(0x250b8);
0x000126c6 str r3, [sp, 0xc] | var_ch = r3;
0x000126c8 mov.w r3, 0 | r3 = 0;
0x000126cc movs r3, 0 | r3 = 0;
0x000126ce str r3, [sp, 8] | var_8h = r3;
0x000126d0 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000126d4 ldr r3, [pc, 0x344] |
0x000126d6 add r8, pc | r8 = 0x250f2;
0x000126d8 add r3, pc | r3 = 0x250f8;
0x000126da ldr r0, [r3] | r0 = *(0x250f8);
0x000126dc bl 0x13684 | fcn_00013684 ();
0x000126e0 cmp r5, 0 |
0x000126e2 it ne |
| if (r5 != 0) {
0x000126e4 cmpne r4, 0 | __asm ("cmpne r4, 0");
| }
0x000126e6 itt eq |
| if (r5 != 0) {
0x000126e8 mvneq r3, 5 | r3 = ~5;
| }
| if (r5 == 0) {
0x000126ec str r3, [sp, 8] | var_8h = r3;
| }
0x000126ee bne 0x1272c |
| while (r3 == 0) {
| label_0:
0x000126f0 ldr r3, [pc, 0x32c] |
0x000126f2 add r3, pc | r3 = 0x25116;
0x000126f4 ldr r0, [r3] | r0 = *(0x25116);
0x000126f6 bl 0x136a8 | fcn_000136a8 ();
0x000126fa ldr r0, [pc, 0x328] |
0x000126fc movs r3, 3 | r3 = 3;
0x000126fe add r2, sp, 8 | r2 += var_8h;
0x00012700 mov.w r1, 0x1c6 | r1 = 0x1c6;
0x00012704 add r0, pc |
0x00012706 add.w r0, r0, 0x260 | r0 = 0x2538e;
0x0001270a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001270e ldr r2, [pc, 0x318] |
0x00012710 ldr r3, [pc, 0x2fc] | r3 = *(0x12a10);
0x00012712 ldr r0, [sp, 8] | r0 = var_8h;
0x00012714 add r2, pc | r2 = 0x25142;
0x00012716 ldr r3, [r2, r3] | r3 = *(0x25142);
0x00012718 ldr r2, [r3] | r2 = *(0x25142);
0x0001271a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001271c eors r2, r3 | r2 ^= r3;
0x0001271e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012722 bne.w 0x129fe | goto label_4;
| }
0x00012724 strh r4, [r5, 0xa] | *((r5 + 0xa)) = r4;
0x00012726 add sp, 0x14 |
0x00012728 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001272c mov r0, r5 | r0 = r5;
0x0001272e bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x00012732 cmp r0, 0 |
| if (r0 == 0) {
0x00012734 beq.w 0x1293e | goto label_5;
| }
0x00012738 ldrb r3, [r5] | r3 = *(r5);
0x0001273a cmp r3, 0 |
0x0001273c it eq |
| if (r3 == 0) {
0x0001273e cmpeq r6, 0 | __asm ("cmpeq r6, 0");
| }
0x00012740 itt eq |
| if (r3 != 0) {
0x00012742 mvneq r3, 1 | r3 = ~1;
| }
| if (r3 == 0) {
0x00012746 str r3, [sp, 8] | var_8h = r3;
| }
0x00012748 beq 0x126f0 |
| }
0x0001274a ldr r1, [pc, 0x2e0] |
0x0001274c mov r0, r4 | r0 = r4;
0x0001274e add r1, pc | r1 = 0x25180;
0x00012750 blx 0x339c | r0 = select ();
| if (r0 != 0) {
0x00012754 cbz r0, 0x12796 |
0x00012756 ldr r0, [pc, 0x2d8] |
0x00012758 movs r2, 6 | r2 = 6;
0x0001275a mov r1, r4 | r1 = r4;
0x0001275c add r0, pc | r0 = 0x25192;
0x0001275e blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x00012762 cbz r0, 0x12796 | goto label_6;
| }
0x00012764 ldr r0, [pc, 0x2cc] |
0x00012766 movs r2, 5 | r2 = 5;
0x00012768 mov r1, r4 | r1 = r4;
0x0001276a add r0, pc | r0 = 0x251a2;
0x0001276c blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x00012770 cbz r0, 0x12796 | goto label_6;
| }
0x00012772 ldr r0, [pc, 0x2c4] |
0x00012774 movs r2, 6 | r2 = 6;
0x00012776 mov r1, r4 | r1 = r4;
0x00012778 add r0, pc | r0 = 0x251b6;
0x0001277a blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x0001277e cbz r0, 0x12796 | goto label_6;
| }
0x00012780 ldr r0, [pc, 0x2b8] |
0x00012782 movs r2, 6 | r2 = 6;
0x00012784 mov r1, r4 | r1 = r4;
0x00012786 add r0, pc | r0 = 0x251c6;
0x00012788 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x0001278c cbz r0, 0x12796 | goto label_6;
| }
0x0001278e mvn r3, 0xd | r3 = ~0xd;
0x00012792 str r3, [sp, 8] | var_8h = r3;
0x00012794 b 0x126f0 | goto label_0;
| }
| label_6:
0x00012796 cmp.w sl, 0 |
| if (sl != 0) {
0x0001279a beq 0x127ba |
0x0001279c ldr r1, [pc, 0x2a0] |
0x0001279e movs r2, 4 | r2 = 4;
0x000127a0 mov r0, sl | r0 = sl;
0x000127a2 add r1, pc | r1 = 0x251e6;
0x000127a4 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x000127a8 cbnz r0, 0x127b2 |
0x000127aa ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000127ae cmp r3, 2 |
| if (r3 < 2) {
0x000127b0 bls 0x127ba | goto label_7;
| }
| }
0x000127b2 mvn r3, 7 | r3 = ~7;
0x000127b6 str r3, [sp, 8] | var_8h = r3;
0x000127b8 b 0x126f0 | goto label_0;
| }
| label_7:
0x000127ba ldr.w fp, [pc, 0x288] | fp = *(0x00012a44);
0x000127be add fp, pc |
0x000127c0 ldr.w r3, [fp, 0x64] | r3 = *(arg_64h);
0x000127c4 cmp r3, 0 |
| if (r3 == 0) {
0x000127c6 beq.w 0x12952 | goto label_8;
| }
| label_2:
0x000127ca ldr r0, [pc, 0x27c] |
0x000127cc mov.w r2, 0x134 | r2 = 0x134;
0x000127d0 mov.w r1, 0x16e | r1 = 0x16e;
0x000127d4 add r0, pc | r0 = 0x25222;
0x000127d6 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000127da mov r8, r0 | r8 = r0;
0x000127dc cmp r0, 0 |
| if (r0 == 0) {
0x000127de beq.w 0x12946 | goto label_9;
| }
0x000127e2 mov.w r2, 0x134 | r2 = 0x134;
0x000127e6 movs r1, 0 | r1 = 0;
0x000127e8 str r0, [r7] | *(r7) = r0;
0x000127ea blx 0x30d8 | fcn_000030d8 ();
0x000127ee ldr r0, [pc, 0x25c] |
0x000127f0 movs r2, 6 | r2 = 6;
0x000127f2 mov r1, r4 | r1 = r4;
0x000127f4 add r0, pc | r0 = 0x25246;
0x000127f6 blx 0x3698 | fcn_00003698 ();
0x000127f8 vadd.i16 d18, d0, d0 | __asm ("vadd.i16 d18, d0, d0");
| if (r2 == 6) {
0x000127fc beq.w 0x1294e | goto label_10;
| }
0x00012800 ldr r0, [pc, 0x24c] |
0x00012802 movs r2, 5 | r2 = 5;
0x00012804 mov r1, r4 | r1 = r4;
0x00012806 add r0, pc | r0 = 0x2525a;
0x00012808 blx 0x3698 | r0 = fcn_00003698 ();
0x0001280c cmp r0, 0 |
| if (r0 != 0) {
0x0001280e bne.w 0x12998 | goto label_11;
| }
0x00012812 adds r4, 5 | r4 += 5;
0x00012814 movs r3, 1 | r3 = 1;
0x00012816 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| label_1:
0x0001281a mov r0, r4 | r0 = r4;
0x0001281c bl 0x5274 | fcn_00005274 (r0);
0x00012820 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00012824 cmp r0, 0 |
| if (r0 == 0) {
0x00012826 beq.w 0x12946 | goto label_9;
| }
0x0001282a bl 0xd5ac | fcn_0000d5ac ();
0x0001282e ldr r3, [pc, 0x224] |
0x00012830 mov.w r2, 0x134 | r2 = 0x134;
0x00012834 ldr r4, [pc, 0x220] |
0x00012836 mov r1, r8 | r1 = r8;
0x00012838 str.w r0, [r8, 0xe4] | __asm ("str.w r0, [r8, 0xe4]");
0x0001283c add r3, pc | r3 = 0x25296;
0x0001283e ldr r0, [r3] | r0 = *(0x25296);
0x00012840 add r4, pc | r4 = 0x2529c;
0x00012842 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x00012846 movs r2, 0xb4 | r2 = 0xb4;
0x00012848 movw r1, 0x191 | r1 = 0x191;
0x0001284c mov r0, r4 | r0 = r4;
0x0001284e bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00012852 str.w r0, [r8, 0xc] | __asm ("str.w r0, [r8, 0xc]");
0x00012856 cmp r0, 0 |
| if (r0 == 0) {
0x00012858 beq 0x12946 | goto label_9;
| }
0x0001285a movs r2, 0xb4 | r2 = 0xb4;
0x0001285c movs r1, 0 | r1 = 0;
0x0001285e blx 0x30d8 | fcn_000030d8 ();
0x00012862 ldr.w r7, [r8, 0xc] | r7 = *((r8 + 0xc));
0x00012866 str.w r8, [r7, 0x98] | __asm ("str.w r8, [r7, 0x98]");
0x0001286a bl 0xd5ac | fcn_0000d5ac ();
0x0001286c mrc2 p7, 4, r6, c15, c8, 3 | __asm ("mrc2 p7, 4, r6, c15, c8, 3");
0x00012870 ldr.w r7, [r8, 0xc] | r7 = *((r8 + 0xc));
0x00012874 bl 0xd5ac | fcn_0000d5ac ();
0x00012878 str r0, [r7, 0x70] | *((r7 + 0x70)) = r0;
0x0001287a ldr.w r7, [r8, 0xc] | r7 = *((r8 + 0xc));
0x0001287c strb r4, [r1] | *(r1) = r4;
0x0001287e bl 0xd5ac | fcn_0000d5ac ();
0x00012882 str r0, [r7, 0x78] | *((r7 + 0x78)) = r0;
0x00012884 mov r0, r5 | r0 = r5;
0x00012886 ldr.w r5, [r8, 0xc] | r5 = *((r8 + 0xc));
0x0001288a bl 0x5274 | fcn_00005274 (r0);
0x0001288e str r0, [r5] | *(r5) = r0;
0x00012890 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00012894 ldr.w r3, [r0, 0x98] | r3 = *((r0 + 0x98));
0x00012898 cmp r3, 0 |
| if (r3 == 0) {
0x0001289a beq 0x12946 | goto label_9;
| }
0x0001289c ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0001289e cmp r3, 0 |
| if (r3 == 0) {
0x000128a0 beq 0x12946 | goto label_9;
| }
0x000128a2 ldr r3, [r0, 0x70] | r3 = *((r0 + 0x70));
0x000128a4 cmp r3, 0 |
| if (r3 == 0) {
0x000128a6 beq 0x12946 | goto label_9;
| }
0x000128a8 ldr r3, [r0, 0x78] | r3 = *((r0 + 0x78));
0x000128aa cmp r3, 0 |
| if (r3 == 0) {
0x000128ac beq 0x12946 | goto label_9;
| }
0x000128ae ldr r3, [r0] | r3 = *(r0);
0x000128b0 cmp r3, 0 |
| if (r3 == 0) {
0x000128b2 beq 0x12946 | goto label_9;
| }
0x000128b4 movs r3, 0 | r3 = 0;
0x000128b6 str.w r3, [r0, 0x9c] | __asm ("str.w r3, [r0, 0x9c]");
0x000128ba str.w r3, [r8, 0xf4] | __asm ("str.w r3, [r8, 0xf4]");
0x000128be cmp.w sl, 0 |
| if (sl == 0) {
0x000128c2 beq 0x1291a | goto label_12;
| }
0x000128c4 mov r0, r4 | r0 = r4;
0x000128c6 movs r2, 0x24 | r2 = 0x24;
0x000128c8 movw r1, 0x1a7 | r1 = 0x1a7;
0x000128ca asrs r7, r4, 6 | r7 = r4 >> 6;
0x000128cc bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x000128d0 str.w r0, [r8, 0xf0] | __asm ("str.w r0, [r8, 0xf0]");
| if (r0 == 0) {
0x000128d4 cbz r0, 0x12946 | goto label_9;
| }
0x000128d6 mov r3, sl | r3 = sl;
0x000128d8 add.w r7, sl, 0x20 | r7 = sl + 0x20;
| do {
0x000128dc ldr r5, [r3] | r5 = *(r3);
0x000128de adds r3, 0x10 | r3 += 0x10;
0x000128e0 ldr r4, [r3, -0xc] | r4 = *((r3 - 0xc));
0x000128e4 adds r0, 0x10 | r0 += 0x10;
0x000128e6 ldr r1, [r3, -0x8] | r1 = *((r3 - 0x8));
0x000128ea ldr r2, [r3, -0x4] | r2 = *((r3 - 0x4));
0x000128ee cmp r3, r7 |
0x000128f0 str r5, [r0, -0x10] | *((r0 - 0x10)) = r5;
0x000128f4 str r4, [r0, -0xc] | *((r0 - 0xc)) = r4;
0x000128f8 str r1, [r0, -0x8] | *((r0 - 0x8)) = r1;
0x000128fc str r2, [r0, -0x4] | *((r0 - 0x4)) = r2;
0x00012900 bne 0x128dc |
| } while (r3 != r7);
0x00012902 ldr r3, [r3] | r3 = *(r3);
0x00012904 str r3, [r0] | *(r0) = r3;
0x00012906 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0001290a ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x0001290e cmp r3, 0 |
0x00012910 itt gt |
| if (r3 <= 0) {
0x00012912 ldrgt r3, [sl, 0x10] | r3 = *((sl + 0x10));
| }
| if (r3 > 0) {
0x00012916 str.w r3, [r0, 0x9c] | __asm ("str.w r3, [r0, 0x9c]");
| }
| label_12:
0x0001291a mov r2, sb | r2 = sb;
0x0001291c mov r1, r6 | r1 = r6;
0x0001291e adds r0, 0x84 | r0 += 0x84;
0x00012920 bl 0x9bb8 | fcn_00009bb8 (r0, r1, r2);
0x00012924 str r0, [sp, 8] | var_8h = r0;
0x00012926 cmp r0, 0 |
| if (r0 == 0) {
0x00012928 beq 0x129cc | goto label_13;
| }
| label_3:
0x0001292a ldr r3, [pc, 0x130] |
0x0001292c movs r2, 0xf0 | r2 = 0xf0;
0x0001292e ldr.w r1, [r8, 0xc] | r1 = *((r8 + 0xc));
0x00012932 add r3, pc |
0x00012934 ldr r3, [r3, 0x10] | r3 = *(0x253a4);
0x00012936 ldr r0, [r3, 4] | r0 = *(0x253a8);
0x00012938 bl 0xd5f8 | fcn_0000d5f8 (r0, r1, r2);
0x0001293c b 0x126f0 | goto label_0;
| label_5:
0x0001293e mvn r3, 4 | r3 = ~4;
0x00012942 str r3, [sp, 8] | var_8h = r3;
0x00012944 b 0x126f0 | goto label_0;
| label_9:
0x00012946 mvn r3, 0x62 | r3 = ~0x62;
0x0001294a str r3, [sp, 8] | var_8h = r3;
0x0001294c b 0x126f0 | goto label_0;
| label_10:
0x0001294e adds r4, 6 | r4 += 6;
0x00012950 b 0x1281a | goto label_1;
| label_8:
0x00012952 bl 0x10388 | fcn_00010388 ();
0x00012956 blx 0x33c0 | SSL_free ();
0x0001295a bl 0x960c | fcn_0000960c (r0);
0x0001295e ldr r3, [pc, 0x100] |
0x00012960 add r3, pc |
0x00012962 ldr r3, [r3, 0x10] | r3 = *(0x253d6);
0x00012964 str r3, [sp, 4] | var_4h = r3;
0x00012966 bl 0xd5ac | fcn_0000d5ac ();
0x0001296a ldr r3, [sp, 4] | r3 = var_4h;
0x0001296c str r0, [r3, 4] | *((r3 + 4)) = r0;
0x0001296e bl 0x7dec | fcn_00007dec ();
0x00012972 ldr r3, [pc, 0xf0] | r3 = *(0x12a66);
0x00012974 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00012978 bl 0x86dc | r0 = fcn_000086dc (r0);
0x0001297c bl 0xd5ac | fcn_0000d5ac ();
0x00012980 str.w r0, [fp] | __asm ("str.w r0, [fp]");
0x00012984 bl 0xd5ac | fcn_0000d5ac ();
0x00012988 str.w r0, [fp, 0x18] | __asm ("str.w r0, [arg_18h]");
0x0001298c bl 0x18030 | fcn_00018030 ();
0x00012990 movs r3, 1 | r3 = 1;
0x00012992 str.w r3, [fp, 0x64] | __asm ("str.w r3, [arg_64h]");
0x00012996 b 0x127ca | goto label_2;
| label_11:
0x00012998 ldr r0, [pc, 0xcc] |
0x0001299a movs r2, 6 | r2 = 6;
0x0001299c mov r1, r4 | r1 = r4;
0x0001299e add r0, pc | r0 = 0x2540a;
0x000129a0 blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x000129a4 cbnz r0, 0x129b0 |
0x000129a6 movs r3, 1 | r3 = 1;
0x000129a8 adds r4, 6 | r4 += 6;
0x000129aa str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
0x000129ae b 0x1281a | goto label_1;
| }
0x000129b0 ldr r0, [pc, 0xb8] |
0x000129b2 movs r2, 6 | r2 = 6;
0x000129b4 mov r1, r4 | r1 = r4;
0x000129b6 add r0, pc | r0 = 0x25426;
0x000129b8 blx 0x3698 | r0 = fcn_00003698 ();
0x000129bc cmp r0, 0 |
| if (r0 != 0) {
0x000129be bne.w 0x1281a | goto label_1;
| }
0x000129c2 movs r3, 1 | r3 = 1;
0x000129c4 adds r4, 6 | r4 += 6;
0x000129c6 strd r3, r3, [r8, 4] | __asm ("strd r3, r3, [r8, 4]");
0x000129ca b 0x1281a | goto label_1;
| label_13:
0x000129cc ldr.w r1, [r8] | r1 = *(r8);
0x000129d0 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x000129d4 bl 0xaa18 | fcn_0000aa18 (r0, r1);
0x000129d8 str r0, [sp, 8] | var_8h = r0;
0x000129da cmp r0, 0 |
| if (r0 != 0) {
0x000129dc bne 0x1292a | goto label_3;
| }
0x000129de ldr.w r3, [r8, 0xf0] | r3 = *((r8 + 0xf0));
| if (r3 != 0) {
0x000129e2 cbz r3, 0x129ee |
0x000129e4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000129e6 cmp r2, 1 |
| if (r2 <= 1) {
0x000129e8 ble 0x129ee | goto label_14;
| }
0x000129ea ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| if (r3 == 0) {
0x000129ec cbz r3, 0x12a02 | goto label_15;
| }
| }
| label_14:
0x000129ee mov r0, r8 | r0 = r8;
0x000129f0 bl 0x1391c | fcn_0001391c (r0, r1, r2, r3, r4, r5, r6);
0x000129f4 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x000129f8 bl 0xad90 | fcn_0000ad90 (r0);
0x000129fa invalid |
0x000129fc b 0x1292a | goto label_3;
| label_4:
0x000129fe blx 0x348c | fprintf_chk ()
| label_15:
0x00012a02 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00012a06 bl 0x13b68 | fcn_00013b68 (r0, r1, r2);
0x00012a0a b 0x1292a | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x11bf8 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_isComplete () | void MQTTAsync_isComplete (int16_t arg_2d8h, int16_t arg_198h, int16_t arg_1a8h, int16_t arg_240h, int16_t arg_228h, int16_t arg_350h, int16_t arg_360h, int16_t arg_3b0h, int16_t arg_3b8h, int16_t arg1, int16_t arg2) {
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_0h;
| int16_t var_20h;
| int16_t var_e8h;
| int16_t var_10h;
| int16_t var_150h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| do {
0x00011b94 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x00011b96 cbz r3, 0x11ba0 |
0x00011b98 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00011b9a ubfx r3, r3, 2, 1 | r3 = (r3 >> 2) & ((1 << 1) - 1);
0x00011b9e str r3, [sp] | *(sp) = r3;
| }
0x00011ba0 ldr r3, [pc, 0x48] |
0x00011ba2 add r3, pc | r3 = 0x23792;
0x00011ba4 ldr r0, [r3] | r0 = *(0x23792);
0x00011ba6 bl 0x136a8 | fcn_000136a8 ();
0x00011baa ldr r0, [pc, 0x44] |
0x00011bac movs r3, 3 | r3 = 3;
0x00011bae mov r2, sp | r2 = sp;
0x00011bb0 movw r1, 0x529 | r1 = 0x529;
0x00011bb4 add r0, pc | r0 = 0x237aa;
0x00011bb6 adds r0, 0xd0 | r0 += 0xd0;
0x00011bb8 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011bbc ldr r2, [pc, 0x34] |
0x00011bbe ldr r3, [pc, 0x24] | r3 = *(0x11be6);
0x00011bc0 ldr r0, [sp] | r0 = *(sp);
0x00011bc2 add r2, pc | r2 = 0x237ba;
0x00011bc4 ldr r3, [r2, r3] | r3 = *(0x237ba);
0x00011bc6 ldr r2, [r3] | r2 = *(0x237ba);
0x00011bc8 ldr r3, [sp, 4] | r3 = *((sp + 4));
0x00011bca eors r2, r3 | r2 ^= r3;
0x00011bcc mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00011bd0 bne 0x11bd6 |
0x00011bd2 add sp, 0xc |
0x00011bd4 pop {r4, r5, pc} |
| }
0x00011bd6 blx 0x348c | fprintf_chk ()
0x00011bda nop |
| label_3:
0x00011bdc add r5, sp, 0x150 | r5 += var_150h;
0x00011bde movs r0, r0 |
| if (r0 != r0) {
0x00011be0 bne 0x11c24 | goto label_12;
| }
0x00011be2 movs r1, r0 | r1 = r0;
0x00011be4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011be6 movs r0, r0 |
0x00011be8 bvs 0x11c98 | __asm ("bvs 0x11c98");
0x00011bea movs r1, r0 | r1 = r0;
| label_5:
0x00011bec bvs 0x11c6c | __asm ("bvs 0x11c6c");
0x00011bee movs r1, r0 | r1 = r0;
0x00011bf0 add r5, sp, 0x20 | r5 += var_20h;
0x00011bf2 movs r0, r0 |
0x00011bf4 beq 0x11b94 |
| } while (r0 == r0);
0x00011bf6 movs r1, r0 | r1 = r0;
0x00011bf8 ldr r3, [pc, 0xd8] |
0x00011bfa movs r2, 3 | r2 = 3;
0x00011bfc push.w {r4, r5, r6, r7, r8, lr} |
0x00011c00 mov r6, r1 | r6 = r1;
0x00011c02 ldr r1, [pc, 0xd4] |
0x00011c04 mov r4, r0 | r4 = r0;
0x00011c06 add r3, pc | r3 = 0x238de;
0x00011c08 sub sp, 0x10 |
0x00011c0a add.w r0, r3, 0xe8 | r0 = r3 + 0xe8;
0x00011c0e ldr r3, [pc, 0xcc] | r3 = *(0x11cde);
0x00011c10 add r1, pc | r1 = 0x238ee;
0x00011c12 mov.w r8, 0 | r8 = 0;
0x00011c16 ldr r3, [r1, r3] |
0x00011c18 movw r1, 0x534 | r1 = 0x534;
0x00011c1c ldr r3, [r3] | r3 = *(0x238ee);
0x00011c1e str r3, [sp, 0xc] | var_ch_2 = r3;
0x00011c20 mov.w r3, 0 | r3 = 0;
| label_12:
0x00011c24 strd r8, r8, [sp, 4] | __asm ("strd r8, r8, [sp, 4]");
0x00011c28 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011c2c ldr r3, [pc, 0xb0] |
0x00011c2e add r3, pc | r3 = 0x23912;
0x00011c30 ldr r0, [r3] | r0 = *(0x23912);
0x00011c32 bl 0x13684 | fcn_00013684 ();
0x00011c36 cmp r4, 0 |
| if (r4 == 0) {
0x00011c38 beq 0x11cc8 | goto label_13;
| }
0x00011c3a ldr r5, [pc, 0xa8] |
0x00011c3c add r7, sp, 8 | r7 += var_8h_2;
0x00011c3e str.w r8, [sp, 8] | __asm ("str.w r8, [var_8h_2]");
0x00011c42 add r5, pc | r5 = 0x2392c;
| do {
| label_0:
0x00011c44 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00011c46 mov r1, r7 | r1 = r7;
| label_4:
0x00011c48 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
| if (r0 == 0) {
0x00011c4c cbz r0, 0x11c96 | goto label_14;
| }
0x00011c4e ldr r3, [sp, 8] | r3 = *((sp + 8));
0x00011c50 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00011c52 ldr r2, [r3, 0x50] | r2 = *((r3 + 0x50));
0x00011c54 cmp r2, r4 |
0x00011c56 bne 0x11c44 |
| } while (r2 != r4);
0x00011c58 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00011c5a cmp r3, r6 |
| if (r3 != r6) {
0x00011c5c bne 0x11c44 | goto label_0;
| }
| do {
| label_2:
0x00011c5e ldr r3, [pc, 0x88] |
0x00011c60 add r3, pc | r3 = 0x2394e;
0x00011c62 ldr r0, [r3] | r0 = *(0x2394e);
0x00011c64 bl 0x136a8 | fcn_000136a8 ();
0x00011c66 stc2 p8, c4, [r0, -0x80]! | __asm ("stc2 p8, c4, [r0, -0x80]!");
0x00011c6a movs r3, 3 | r3 = 3;
0x00011c6c add r2, sp, 4 | r2 = sp + 4;
0x00011c6e movw r1, 0x556 | r1 = 0x556;
0x00011c72 add r0, pc | r0 += pc;
0x00011c74 adds r0, 0xe8 | r0 += 0xe8;
0x00011c76 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011c7a ldr r2, [pc, 0x74] |
0x00011c7c ldr r3, [pc, 0x5c] | r3 = *(0x11cdc);
0x00011c7e ldr r0, [sp, 4] | r0 = *((sp + 4));
0x00011c80 add r2, pc | r2 = 0x23976;
0x00011c82 ldr r3, [r2, r3] | r3 = *(0x23976);
0x00011c84 ldr r2, [r3] | r2 = *(0x23976);
0x00011c86 ldr r3, [sp, 0xc] | r3 = *((sp + 0xc));
0x00011c88 eors r2, r3 | r2 ^= r3;
0x00011c8a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00011c8e bne 0x11cd0 | goto label_15;
| }
0x00011c90 add sp, 0x10 |
0x00011c92 pop.w {r4, r5, r6, r7, r8, pc} |
| label_14:
0x00011c96 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00011c98 cbz r3, 0x11cc2 | goto label_16;
| }
0x00011c9a ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x00011c9c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00011c9e cmp r2, 0 |
0x00011ca0 it gt |
| if (r2 <= 0) {
0x00011ca2 strgt r0, [sp, 8] | *((sp + 8)) = r0;
| }
| if (r2 > 0) {
0x00011ca4 bgt 0x11cb6 | goto label_17;
| }
0x00011ca6 b 0x11cc2 | goto label_16;
| label_1:
0x00011ca8 ldr r3, [sp, 8] | r3 = *((sp + 8));
0x00011caa ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00011cac ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00011cae cmp r3, r6 |
0x00011cb0 beq 0x11c5e |
| } while (r3 == r6);
0x00011cb2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00011cb4 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
| label_17:
0x00011cb6 mov r1, r7 | r1 = r7;
0x00011cb8 mov r0, r3 | r0 = r3;
0x00011cba bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00011cbe cmp r0, 0 |
| if (r0 != 0) {
0x00011cc0 bne 0x11ca8 | goto label_1;
| }
| label_16:
0x00011cc2 movs r3, 1 | r3 = 1;
0x00011cc4 str r3, [sp, 4] | *((sp + 4)) = r3;
0x00011cc6 b 0x11c5e | goto label_2;
| label_13:
0x00011cc8 mov.w r3, -1 | r3 = -1;
0x00011ccc str r3, [sp, 4] | *((sp + 4)) = r3;
0x00011cce b 0x11c5e | goto label_2;
| label_15:
0x00011cd0 blx 0x348c | fprintf_chk ()
0x00011cd4 add r4, sp, 0x2d8 | r4 += arg_2d8h;
0x00011cd6 movs r0, r0 |
| if (r0 == r0) {
0x00011cd8 beq 0x11bdc | goto label_3;
| }
0x00011cda movs r1, r0 | r1 = r0;
0x00011cdc lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011cde movs r0, r0 |
| if (r0 >= r0) {
0x00011ce0 bpl 0x11c48 | goto label_4;
| }
0x00011ce2 movs r1, r0 | r1 = r0;
0x00011ce4 add r7, sp, 0xe8 | r7 += var_e8h;
0x00011ce6 movs r1, r1 |
| if (r1 >= r1) {
0x00011ce8 bpl 0x11bec | goto label_5;
| }
0x00011cea movs r1, r0 | r1 = r0;
0x00011cec add r4, sp, 0x128 | r4 += var_10h;
0x00011cee movs r0, r0 |
| if (r0 != r0) {
0x00011cf0 beq 0x11d14 |
0x00011cf2 movs r1, r0 | r1 = r0;
| }
0x00011d14 add r8, pc | r8 += pc;
0x00011d16 ldr r2, [r2] | r2 = *(r2);
0x00011d18 str r2, [sp, 0xc] | *((sp + 0xc)) = r2;
0x00011d1a mov.w r2, 0 | r2 = 0;
0x00011d1e str r3, [sp] | *(sp) = r3;
0x00011d20 bl 0x3874 | fcn_00003874 (r0);
0x00011d24 ldr r0, [pc, 0x108] |
0x00011d26 movs r2, 3 | r2 = 3;
0x00011d28 movw r1, 0x562 | r1 = 0x562;
0x00011d2c add r0, pc |
0x00011d2e add.w r0, r0, 0x100 | r0 = 0x23c60;
0x00011d32 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011d36 ldr.w r0, [r8] | r0 = *(r8);
0x00011d3a bl 0x13684 | fcn_00013684 ();
0x00011d3e cmp r4, 0 |
| if (r4 == 0) {
0x00011d40 beq 0x11e0e | goto label_18;
| }
0x00011d42 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00011d44 cmp r3, 0 |
| if (r3 == 0) {
0x00011d46 beq 0x11e0e | goto label_18;
| }
0x00011d48 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00011d4a ldr.w r0, [r8] | r0 = *(r8);
0x00011d4e lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 >= r3) {
0x00011d50 bpl 0x11dd4 | goto label_19;
| }
0x00011d52 bl 0x136a8 | fcn_000136a8 ();
0x00011d56 mov r1, r6 | r1 = r6;
0x00011d58 mov r0, r4 | r0 = r4;
0x00011d5a blx 0x32ac | r0 = SSL_CTX_use_certificate_chain_file ();
0x00011d5e cmp r0, 1 |
0x00011d60 itt eq |
| if (r0 != 1) {
0x00011d62 moveq r3, 0 | r3 = 0;
| }
| if (r0 != 1) {
0x00011d64 streq r3, [sp] | *(sp) = r3;
| }
| if (r0 == 1) {
0x00011d66 beq 0x11dde | goto label_20;
| }
0x00011d68 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00011d6c bl 0x3990 | r0 = fcn_00003990 ();
0x00011d70 cmp r0, r7 |
0x00011d72 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r0 >= r7) {
0x00011d76 bhs 0x11dde | goto label_20;
| }
0x00011d78 ldr.w sb, [pc, 0xb8] |
0x00011d7c ldr.w r8, [pc, 0xb8] |
0x00011d80 add sb, pc | sb = 0x23bb8;
0x00011d82 add r8, pc | r8 = 0x23bbe;
0x00011d84 b 0x11dcc |
| while (r3 == 1) {
0x00011d86 movs r0, 0x64 | r0 = 0x64;
0x00011d88 movs r1, 0 | r1 = 0;
0x00011d8a bl 0x3840 | fcn_00003840 (r0);
0x00011d8e mov r1, r6 | r1 = r6;
0x00011d90 mov r0, r4 | r0 = r4;
0x00011d92 blx 0x32ac | r0 = SSL_CTX_use_certificate_chain_file ();
0x00011d96 cmp r0, 1 |
0x00011d98 ldr.w r0, [sb] | r0 = *(sb);
0x00011d9c itt eq |
| if (r0 != 1) {
0x00011d9e moveq r3, 0 | r3 = 0;
| }
| if (r0 != 1) {
0x00011da0 streq r3, [sp] | *(sp) = r3;
| }
0x00011da2 bl 0x13684 | fcn_00013684 ();
0x00011da6 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00011da8 ldr.w r0, [r8] | r0 = *(r8);
0x00011dac ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00011dae lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x00011db0 itt pl |
| if (r3 < r3) {
0x00011db2 mvnpl r3, 2 | r3 = ~2;
| }
| if (r3 >= r3) {
0x00011db6 str r3, [sp] | *(sp) = r3;
| }
0x00011db8 bl 0x136a8 | r0 = fcn_000136a8 ();
0x00011dbc ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00011dc0 bl 0x3990 | r0 = fcn_00003990 ();
0x00011dc4 cmp r0, r7 |
0x00011dc6 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| label_6:
0x00011dc8 lsls r0, r0, 4 | r0 <<= 4;
| if (r0 >= r0) {
0x00011dca bhs 0x11dde | goto label_20;
| }
0x00011dcc ldr r3, [sp] | r3 = *(sp);
0x00011dce adds r3, 1 | r3++;
0x00011dd0 beq 0x11d86 |
| }
0x00011dd2 b 0x11dde | goto label_20;
| label_19:
0x00011dd4 bl 0x136a8 | fcn_000136a8 ();
0x00011dd8 mvn r3, 2 | r3 = ~2;
0x00011ddc str r3, [sp] | *(sp) = r3;
| do {
| label_20:
0x00011dde ldr r0, [pc, 0x5c] | r0 = *(0x11e3e);
0x00011de0 movs r3, 3 | r3 = 3;
0x00011de2 mov r2, sp | r2 = sp;
0x00011de4 movw r1, 0x586 | r1 = 0x586;
| label_7:
0x00011de8 add r0, pc | r0 += pc;
0x00011dea add.w r0, r0, 0x100 | r0 += 0x100;
0x00011dee bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011df2 ldr r2, [pc, 0x4c] |
0x00011df4 ldr r3, [pc, 0x30] | r3 = *(0x11e28);
0x00011df6 ldr r0, [sp] | r0 = *(sp);
0x00011df8 add r2, pc | r2 = 0x23c3e;
0x00011dfa ldr r3, [r2, r3] | r3 = *(0x23c3e);
0x00011dfc ldr r2, [r3] | r2 = *(0x23c3e);
0x00011dfe ldr r3, [sp, 0xc] | r3 = *((sp + 0xc));
0x00011e00 eors r2, r3 | r2 ^= r3;
0x00011e02 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00011e06 bne 0x11e20 | goto label_21;
| }
0x00011e08 add sp, 0x14 |
0x00011e0a pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_18:
0x00011e0e ldr r3, [pc, 0x34] |
0x00011e10 add r3, pc | r3 = 0x23c5a;
0x00011e12 ldr r0, [r3] | r0 = *(0x23c5a);
0x00011e14 bl 0x136a8 | fcn_000136a8 ();
0x00011e18 mov.w r3, -1 | r3 = -1;
0x00011e1c str r3, [sp] | *(sp) = r3;
0x00011e1e b 0x11dde |
| } while (1);
| label_21:
0x00011e20 blx 0x348c | fprintf_chk ()
0x00011e24 ldm r7, {r3, r7} | r3 = *(r7);
| r7 = *((r7 + 4));
0x00011e26 movs r1, r0 | r1 = r0;
0x00011e28 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011e2a movs r0, r0 |
| if (r0 < r0) {
0x00011e2c bmi 0x11dc8 | goto label_6;
| }
0x00011e2e movs r1, r0 | r1 = r0;
0x00011e30 add r3, sp, 0x240 | r3 += arg_240h;
0x00011e32 movs r0, r0 |
| if (r0 < r0) {
0x00011e34 bmi 0x11ef8 | goto label_22;
| }
0x00011e36 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x00011e38 bmi 0x11ef8 | goto label_22;
| }
0x00011e3a movs r1, r0 | r1 = r0;
0x00011e3c add r2, sp, 0x350 | r2 += arg_350h;
0x00011e3e movs r0, r0 |
0x00011e40 ldm r6!, {r3, r4, r7} | r3 = *(r6!);
| r4 = *((r6! + 4));
| r7 = *((r6! + 8));
0x00011e42 movs r1, r0 | r1 = r0;
| if (r1 <= r0) {
0x00011e44 blo 0x11de8 | goto label_7;
| }
0x00011e46 movs r1, r0 | r1 = r0;
| label_8:
0x00011eba ldr r3, [pc, 0xf4] |
0x00011ebc add r3, pc | r3 = 0x23e72;
0x00011ebe ldr r0, [r3] | r0 = *(0x23e72);
0x00011ec0 bl 0x136a8 | fcn_000136a8 ();
0x00011ec4 ldr r0, [pc, 0xec] |
0x00011ec6 movs r3, 3 | r3 = 3;
0x00011ec8 add r2, sp, 4 | r2 += var_14h;
0x00011eca mov.w r1, 0x5c8 | r1 = 0x5c8;
0x00011ece add r0, pc |
0x00011ed0 add.w r0, r0, 0x11c | r0 = 0x23fa2;
0x00011ed4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011ed8 ldr r2, [pc, 0xdc] |
0x00011eda ldr r3, [pc, 0xc8] | r3 = *(0x11fa6);
0x00011edc ldr r0, [sp, 4] | r0 = var_14h;
0x00011ede add r2, pc | r2 = 0x23e9a;
0x00011ee0 ldr r3, [r2, r3] | r3 = *(0x23e9a);
0x00011ee2 ldr r2, [r3] | r2 = *(0x23e9a);
0x00011ee4 ldr r3, [sp, 0xc] | r3 = *((sp + 0xc));
0x00011ee6 eors r2, r3 | r2 ^= r3;
0x00011ee8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00011eec bne 0x11f96 | goto label_23;
| }
0x00011eee add sp, 0x14 |
0x00011ef0 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_22:
0x00011ef8 lsls r2, r2, 2 | r2 <<= 2;
0x00011efa mov.w r1, 0x5a8 | r1 = 0x5a8;
0x00011efe add r0, pc | r0 += pc;
0x00011f00 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00011f04 str r0, [r6] | *(r6) = r0;
0x00011f06 cmp r0, 0 |
| if (r0 == 0) {
0x00011f08 beq 0x11f8e | goto label_24;
| }
0x00011f0a ldr r7, [pc, 0xb4] |
0x00011f0c movs r3, 0 | r3 = 0;
0x00011f0e mov sb, r3 | sb = r3;
0x00011f10 str r3, [sp, 8] | *((sp + 8)) = r3;
0x00011f12 add r7, pc | r7 = 0x23ed8;
| label_9:
0x00011f14 mov r8, sb | r8 = sb;
0x00011f16 b 0x11f22 |
| while (r0 != 0) {
0x00011f18 ldr r3, [sp, 8] | r3 = *((sp + 8));
0x00011f1a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00011f1c ldr r2, [r3, 0x50] | r2 = *((r3 + 0x50));
0x00011f1e cmp r2, r4 |
| if (r2 == r4) {
0x00011f20 beq 0x11f78 | goto label_25;
| }
0x00011f22 ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
0x00011f24 mov r1, r5 | r1 = r5;
0x00011f26 bl 0xd9f8 | r0 = fcn_0000d9f8 (r0, r1);
0x00011f2a cmp r0, 0 |
0x00011f2c bne 0x11f18 |
| }
0x00011f2e ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x00011f30 cbz r3, 0x11f3e |
0x00011f32 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x00011f34 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00011f36 cmp r2, 0 |
0x00011f38 it gt |
| if (r2 <= 0) {
0x00011f3a strgt r0, [sp, 8] | *((sp + 8)) = r0;
| }
| if (r2 > 0) {
0x00011f3c bgt 0x11f5c | goto label_26;
| }
| }
0x00011f3e ldr r3, [r6] | r3 = *(r6);
0x00011f40 mov.w r2, -1 | r2 = -1;
0x00011f44 str.w r2, [r3, r8, lsl 2] | __asm ("str.w r2, [r3, r8, lsl 2]");
0x00011f48 b 0x11eba | goto label_8;
| do {
0x00011f4a ldr r3, [sp, 8] | r3 = *((sp + 8));
0x00011f4c add.w r8, r8, 1 | r8++;
0x00011f50 ldr r1, [r6] | r1 = *(r6);
0x00011f52 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00011f54 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00011f56 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00011f58 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x00011f5a str r0, [r1, r2] | *((r1 + r2)) = r0;
| label_26:
0x00011f5c mov r1, r5 | r1 = r5;
0x00011f5e mov r0, r3 | r0 = r3;
0x00011f60 bl 0xd9f8 | fcn_0000d9f8 (r0, r1);
0x00011f64 lsl.w r2, r8, 2 | r2 = r8 << 2;
0x00011f68 cmp r0, 0 |
0x00011f6a bne 0x11f4a |
| } while (r0 != 0);
0x00011f6c ldr r3, [r6] | r3 = *(r6);
0x00011f6e mov.w r2, -1 | r2 = -1;
0x00011f72 str.w r2, [r3, r8, lsl 2] | __asm ("str.w r2, [r3, r8, lsl 2]");
0x00011f76 b 0x11eba | goto label_8;
| label_25:
0x00011f78 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x00011f7a ldr r3, [r6] | r3 = *(r6);
0x00011f7c str.w r2, [r3, sb, lsl 2] | __asm ("str.w r2, [r3, sb, lsl 2]");
0x00011f80 add.w sb, sb, 1 | sb++;
0x00011f84 b 0x11f14 | goto label_9;
| label_24:
0x00011f8e mvn r3, 0x62 | r3 = ~0x62;
0x00011f92 str r3, [sp, 4] | var_14h = r3;
0x00011f94 b 0x11eba | goto label_8;
| label_23:
0x00011f96 blx 0x348c | fprintf_chk ()
0x00011f9a nop |
0x00011f9c add r2, sp, 0x198 | r2 += arg_198h;
0x00011f9e movs r0, r0 |
0x00011fa0 ldm r6!, {r4, r5} | r4 = *(r6!);
| r5 = *((r6! + 4));
0x00011fa2 movs r1, r0 | r1 = r0;
0x00011fa4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011fa6 movs r0, r0 |
| if (r0 <= r0) {
0x00011fa8 blo 0x12074 | goto label_27;
| }
0x00011faa movs r1, r0 | r1 = r0;
0x00011fac add r4, sp, 0x3b0 | r4 += arg_3b0h;
0x00011fae movs r1, r1 |
| if (r1 > r1) {
0x00011fb0 blo 0x11ffc |
0x00011fb2 movs r1, r0 | r1 = r0;
0x00011fb4 add r1, sp, 0x3b8 | r1 += arg_3b8h;
0x00011fb6 movs r0, r0 |
0x00011fb8 ldm r5, {r1, r4, r5, r7} | r1 = *(r5);
| r4 = *((r5 + 4));
| r5 = *((r5 + 8));
| r7 = *((r5 + 12));
0x00011fba movs r1, r0 | r1 = r0;
0x00011fbc adr r4, 0x3b8 | r4 = 0x3b8;
0x00011fbe movs r0, r0 |
0x00011fc0 add r4, sp, 0x1a8 | r4 += arg_1a8h;
0x00011fc2 movs r1, r1 |
| }
0x00011ffc add r3, pc | r3 += pc;
0x00011ffe ldr r0, [r3] | r0 = *(r3);
| label_11:
0x00012000 bl 0x13684 | fcn_00013684 ();
0x00012004 cmp r5, 0 |
0x00012006 it ne |
| if (r5 != 0) {
0x00012008 cmpne r4, 0 | __asm ("cmpne r4, 0");
| }
| if (r5 != 0) {
0x0001200a beq 0x12018 |
0x0001200c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x0001200e cbz r3, 0x12018 | goto label_28;
| }
0x00012010 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00012012 and r3, r3, 0x3c0 | r3 &= 0x3c0;
| if (r3 == 0) {
0x00012016 cbz r3, 0x12058 | goto label_29;
| }
| }
| label_28:
0x00012018 mov.w r3, -1 | r3 = -1;
0x0001201c str r3, [sp] | *(sp) = r3;
| do {
0x0001201e ldr r3, [pc, 0x5c] |
0x00012020 add r3, pc | r3 = 0x240a2;
0x00012022 ldr r0, [r3] | r0 = *(0x240a2);
0x00012024 bl 0x136a8 | fcn_000136a8 ();
0x00012028 ldr r0, [pc, 0x54] |
0x0001202a movs r3, 3 | r3 = 3;
0x0001202c mov r2, sp | r2 = sp;
0x0001202e movw r1, 0x5e3 | r1 = 0x5e3;
0x00012032 add r0, pc |
0x00012034 add.w r0, r0, 0x138 | r0 = 0x241ee;
0x00012038 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001203c ldr r2, [pc, 0x44] |
0x0001203e ldr r3, [pc, 0x30] | r3 = *(0x12072);
0x00012040 ldr r0, [sp] | r0 = *(sp);
0x00012042 add r2, pc | r2 = 0x240ca;
| label_10:
0x00012044 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00012046 ldr r2, [r3] | r2 = *(r3);
0x00012048 ldr r3, [sp, 4] | r3 = *((sp + 4));
0x0001204a eors r2, r3 | r2 ^= r3;
0x0001204c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012050 bne 0x12066 | goto label_30;
| }
0x00012052 add sp, 8 |
0x00012054 pop.w {r4, r5, r6, r7, r8, pc} |
| label_29:
0x00012058 strd r6, r6, [r4, 0x20] | __asm ("strd r6, r6, [r4, 0x20]");
0x0001205c str r6, [r4, 0x1c] | *((r4 + 0x1c)) = r6;
0x0001205e strd r8, r5, [r4, 0x10] | __asm ("strd r8, r5, [r4, 0x10]");
0x00012062 str r7, [r4, 0x18] | *((r4 + 0x18)) = r7;
0x00012064 b 0x1201e |
| } while (1);
| label_30:
0x00012066 blx 0x348c | fprintf_chk ()
0x0001206a nop |
0x0001206c ldm r4, {r1, r3, r4, r5, r7} | r1 = *(r4);
| r3 = *((r4 + 4));
| r4 = *((r4 + 8));
| r5 = *((r4 + 12));
| r7 = *((r4 + 16));
0x0001206e movs r1, r0 | r1 = r0;
0x00012070 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00012072 movs r0, r0 |
| label_27:
0x00012074 add r0, sp, 0x360 | r0 += arg_360h;
0x00012076 movs r0, r0 |
| if (r0 != r0) {
0x00012078 bne 0x12044 | goto label_10;
| }
0x0001207a movs r1, r0 | r1 = r0;
| if (r1 != r0) {
0x0001207c bne 0x12000 | goto label_11;
| }
0x0001207e movs r1, r0 | r1 = r0;
0x00012080 add r0, sp, 0x228 | r0 += arg_228h;
0x00012082 movs r0, r0 |
0x00012084 ldm r4!, {r1, r2, r3, r6} | r1 = *(r4!);
| r2 = *((r4! + 4));
| r3 = *((r4! + 8));
| r6 = *((r4! + 12));
0x00012086 movs r1, r0 | r1 = r0;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12ca0).
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-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x110c8 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_reconnect () | void MQTTAsync_reconnect (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| if (? < ?) {
0x000110c8 andhs r4, r3, 56, 22 | r4 = r3 & (56 22);
| }
0x000110cc push {r4, r5, r6, lr} |
0x000110ce mov r4, r0 | r4 = r0;
0x000110d0 ldr r6, [pc, 0xdc] |
0x000110d2 sub sp, 8 |
0x000110d4 add r3, pc | r3 += pc;
0x000110d6 movw r1, 0x396 | r1 = 0x396;
0x000110da add.w r0, r3, 0x28 | r0 = r3 + 0x28;
0x000110de ldr r3, [pc, 0xd4] | r3 = *(0x111b6);
0x000110e0 add r6, pc | r6 = 0x22294;
0x000110e2 mov.w r5, -1 | r5 = -1;
0x000110e6 ldr r3, [r6, r3] |
0x000110e8 ldr r3, [r3] | r3 = *(0x22294);
0x000110ea str r3, [sp, 4] | var_4h = r3;
0x000110ec mov.w r3, 0 | r3 = 0;
0x000110f0 str r5, [sp] | *(sp) = r5;
0x000110f2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000110f6 ldr r3, [pc, 0xc0] |
0x000110f8 add r3, pc | r3 = 0x222b6;
0x000110fa ldr r0, [r3] | r0 = *(0x222b6);
0x000110fc bl 0x13684 | fcn_00013684 ();
0x00011100 ldr.w r5, [r4, 0xfc] | r5 = *((r4 + 0xfc));
| if (r5 == 0) {
0x00011104 cbz r5, 0x11160 | goto label_1;
| }
0x00011106 ldr.w r3, [r4, 0xf4] | r3 = *((r4 + 0xf4));
0x0001110a cbnz r3, 0x11142 |
| while (1) {
| label_0:
0x0001110c ldr r3, [pc, 0xac] |
0x0001110e add r3, pc | r3 = 0x222ce;
0x00011110 ldr r0, [r3] | r0 = *(0x222ce);
0x00011112 bl 0x136a8 | fcn_000136a8 ();
0x00011116 ldr r0, [pc, 0xa8] |
0x00011118 movs r3, 3 | r3 = 3;
0x0001111a mov r2, sp | r2 = sp;
0x0001111c movw r1, 0x3bb | r1 = 0x3bb;
0x00011120 add r0, pc | r0 = 0x222e6;
0x00011122 adds r0, 0x28 | r0 += 0x28;
0x00011124 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011128 ldr r2, [pc, 0x98] |
0x0001112a ldr r3, [pc, 0x88] | r3 = *(0x111b6);
0x0001112c ldr r0, [sp] | r0 = *(sp);
0x0001112e add r2, pc | r2 = 0x222f6;
0x00011130 ldr r3, [r2, r3] | r3 = *(0x222f6);
0x00011132 ldr r2, [r3] | r2 = *(0x222f6);
0x00011134 ldr r3, [sp, 4] | r3 = var_4h;
0x00011136 eors r2, r3 | r2 ^= r3;
0x00011138 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001113c bne 0x111a6 | goto label_2;
| }
0x0001113e add sp, 8 |
0x00011140 pop {r4, r5, r6, pc} |
0x00011142 ldr.w r2, [r4, 0x124] | r2 = *((r4 + 0x124));
0x00011146 movs r3, 1 | r3 = 1;
0x00011148 str.w r3, [r4, 0x128] | __asm ("str.w r3, [r4, 0x128]");
| if (r2 == 0) {
0x0001114c cbnz r2, 0x1115a |
0x0001114e ldr.w r2, [r4, 0x100] | r2 = *((r4 + 0x100));
0x00011152 str.w r3, [r4, 0x124] | __asm ("str.w r3, [r4, 0x124]");
0x00011156 strd r2, r2, [r4, 0x114] | __asm ("strd r2, r2, [r4, 0x114]");
| }
0x0001115a movs r3, 0 | r3 = 0;
0x0001115c str r3, [sp] | *(sp) = r3;
0x0001115e b 0x1110c |
| }
| label_1:
0x00011160 ldr r0, [pc, 0x64] |
0x00011162 movs r2, 0x60 | r2 = 0x60;
0x00011164 movw r1, 0x3aa | r1 = 0x3aa;
0x00011168 add r0, pc | r0 = 0x22334;
0x0001116a bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x0001116e mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00011170 cbz r0, 0x1119e |
0x00011172 movs r2, 0x60 | r2 = 0x60;
0x00011174 mov r1, r5 | r1 = r5;
0x00011176 blx 0x30d8 | fcn_000030d8 ();
0x0001117a movs r2, 0x50 | r2 = 0x50;
0x0001117c add.w r1, r4, 0x40 | r1 = r4 + 0x40;
0x00011180 mov r0, r6 | r0 = r6;
0x00011182 str r4, [r6, 0x50] | *((r6 + 0x50)) = r4;
0x00011184 blx 0x32a0 | pthread_cond_signal ();
0x00011188 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001118a ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
| if (r3 == 0) {
0x0001118e cbnz r3, 0x11192 |
0x00011190 str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
| }
0x00011192 movs r1, 0x50 | r1 = 0x50;
0x00011194 mov r0, r6 | r0 = r6;
0x00011196 bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x0001119a str r0, [sp] | *(sp) = r0;
0x0001119c b 0x1110c | goto label_0;
| }
0x0001119e mvn r3, 0x62 | r3 = ~0x62;
0x000111a2 str r3, [sp] | *(sp) = r3;
0x000111a4 b 0x1110c | goto label_0;
| label_2:
0x000111a6 blx 0x348c | fprintf_chk ()
0x000111aa nop |
0x000111ac invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x11a50 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_sendMessage () | void MQTTAsync_sendMessage (int16_t arg_2d8h, int16_t arg_378h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_0h;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_140h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00011a50 invalid |
0x00011a54 ldr r1, [pc, 0xb4] |
0x00011a56 mov r5, r3 | r5 = r3;
0x00011a58 mov r7, r0 | r7 = r0;
0x00011a5a sub sp, 0x1c |
0x00011a5c ldr r3, [pc, 0xb0] | r3 = *(0x11b10);
0x00011a5e mov r4, r2 | r4 = r2;
0x00011a60 add r1, pc | r1 = 0x23570;
0x00011a62 ldr r0, [pc, 0xb0] | r0 = *(0x11b16);
0x00011a64 movs r2, 0 | r2 = 0;
0x00011a66 ldr r3, [r1, r3] | r3 = *(0x23570);
0x00011a68 movw r1, 0x4fe | r1 = 0x4fe;
| label_0:
0x00011a6c add r0, pc | r0 += pc;
0x00011a6e adds r0, 0xb8 | r0 += 0xb8;
0x00011a70 ldr r3, [r3] | r3 = *(r3);
0x00011a72 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00011a74 mov.w r3, 0 | r3 = 0;
0x00011a76 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00011a78 str r2, [sp, 0x10] | var_10h_2 = r2;
0x00011a7a movs r2, 3 | r2 = 3;
0x00011a7c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011a80 cmp r4, 0 |
| if (r4 == 0) {
0x00011a82 beq 0x11b00 | goto label_1;
| }
0x00011a84 ldr r1, [pc, 0x90] |
0x00011a86 movs r2, 4 | r2 = 4;
0x00011a88 mov r0, r4 | r0 = r4;
0x00011a8a add r1, pc | r1 = 0x235a6;
0x00011a8c blx 0x3698 | r0 = fcn_00003698 ();
| if (r0 == 0) {
0x00011a90 cbnz r0, 0x11ace |
0x00011a92 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00011a94 cmp r3, 1 |
| if (r3 > 1) {
0x00011a96 bhi 0x11ace | goto label_2;
| }
0x00011a98 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00011a9a ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00011a9c adds r0, 0x9c | r0 += 0x9c;
| }
| label_2:
0x00011ace mvn r4, 7 | r4 = ~7;
| do {
0x00011ad2 ldr r0, [pc, 0x48] |
0x00011ad4 movs r3, 3 | r3 = 3;
0x00011ad6 add r2, sp, 0x10 | r2 += var_10h_2;
0x00011ad8 movw r1, 0x511 | r1 = 0x511;
0x00011adc str r4, [sp, 0x10] | var_10h_2 = r4;
0x00011ade add r0, pc | r0 = 0x23600;
0x00011ae0 adds r0, 0xb8 | r0 += 0xb8;
0x00011ae2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011ae6 ldr r2, [pc, 0x38] |
0x00011ae8 ldr r3, [pc, 0x24] | r3 = *(0x11b10);
0x00011aea ldr r0, [sp, 0x10] | r0 = var_10h_2;
0x00011aec add r2, pc | r2 = 0x23612;
0x00011aee ldr r3, [r2, r3] | r3 = *(0x23612);
0x00011af0 ldr r2, [r3] | r2 = *(0x23612);
0x00011af2 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x00011af4 eors r2, r3 | r2 ^= r3;
0x00011af6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00011afa bne 0x11b06 | goto label_3;
| }
0x00011afc add sp, 0x1c |
0x00011afe pop {r4, r5, r6, r7, pc} |
| label_1:
0x00011b00 mvn r4, 5 | r4 = ~5;
0x00011b04 b 0x11ad2 |
| } while (1);
| label_3:
0x00011b06 blx 0x348c | fprintf_chk ()
0x00011b0a nop |
| if (r2 >= r3) {
0x00011b0c bhs 0x11b70 | goto label_4;
| }
0x00011b0e movs r1, r0 | r1 = r0;
0x00011b10 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011b12 movs r0, r0 |
0x00011b14 add r6, sp, 0x140 | r6 += var_140h;
0x00011b16 movs r0, r0 |
0x00011b18 add r2, sp, 0x2d8 | r2 += arg_2d8h;
0x00011b1a movs r0, r0 |
0x00011b1c add r5, sp, 0x378 | r5 += arg_378h;
0x00011b1e movs r0, r0 |
| if (r0 != r0) {
0x00011b20 bne 0x11a6c | goto label_0;
| }
0x00011b22 movs r1, r0 | r1 = r0;
| label_4:
0x00011b70 add ip, pc |
0x00011b72 ldr r3, [pc, 0x70] |
0x00011b74 movs r5, 0 | r5 = 0;
0x00011b76 ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00011b7a ldr r3, [r3] | r3 = *(0x11be6);
0x00011b7c str r3, [sp, 4] | *((sp + 4)) = r3;
0x00011b7e mov.w r3, 0 | r3 = 0;
0x00011b82 str r5, [sp] | *(sp) = r5;
0x00011b84 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011b88 ldr r3, [pc, 0x5c] |
0x00011b8a add r3, pc | r3 = 0x23776;
0x00011b8c ldr r0, [r3] | r0 = *(0x23776);
0x00011b8e bl 0x13684 | fcn_00013684 ();
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x00011b92 cbz r4, 0x11ba0 | return void (*0x11ba0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12530 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setAfterPersistenceRead () | void MQTTAsync_setAfterPersistenceRead (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_5;
| int16_t var_4h_5;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00012530 ldr r3, [pc, 0x88] |
0x00012532 push {r4, r5, r6, r7, lr} |
0x00012534 mov r5, r2 | r5 = r2;
0x00012536 ldr r2, [pc, 0x88] |
0x00012538 mov r4, r0 | r4 = r0;
0x0001253a add r3, pc | r3 = 0x24afa;
0x0001253c sub sp, 0xc |
0x0001253e add.w r0, r3, 0x23c | r0 = r3 + 0x23c;
0x00012542 ldr r3, [pc, 0x80] | r3 = *(0x125c6);
0x00012544 add r2, pc | r2 = 0x24b0a;
0x00012546 movs r6, 0 | r6 = 0;
0x00012548 mov r7, r1 | r7 = r1;
0x0001254a mov.w r1, 0x688 | r1 = 0x688;
0x0001254e ldr r3, [r2, r3] |
0x00012550 movs r2, 3 | r2 = 3;
0x00012552 ldr r3, [r3] | r3 = *(0x24b0a);
0x00012554 str r3, [sp, 4] | var_4h_5 = r3;
0x00012556 mov.w r3, 0 | r3 = 0;
0x0001255a str r6, [sp] | *(sp) = r6;
0x0001255c bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00012560 ldr r3, [pc, 0x64] |
0x00012562 add r3, pc | r3 = 0x24b2e;
0x00012564 ldr r0, [r3] | r0 = *(0x24b2e);
0x00012566 bl 0x13684 | fcn_00013684 ();
| if (r4 == 0) {
0x0001256a cbz r4, 0x125ae | goto label_0;
| }
0x0001256c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001256e str.w r5, [r3, 0x8c] | __asm ("str.w r5, [r3, 0x8c]");
0x00012572 str.w r7, [r3, 0x94] | __asm ("str.w r7, [r3, 0x94]");
| do {
0x00012576 ldr r3, [pc, 0x54] |
0x00012578 add r3, pc | r3 = 0x24b4a;
0x0001257a ldr r0, [r3] | r0 = *(0x24b4a);
0x0001257c bl 0x136a8 | fcn_000136a8 ();
0x00012580 ldr r0, [pc, 0x4c] |
0x00012582 movs r3, 3 | r3 = 3;
0x00012584 mov r2, sp | r2 = sp;
0x00012586 movw r1, 0x694 | r1 = 0x694;
0x0001258a add r0, pc |
0x0001258c add.w r0, r0, 0x23c | r0 = 0x24d9a;
0x00012590 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00012594 ldr r2, [pc, 0x3c] |
0x00012596 ldr r3, [pc, 0x2c] | r3 = *(0x125c6);
0x00012598 ldr r0, [sp] | r0 = *(sp);
0x0001259a add r2, pc | r2 = 0x24b72;
0x0001259c ldr r3, [r2, r3] | r3 = *(0x24b72);
0x0001259e ldr r2, [r3] | r2 = *(0x24b72);
0x000125a0 ldr r3, [sp, 4] | r3 = var_4h_5;
0x000125a2 eors r2, r3 | r2 ^= r3;
0x000125a4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000125a8 bne 0x125b6 | goto label_1;
| }
0x000125aa add sp, 0xc |
0x000125ac pop {r4, r5, r6, r7, pc} |
| label_0:
0x000125ae mov.w r3, -1 | r3 = -1;
0x000125b2 str r3, [sp] | *(sp) = r3;
0x000125b4 b 0x12576 |
| } while (1);
| label_1:
0x000125b6 blx 0x348c | fprintf_chk ()
0x000125ba nop |
0x000125bc adr r3, 0x208 | r3 = 0x208;
0x000125be movs r0, r0 |
0x000125c0 stm r7!, {r2, r3, r6} | *(r7!) = r2;
| *((r7! + 4)) = r3;
| *((r7! + 8)) = r6;
0x000125c2 movs r1, r0 | r1 = r0;
0x000125c4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000125c6 movs r0, r0 |
0x000125c8 ldm r4, {r1, r2, r3, r4, r5, r6} | r1 = *(r4);
| r2 = *((r4 + 4));
| r3 = *((r4 + 8));
| r4 = *((r4 + 12));
| r5 = *((r4 + 16));
| r6 = *((r4 + 20));
0x000125ca movs r1, r0 | r1 = r0;
0x000125cc ldm r4!, {r3, r5, r6} | r3 = *(r4!);
| r5 = *((r4! + 4));
| r6 = *((r4! + 8));
0x000125ce movs r1, r0 | r1 = r0;
0x000125d0 adr r3, 0xc8 | r3 = 0xc8;
0x000125d2 movs r0, r0 |
0x000125d4 stm r6!, {r1, r2, r4, r5, r6, r7} | *(r6!) = r1;
| *((r6! + 4)) = r2;
| *((r6! + 8)) = r4;
| *((r6! + 12)) = r5;
| *((r6! + 16)) = r6;
| *((r6! + 20)) = r7;
0x000125d6 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12488 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setBeforePersistenceWrite () | void MQTTAsync_setBeforePersistenceWrite (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_4;
| int16_t var_4h_4;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00012488 ldrblt r4, [r0, 0xb22]! | r4 = *((r0 += 0xb22));
| }
0x0001248c mov r5, r2 | r5 = r2;
0x0001248e ldr r2, [pc, 0x88] |
0x00012490 mov r4, r0 | r4 = r0;
0x00012492 add r3, pc | r3 += pc;
0x00012494 sub sp, 0xc |
0x00012496 add.w r0, r3, 0x218 | r0 = r3 + 0x218;
0x0001249a ldr r3, [pc, 0x80] | r3 = *(0x1251e);
0x0001249c add r2, pc | r2 = 0x249ba;
0x0001249e movs r6, 0 | r6 = 0;
0x000124a0 mov r7, r1 | r7 = r1;
0x000124a2 movw r1, 0x672 | r1 = 0x672;
0x000124a6 ldr r3, [r2, r3] |
0x000124a8 movs r2, 3 | r2 = 3;
0x000124aa ldr r3, [r3] | r3 = *(0x249ba);
0x000124ac str r3, [sp, 4] | var_4h_4 = r3;
0x000124ae mov.w r3, 0 | r3 = 0;
0x000124b2 str r6, [sp] | *(sp) = r6;
0x000124b4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000124b8 ldr r3, [pc, 0x64] |
0x000124ba add r3, pc | r3 = 0x249de;
0x000124bc ldr r0, [r3] | r0 = *(0x249de);
0x000124be bl 0x13684 | fcn_00013684 ();
| if (r4 == 0) {
0x000124c2 cbz r4, 0x12506 | goto label_0;
| }
0x000124c4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000124c6 str.w r5, [r3, 0x88] | __asm ("str.w r5, [r3, 0x88]");
0x000124ca str.w r7, [r3, 0x90] | __asm ("str.w r7, [r3, 0x90]");
| do {
0x000124ce ldr r3, [pc, 0x54] |
0x000124d0 add r3, pc | r3 = 0x249fa;
0x000124d2 ldr r0, [r3] | r0 = *(0x249fa);
0x000124d4 bl 0x136a8 | fcn_000136a8 ();
0x000124d8 ldr r0, [pc, 0x4c] |
0x000124da movs r3, 3 | r3 = 3;
0x000124dc mov r2, sp | r2 = sp;
0x000124de movw r1, 0x67e | r1 = 0x67e;
0x000124e2 add r0, pc |
0x000124e4 add.w r0, r0, 0x218 | r0 = 0x24c26;
0x000124e8 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000124ec ldr r2, [pc, 0x3c] |
0x000124ee ldr r3, [pc, 0x2c] | r3 = *(0x1251e);
0x000124f0 ldr r0, [sp] | r0 = *(sp);
0x000124f2 add r2, pc | r2 = 0x24a22;
0x000124f4 ldr r3, [r2, r3] | r3 = *(0x24a22);
0x000124f6 ldr r2, [r3] | r2 = *(0x24a22);
0x000124f8 ldr r3, [sp, 4] | r3 = var_4h_4;
0x000124fa eors r2, r3 | r2 ^= r3;
0x000124fc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012500 bne 0x1250e | goto label_1;
| }
0x00012502 add sp, 0xc |
0x00012504 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00012506 mov.w r3, -1 | r3 = -1;
0x0001250a str r3, [sp] | *(sp) = r3;
0x0001250c b 0x124ce |
| } while (1);
| label_1:
0x0001250e blx 0x348c | fprintf_chk ()
0x00012512 nop |
0x00012514 adr r4, 0xa8 | r4 = 0xa8;
0x00012516 movs r0, r0 |
0x00012518 stm r7!, {r2, r4, r5, r6, r7} | *(r7!) = r2;
| *((r7! + 4)) = r4;
| *((r7! + 8)) = r5;
| *((r7! + 12)) = r6;
| *((r7! + 16)) = r7;
0x0001251a movs r1, r0 | r1 = r0;
0x0001251c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0001251e movs r0, r0 |
0x00012520 ldm r5, {r1, r2, r5} | r1 = *(r5);
| r2 = *((r5 + 4));
| r5 = *((r5 + 8));
0x00012522 movs r1, r0 | r1 = r0;
0x00012524 ldm r5!, {r4} | r4 = *(r5!);
0x00012526 movs r1, r0 | r1 = r0;
0x00012528 adr r3, 0x368 | r3 = 0x368;
0x0001252a movs r0, r0 |
0x0001252c stm r7!, {r1, r2, r3, r4, r7} | *(r7!) = r1;
| *((r7! + 4)) = r2;
| *((r7! + 8)) = r3;
| *((r7! + 12)) = r4;
| *((r7! + 16)) = r7;
0x0001252e movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x1233c */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setConnected () | void MQTTAsync_setConnected (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x0001233c ldrblt r4, [r0, 0xb23]! | r4 = *((r0 += 0xb23));
| }
0x00012340 mov r6, r2 | r6 = r2;
0x00012342 ldr r2, [pc, 0x8c] |
0x00012344 mov r4, r0 | r4 = r0;
0x00012346 add r3, pc | r3 += pc;
0x00012348 sub sp, 0xc |
0x0001234a add.w r0, r3, 0x1dc | r0 = r3 + 0x1dc;
0x0001234e ldr r3, [pc, 0x84] | r3 = *(0x123d6);
0x00012350 add r2, pc | r2 = 0x24726;
0x00012352 movs r5, 0 | r5 = 0;
0x00012354 mov r7, r1 | r7 = r1;
0x00012356 movw r1, 0x646 | r1 = 0x646;
0x0001235a ldr r3, [r2, r3] |
0x0001235c movs r2, 3 | r2 = 3;
0x0001235e ldr r3, [r3] | r3 = *(0x24726);
0x00012360 str r3, [sp, 4] | var_4h_2 = r3;
0x00012362 mov.w r3, 0 | r3 = 0;
0x00012366 str r5, [sp] | *(sp) = r5;
0x00012368 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0001236c ldr r3, [pc, 0x68] |
0x0001236e add r3, pc | r3 = 0x2474a;
0x00012370 ldr r0, [r3] | r0 = *(0x2474a);
0x00012372 bl 0x13684 | fcn_00013684 ();
| if (r4 != 0) {
0x00012376 cbz r4, 0x12382 |
0x00012378 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001237a ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001237c and r3, r3, 0x3c0 | r3 &= 0x3c0;
| if (r3 == 0) {
0x00012380 cbz r3, 0x123c0 | goto label_0;
| }
| }
0x00012382 mov.w r3, -1 | r3 = -1;
0x00012386 str r3, [sp] | *(sp) = r3;
| do {
0x00012388 ldr r3, [pc, 0x50] |
0x0001238a add r3, pc | r3 = 0x2476a;
0x0001238c ldr r0, [r3] | r0 = *(0x2476a);
0x0001238e bl 0x136a8 | fcn_000136a8 ();
0x00012392 ldr r0, [pc, 0x4c] |
0x00012394 movs r3, 3 | r3 = 3;
0x00012396 mov r2, sp | r2 = sp;
0x00012398 movw r1, 0x652 | r1 = 0x652;
0x0001239c add r0, pc |
0x0001239e add.w r0, r0, 0x1dc | r0 = 0x2495e;
0x000123a2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000123a6 ldr r2, [pc, 0x3c] |
0x000123a8 ldr r3, [pc, 0x28] | r3 = *(0x123d4);
0x000123aa ldr r0, [sp] | r0 = *(sp);
0x000123ac add r2, pc | r2 = 0x24796;
0x000123ae ldr r3, [r2, r3] | r3 = *(0x24796);
0x000123b0 ldr r2, [r3] | r2 = *(0x24796);
0x000123b2 ldr r3, [sp, 4] | r3 = var_4h_2;
0x000123b4 eors r2, r3 | r2 ^= r3;
0x000123b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000123ba bne 0x123c6 | goto label_1;
| }
0x000123bc add sp, 0xc |
0x000123be pop {r4, r5, r6, r7, pc} |
| label_0:
0x000123c0 strd r6, r7, [r4, 0x28] | __asm ("strd r6, r7, [r4, 0x28]");
0x000123c4 b 0x12388 |
| } while (1);
| label_1:
0x000123c6 blx 0x348c | fprintf_chk ()
0x000123ca nop |
0x000123cc adr r5, 0x1d8 | r5 = 0x1d8;
0x000123ce movs r0, r0 |
0x000123d0 ldm r1!, {r6} | r6 = *(r1!);
0x000123d2 movs r1, r0 | r1 = r0;
0x000123d4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000123d6 movs r0, r0 |
0x000123d8 ldm r6, {r1, r4, r5, r6} | r1 = *(r6);
| r4 = *((r6 + 4));
| r5 = *((r6 + 8));
| r6 = *((r6 + 12));
0x000123da movs r1, r0 | r1 = r0;
0x000123dc ldm r6, {r1, r2, r4, r6} | r1 = *(r6);
| r2 = *((r6 + 4));
| r4 = *((r6 + 8));
| r6 = *((r6 + 12));
0x000123de movs r1, r0 | r1 = r0;
0x000123e0 adr r5, 0x80 | r5 = 0x80;
0x000123e2 movs r0, r0 |
0x000123e4 ldm r0!, {r2, r5, r6, r7} | r2 = *(r0!);
| r5 = *((r0! + 4));
| r6 = *((r0! + 8));
| r7 = *((r0! + 12));
0x000123e6 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12088 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setConnectionLostCallback () | void MQTTAsync_setConnectionLostCallback (int16_t arg_a8h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00012088 ldrblt r4, [r0, 0xb23]! | r4 = *((r0 += 0xb23));
| }
0x0001208c mov r6, r2 | r6 = r2;
0x0001208e ldr r2, [pc, 0x8c] |
0x00012090 mov r4, r0 | r4 = r0;
0x00012092 add r3, pc | r3 += pc;
0x00012094 sub sp, 0xc |
0x00012096 add.w r0, r3, 0x150 | r0 = r3 + 0x150;
0x0001209a ldr r3, [pc, 0x84] | r3 = *(0x12122);
0x0001209c add r2, pc | r2 = 0x241be;
0x0001209e movs r5, 0 | r5 = 0;
0x000120a0 mov r7, r1 | r7 = r1;
0x000120a2 movw r1, 0x5ed | r1 = 0x5ed;
0x000120a6 ldr r3, [r2, r3] |
0x000120a8 movs r2, 3 | r2 = 3;
0x000120aa ldr r3, [r3] | r3 = *(0x241be);
0x000120ac str r3, [sp, 4] | var_4h = r3;
0x000120ae mov.w r3, 0 | r3 = 0;
0x000120b2 str r5, [sp] | *(sp) = r5;
0x000120b4 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000120b8 ldr r3, [pc, 0x68] |
0x000120ba add r3, pc | r3 = 0x241e2;
0x000120bc ldr r0, [r3] | r0 = *(0x241e2);
0x000120be bl 0x13684 | fcn_00013684 ();
| if (r4 != 0) {
0x000120c2 cbz r4, 0x120ce |
0x000120c4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000120c6 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000120c8 and r3, r3, 0x3c0 | r3 &= 0x3c0;
| if (r3 == 0) {
0x000120cc cbz r3, 0x1210c | goto label_0;
| }
| }
0x000120ce mov.w r3, -1 | r3 = -1;
0x000120d2 str r3, [sp] | *(sp) = r3;
| do {
0x000120d4 ldr r3, [pc, 0x50] |
0x000120d6 add r3, pc | r3 = 0x24202;
0x000120d8 ldr r0, [r3] | r0 = *(0x24202);
0x000120da bl 0x136a8 | fcn_000136a8 ();
0x000120de ldr r0, [pc, 0x4c] |
0x000120e0 movs r3, 3 | r3 = 3;
0x000120e2 mov r2, sp | r2 = sp;
0x000120e4 movw r1, 0x5f9 | r1 = 0x5f9;
0x000120e8 add r0, pc |
0x000120ea add.w r0, r0, 0x150 | r0 = 0x2436a;
0x000120ee bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000120f2 ldr r2, [pc, 0x3c] |
0x000120f4 ldr r3, [pc, 0x28] | r3 = *(0x12120);
0x000120f6 ldr r0, [sp] | r0 = *(sp);
0x000120f8 add r2, pc | r2 = 0x2422e;
0x000120fa ldr r3, [r2, r3] | r3 = *(0x2422e);
0x000120fc ldr r2, [r3] | r2 = *(0x2422e);
0x000120fe ldr r3, [sp, 4] | r3 = var_4h;
0x00012100 eors r2, r3 | r2 ^= r3;
0x00012102 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012106 bne 0x12112 | goto label_1;
| }
0x00012108 add sp, 0xc |
0x0001210a pop {r4, r5, r6, r7, pc} |
| label_0:
0x0001210c str r7, [r4, 0x1c] | *((r4 + 0x1c)) = r7;
0x0001210e str r6, [r4, 0x10] | *((r4 + 0x10)) = r6;
0x00012110 b 0x120d4 |
| } while (1);
| label_1:
0x00012112 blx 0x348c | fprintf_chk ()
0x00012116 nop |
0x00012118 add r0, sp, 0xa8 | r0 += arg_a8h;
0x0001211a movs r0, r0 |
0x0001211c ldm r3!, {r2, r4, r5, r6, r7} | r2 = *(r3!);
| r4 = *((r3! + 4));
| r5 = *((r3! + 8));
| r6 = *((r3! + 12));
| r7 = *((r3! + 16));
0x0001211e movs r1, r0 | r1 = r0;
0x00012120 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00012122 movs r0, r0 |
| if (r0 != r0) {
0x00012124 bne 0x12174 | void (*0x12174)() ();
| }
0x00012126 movs r1, r0 | r1 = r0;
| if (r1 != r0) {
0x00012128 bne 0x12140 | void (*0x12140)() ();
| }
0x0001212a movs r1, r0 | r1 = r0;
0x0001212c adr r7, 0x350 | r7 = 0x350;
0x0001212e movs r0, r0 |
0x00012130 ldm r3, {r3, r4, r7} | r3 = *(r3);
| r4 = *((r3 + 4));
| r7 = *((r3 + 8));
0x00012132 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x121e4 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setDeliveryCompleteCallback () | void MQTTAsync_setDeliveryCompleteCallback (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000121e4 ldr r3, [pc, 0x8c] |
0x000121e6 push {r4, r5, r6, r7, lr} |
0x000121e8 mov r6, r2 | r6 = r2;
0x000121ea ldr r2, [pc, 0x8c] |
0x000121ec mov r4, r0 | r4 = r0;
0x000121ee add r3, pc | r3 = 0x24466;
0x000121f0 sub sp, 0xc |
0x000121f2 add.w r0, r3, 0x198 | r0 = r3 + 0x198;
0x000121f6 ldr r3, [pc, 0x84] | r3 = *(0x1227e);
0x000121f8 add r2, pc | r2 = 0x24476;
0x000121fa movs r5, 0 | r5 = 0;
0x000121fc mov r7, r1 | r7 = r1;
0x000121fe movw r1, 0x61a | r1 = 0x61a;
0x00012202 ldr r3, [r2, r3] |
0x00012204 movs r2, 3 | r2 = 3;
0x00012206 ldr r3, [r3] | r3 = *(0x24476);
0x00012208 str r3, [sp, 4] | var_4h_2 = r3;
0x0001220a mov.w r3, 0 | r3 = 0;
0x0001220e str r5, [sp] | *(sp) = r5;
0x00012210 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00012214 ldr r3, [pc, 0x68] |
0x00012216 add r3, pc | r3 = 0x2449a;
0x00012218 ldr r0, [r3] | r0 = *(0x2449a);
0x0001221a bl 0x13684 | fcn_00013684 ();
| if (r4 != 0) {
0x0001221e cbz r4, 0x1222a |
0x00012220 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00012222 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00012224 and r3, r3, 0x3c0 | r3 &= 0x3c0;
| if (r3 == 0) {
0x00012228 cbz r3, 0x12268 | goto label_0;
| }
| }
0x0001222a mov.w r3, -1 | r3 = -1;
0x0001222e str r3, [sp] | *(sp) = r3;
| do {
0x00012230 ldr r3, [pc, 0x50] |
0x00012232 add r3, pc | r3 = 0x244ba;
0x00012234 ldr r0, [r3] | r0 = *(0x244ba);
0x00012236 bl 0x136a8 | fcn_000136a8 ();
0x0001223a ldr r0, [pc, 0x4c] |
0x0001223c movs r3, 3 | r3 = 3;
0x0001223e mov r2, sp | r2 = sp;
0x00012240 movw r1, 0x626 | r1 = 0x626;
0x00012244 add r0, pc |
0x00012246 add.w r0, r0, 0x198 | r0 = 0x2466a;
0x0001224a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001224e ldr r2, [pc, 0x3c] |
0x00012250 ldr r3, [pc, 0x28] | r3 = *(0x1227c);
0x00012252 ldr r0, [sp] | r0 = *(sp);
0x00012254 add r2, pc | r2 = 0x244e6;
0x00012256 ldr r3, [r2, r3] | r3 = *(0x244e6);
0x00012258 ldr r2, [r3] | r2 = *(0x244e6);
0x0001225a ldr r3, [sp, 4] | r3 = var_4h_2;
0x0001225c eors r2, r3 | r2 ^= r3;
0x0001225e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00012262 bne 0x1226e | goto label_1;
| }
0x00012264 add sp, 0xc |
0x00012266 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00012268 str r7, [r4, 0x24] | *((r4 + 0x24)) = r7;
0x0001226a str r6, [r4, 0x18] | *((r4 + 0x18)) = r6;
0x0001226c b 0x12230 |
| } while (1);
| label_1:
0x0001226e blx 0x348c | fprintf_chk ()
0x00012272 nop |
0x00012274 adr r6, 0x338 | r6 = 0x338;
0x00012276 movs r0, r0 |
0x00012278 ldm r2!, {r3, r4, r7} | r3 = *(r2!);
| r4 = *((r2! + 4));
| r7 = *((r2! + 8));
0x0001227a movs r1, r0 | r1 = r0;
0x0001227c lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0001227e movs r0, r0 |
0x00012280 ldm r7, {r1, r3, r6, r7} | r1 = *(r7);
| r3 = *((r7 + 4));
| r6 = *((r7 + 8));
| r7 = *((r7 + 12));
0x00012282 movs r1, r0 | r1 = r0;
0x00012284 ldm r7, {r1, r2, r3, r5, r7} | r1 = *(r7);
| r2 = *((r7 + 4));
| r3 = *((r7 + 8));
| r5 = *((r7 + 12));
| r7 = *((r7 + 16));
0x00012286 movs r1, r0 | r1 = r0;
0x00012288 adr r6, 0x1e0 | r6 = 0x1e0;
0x0001228a movs r0, r0 |
0x0001228c ldm r2, {r2, r3, r4, r5} | r2 = *(r2);
| r3 = *((r2 + 4));
| r4 = *((r2 + 8));
| r5 = *((r2 + 12));
0x0001228e movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12290 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setDisconnected () | void MQTTAsync_setDisconnected (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_0h_3;
| int16_t var_4h_3;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00012290 ldrblt r4, [r0, 0xb23]! | r4 = *((r0 += 0xb23));
| }
0x00012294 mov r6, r2 | r6 = r2;
0x00012296 ldr r2, [pc, 0x8c] |
0x00012298 mov r4, r0 | r4 = r0;
0x0001229a add r3, pc | r3 += pc;
0x0001229c sub sp, 0xc |
0x0001229e add.w r0, r3, 0x1c0 | r0 = r3 + 0x1c0;
0x000122a2 ldr r3, [pc, 0x84] | r3 = *(0x1232a);
0x000122a4 add r2, pc | r2 = 0x245ce;
0x000122a6 movs r5, 0 | r5 = 0;
0x000122a8 mov r7, r1 | r7 = r1;
0x000122aa mov.w r1, 0x630 | r1 = 0x630;
0x000122ae ldr r3, [r2, r3] |
0x000122b0 movs r2, 3 | r2 = 3;
0x000122b2 ldr r3, [r3] | r3 = *(0x245ce);
0x000122b4 str r3, [sp, 4] | var_4h_2 = r3;
0x000122b6 mov.w r3, 0 | r3 = 0;
0x000122ba str r5, [sp] | *(sp) = r5;
0x000122bc bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000122c0 ldr r3, [pc, 0x68] |
0x000122c2 add r3, pc | r3 = 0x245f2;
0x000122c4 ldr r0, [r3] | r0 = *(0x245f2);
0x000122c6 bl 0x13684 | fcn_00013684 ();
| if (r4 != 0) {
0x000122ca cbz r4, 0x122d6 |
0x000122cc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000122ce ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000122d0 and r3, r3, 0x3c0 | r3 &= 0x3c0;
| if (r3 == 0) {
0x000122d4 cbz r3, 0x12314 | goto label_0;
| }
| }
0x000122d6 mov.w r3, -1 | r3 = -1;
0x000122da str r3, [sp] | *(sp) = r3;
| do {
0x000122dc ldr r3, [pc, 0x50] |
0x000122de add r3, pc | r3 = 0x24612;
0x000122e0 ldr r0, [r3] | r0 = *(0x24612);
0x000122e2 bl 0x136a8 | fcn_000136a8 ();
0x000122e6 ldr r0, [pc, 0x4c] |
0x000122e8 movs r3, 3 | r3 = 3;
0x000122ea mov r2, sp | r2 = sp;
0x000122ec movw r1, 0x63c | r1 = 0x63c;
0x000122f0 add r0, pc |
0x000122f2 add.w r0, r0, 0x1c0 | r0 = 0x247ea;
0x000122f6 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000122fa ldr r2, [pc, 0x3c] |
0x000122fc ldr r3, [pc, 0x28] | r3 = *(0x12328);
0x000122fe ldr r0, [sp] | r0 = *(sp);
0x00012300 add r2, pc | r2 = 0x2463e;
0x00012302 ldr r3, [r2, r3] | r3 = *(0x2463e);
0x00012304 ldr r2, [r3] | r2 = *(0x2463e);
0x00012306 ldr r3, [sp, 4] | r3 = var_4h_3;
0x00012308 eors r2, r3 | r2 ^= r3;
0x0001230a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001230e bne 0x1231a | goto label_1;
| }
0x00012310 add sp, 0xc |
0x00012312 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00012314 strd r6, r7, [r4, 0x30] | __asm ("strd r6, r7, [r4, 0x30]");
0x00012318 b 0x122dc |
| } while (1);
| label_1:
0x0001231a blx 0x348c | fprintf_chk ()
0x0001231e nop |
0x00012320 adr r6, 0x88 | r6 = 0x88;
0x00012322 movs r0, r0 |
0x00012324 ldm r1!, {r2, r3, r5, r6, r7} | r2 = *(r1!);
| r3 = *((r1! + 4));
| r5 = *((r1! + 8));
| r6 = *((r1! + 12));
| r7 = *((r1! + 16));
0x00012326 movs r1, r0 | r1 = r0;
0x00012328 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0001232a movs r0, r0 |
0x0001232c ldm r7!, {r1, r2, r3, r4} | r1 = *(r7!);
| r2 = *((r7! + 4));
| r3 = *((r7! + 8));
| r4 = *((r7! + 12));
0x0001232e movs r1, r0 | r1 = r0;
0x00012330 ldm r7!, {r1} | r1 = *(r7!);
0x00012332 movs r1, r0 | r1 = r0;
0x00012334 adr r5, 0x330 | r5 = 0x330;
0x00012336 movs r0, r0 |
0x00012338 ldm r1!, {r4, r7} | r4 = *(r1!);
| r7 = *((r1! + 4));
0x0001233a movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x12134 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setMessageArrivedCallback () | void MQTTAsync_setMessageArrivedCallback (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_0h_6;
| int16_t var_4h_6;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00012134 ldrblt r4, [r0, 0xb24]! | r4 = *((r0 += 0xb24));
| }
0x00012138 mov r5, r2 | r5 = r2;
0x0001213a ldr r2, [pc, 0x90] | r2 = *(0x121ce);
0x0001213c mov r4, r0 | r4 = r0;
0x0001213e add r3, pc | r3 += pc;
0x00012140 sub sp, 0xc |
0x00012142 add.w r0, r3, 0x174 | r0 = r3 + 0x174;
0x00012146 ldr r3, [pc, 0x88] |
0x00012148 add r2, pc | r2 += pc;
0x0001214a movs r6, 0 | r6 = 0;
0x0001214c mov r7, r1 | r7 = r1;
0x0001214e movw r1, 0x604 | r1 = 0x604;
0x00012152 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00012154 movs r2, 3 | r2 = 3;
0x00012156 ldr r3, [r3] | r3 = *(0x121d2);
0x00012158 str r3, [sp, 4] | var_4h_6 = r3;
0x0001215a mov.w r3, 0 | r3 = 0;
0x0001215e str r6, [sp] | *(sp) = r6;
0x00012160 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00012164 ldr r3, [pc, 0x6c] |
0x00012166 add r3, pc | r3 = 0x2433e;
0x00012168 ldr r0, [r3] | r0 = *(0x2433e);
0x0001216a bl 0x13684 | fcn_00013684 ();
0x0001216c invalid |
0x00012170 it ne |
| if (r2 != 3) {
0x00012172 cmpne r4, r6 | __asm ("cmpne r4, r6");
| }
| if (r2 != 3) {
0x00012174 beq 0x12180 |
0x00012176 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00012178 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001217a and r3, r3, 0x3c0 | r3 &= 0x3c0;
| if (r3 == 0) {
0x0001217e cbz r3, 0x121be | goto label_0;
| }
| }
0x00012180 mov.w r3, -1 | r3 = -1;
0x00012184 str r3, [sp] | *(sp) = r3;
| do {
0x00012186 ldr r3, [pc, 0x50] |
0x00012188 add r3, pc | r3 = 0x24366;
0x0001218a ldr r0, [r3] | r0 = *(0x24366);
0x0001218c bl 0x136a8 | fcn_000136a8 ();
0x00012190 ldr r0, [pc, 0x48] |
0x00012192 movs r3, 3 | r3 = 3;
0x00012194 mov r2, sp | r2 = sp;
0x00012196 mov.w r1, 0x610 | r1 = 0x610;
0x0001219a add r0, pc |
0x0001219c add.w r0, r0, 0x174 | r0 = 0x244ee;
0x000121a0 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000121a4 ldr r2, [pc, 0x38] |
0x000121a6 ldr r3, [pc, 0x28] | r3 = *(0x121d2);
0x000121a8 ldr r0, [sp] | r0 = *(sp);
0x000121aa add r2, pc | r2 = 0x2438e;
0x000121ac ldr r3, [r2, r3] | r3 = *(0x2438e);
0x000121ae ldr r2, [r3] | r2 = *(0x2438e);
0x000121b0 ldr r3, [sp, 4] | r3 = var_4h;
0x000121b2 eors r2, r3 | r2 ^= r3;
0x000121b4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000121b8 bne 0x121c4 | goto label_1;
| }
0x000121ba add sp, 0xc |
0x000121bc pop {r4, r5, r6, r7, pc} |
| label_0:
0x000121be str r7, [r4, 0x20] | *((r4 + 0x20)) = r7;
0x000121c0 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000121c2 b 0x12186 |
| } while (1);
| label_1:
0x000121c4 blx 0x348c | fprintf_chk ()
0x000121c8 adr r7, 0x1f8 | r7 = 0x1f8;
0x000121ca movs r0, r0 |
0x000121cc ldm r3, {r3, r6} | r3 = *(r3);
| r6 = *((r3 + 4));
0x000121ce movs r1, r0 | r1 = r0;
0x000121d0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000121d2 movs r0, r0 |
| if (r0 == r0) {
0x000121d4 beq 0x122cc | void (*0x122cc)() ();
| }
0x000121d6 movs r1, r0 | r1 = r0;
| if (r1 == r0) {
0x000121d8 beq 0x1228c | void (*0x1228c)() ();
| }
0x000121da movs r1, r0 | r1 = r0;
0x000121dc adr r7, 0x88 | r7 = 0x88;
0x000121de movs r0, r0 |
0x000121e0 ldm r2, {r1, r2, r5, r6, r7} | r1 = *(r2);
| r2 = *((r2 + 4));
| r5 = *((r2 + 8));
| r6 = *((r2 + 12));
| r7 = *((r2 + 16));
0x000121e2 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x123e8 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_setUpdateConnectOptions () | void MQTTAsync_setUpdateConnectOptions (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000123e8 ldr r3, [pc, 0x80] |
0x000123ea push {r4, r5, r6, r7, lr} |
0x000123ec movs r5, r2 | r5 = r2;
0x000123ee ldr r2, [pc, 0] | r2 = *(0x000123f0);
0x000123f0 mov r4, r0 | r4 = r0;
0x000123f2 add r3, pc | r3 = 0x24862;
0x000123f4 sub sp, 0xc |
0x000123f6 add.w r0, r3, 0x1f4 | r0 = r3 + 0x1f4;
0x000123fa ldr r3, [pc, 0x78] |
0x000123fc add r2, pc | r2 += pc;
0x000123fe movs r7, 0 | r7 = 0;
0x00012400 mov r6, r1 | r6 = r1;
0x00012402 movw r1, 0x65c | r1 = 0x65c;
0x00012406 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00012408 movs r2, 3 | r2 = 3;
0x0001240a ldr r3, [r3] | r3 = *(0x12476);
0x0001240c str r3, [sp, 4] | var_4h_3 = r3;
0x0001240e mov.w r3, 0 | r3 = 0;
0x00012412 str r7, [sp] | *(sp) = r7;
0x00012414 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00012418 ldr r3, [pc, 0x5c] |
0x0001241a add r3, pc | r3 = 0x24896;
0x0001241c ldr r0, [r3] | r0 = *(0x24896);
0x0001241e bl 0x13684 | fcn_00013684 ();
| if (r4 == 0) {
0x00012422 cbz r4, 0x12460 | goto label_0;
| }
0x00012424 strd r5, r6, [r4, 0x38] | __asm ("strd r5, r6, [r4, 0x38]");
| do {
0x00012428 ldr r3, [pc, 0x50] |
0x0001242a add r3, pc | r3 = 0x248aa;
0x0001242c ldr r0, [r3] | r0 = *(0x248aa);
0x0001242e bl 0x136a8 | fcn_000136a8 ();
0x00012432 ldr r0, [pc, 0x4c] |
0x00012434 movs r3, 3 | r3 = 3;
0x00012436 mov r2, sp | r2 = sp;
0x00012438 mov.w r1, 0x668 | r1 = 0x668;
0x0001243c add r0, pc |
0x0001243e add.w r0, r0, 0x1f4 | r0 = 0x24ab6;
0x00012442 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00012446 ldr r2, [pc, 0x3c] |
0x00012448 ldr r3, [pc, 0x28] | r3 = *(0x12474);
0x0001244a ldr r0, [sp] | r0 = *(sp);
0x0001244c add r2, pc | r2 = 0x248d6;
0x0001244e ldr r3, [r2, r3] | r3 = *(0x248d6);
0x00012450 ldr r2, [r3] | r2 = *(0x248d6);
0x00012452 ldr r3, [sp, 4] | r3 = var_4h_3;
0x00012454 eors r2, r3 | r2 ^= r3;
0x00012456 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001245a bne 0x12468 | goto label_1;
| }
0x0001245c add sp, 0xc |
0x0001245e pop {r4, r5, r6, r7, pc} |
| label_0:
0x00012460 mov.w r3, -1 | r3 = -1;
0x00012464 str r3, [sp] | *(sp) = r3;
0x00012466 b 0x12428 |
| } while (1);
| label_1:
0x00012468 blx 0x348c | fprintf_chk ()
0x0001246c adr r4, 0x328 | r4 = 0x328;
0x0001246e movs r0, r0 |
0x00012470 ldm r0!, {r2, r4, r7} | r2 = *(r0!);
| r4 = *((r0! + 4));
| r7 = *((r0! + 8));
0x00012472 movs r1, r0 | r1 = r0;
0x00012474 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00012476 movs r0, r0 |
0x00012478 ldm r5!, {r1, r2, r6, r7} | r1 = *(r5!);
| r2 = *((r5! + 4));
| r6 = *((r5! + 8));
| r7 = *((r5! + 12));
0x0001247a movs r1, r0 | r1 = r0;
0x0001247c ldm r5, {r1, r2, r4, r5, r7} | r1 = *(r5);
| r2 = *((r5 + 4));
| r4 = *((r5 + 8));
| r5 = *((r5 + 12));
| r7 = *((r5 + 16));
0x0001247e movs r1, r0 | r1 = r0;
0x00012480 adr r4, 0x200 | r4 = 0x200;
0x00012482 movs r0, r0 |
0x00012484 ldm r0!, {r2, r6} | r2 = *(r0!);
| r6 = *((r0! + 4));
0x00012486 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x111cc */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_subscribeMany () | void MQTTAsync_subscribeMany (int16_t arg_4h, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000111cc svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000111d0 mov r7, r2 | r7 = r2;
0x000111d2 ldr r2, [pc, 0x2f8] |
0x000111d4 mov r8, r3 | r8 = r3;
0x000111d6 mov sb, r0 | sb = r0;
0x000111d8 sub sp, 0x34 |
0x000111da ldr r3, [pc, 0x2f4] | r3 = *(0x114d2);
0x000111dc mov r6, r1 | r6 = r1;
0x000111de ldr r0, [pc, 0x2f4] |
0x000111e0 add r2, pc | r2 = 0x226b2;
0x000111e2 movs r4, 0 | r4 = 0;
0x000111e4 mov.w r1, 0x3c8 | r1 = 0x3c8;
0x000111e8 ldr r3, [r2, r3] |
0x000111ea movs r2, 3 | r2 = 3;
0x000111ec add r0, pc | r0 = 0x226c6;
0x000111ee ldr.w sl, [sp, 0x58] | sl = *(arg_58h);
0x000111f2 adds r0, 0x3c | r0 += 0x3c;
0x000111f4 ldr r3, [r3] | r3 = *(0x226b2);
0x000111f6 str r3, [sp, 0x2c] | var_2ch = r3;
0x000111f8 mov.w r3, 0 | r3 = 0;
0x000111fc str r4, [sp, 0x1c] | var_1ch = r4;
0x000111fe bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011202 cmp.w sb, 0 |
| if (sb == 0) {
0x00011206 beq 0x1124e | goto label_9;
| }
0x00011208 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
| if (r3 == 0) {
0x0001120c cbz r3, 0x1124e | goto label_9;
| }
0x0001120e ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00011210 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x00011212 itt pl |
| if (r3 < r3) {
0x00011214 mvnpl r3, 2 | r3 = ~2;
| }
| if (r3 >= r3) {
0x00011218 str r3, [sp, 0x1c] | var_1ch = r3;
| }
| if (r3 >= r3) {
0x0001121a bpl 0x11254 | goto label_0;
| }
0x0001121c cmp r6, 0 |
0x0001121e itt gt |
| if (r6 <= 0) {
0x00011220 subgt r5, r7, 4 | r5 = r7 - 4;
| }
| if (r6 <= 0) {
0x00011222 subgt fp, r8, 4 |
| }
| if (r6 > 0) {
0x00011226 bgt 0x1123a | goto label_10;
| }
0x00011228 b 0x11284 | goto label_11;
| do {
0x0001122a ldr r3, [fp, 4]! | r3 = *(arg_4h);
0x0001122e cmp r3, 2 |
| if (r3 > 2) {
0x00011230 bhi.w 0x1148a | goto label_12;
| }
0x00011234 adds r4, 1 | r4++;
0x00011236 cmp r6, r4 |
| if (r6 == r4) {
0x00011238 beq 0x11284 | goto label_11;
| }
| label_10:
0x0001123a ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x0001123e bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x00011242 cmp r0, 0 |
0x00011244 bne 0x1122a |
| } while (r0 != 0);
0x00011246 mvn r3, 4 | r3 = ~4;
0x0001124a str r3, [sp, 0x1c] | var_1ch = r3;
0x0001124c b 0x11254 | goto label_0;
| label_9:
0x0001124e mov.w r3, -1 | r3 = -1;
0x00011252 str r3, [sp, 0x1c] | var_1ch = r3;
| do {
| label_0:
0x00011254 ldr r0, [pc, 0x280] |
0x00011256 movs r3, 3 | r3 = 3;
0x00011258 add r2, sp, 0x1c | r2 += var_1ch;
0x0001125a mov.w r1, 0x430 | r1 = 0x430;
0x0001125e add r0, pc | r0 = 0x2273a;
0x00011260 adds r0, 0x3c | r0 += 0x3c;
0x00011262 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011266 ldr r2, [pc, 0x274] |
0x00011268 ldr r3, [pc, 0x264] | r3 = *(0x114d0);
0x0001126a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0001126c add r2, pc | r2 = 0x2274e;
0x0001126e ldr r3, [r2, r3] | r3 = *(0x2274e);
0x00011270 ldr r2, [r3] | r2 = *(0x2274e);
0x00011272 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00011274 eors r2, r3 | r2 ^= r3;
0x00011276 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001127a bne.w 0x114c8 | goto label_13;
| }
0x0001127e add sp, 0x34 |
0x00011280 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00011284 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00011286 cmp r3, 0 |
0x00011288 bne 0x11254 |
| } while (r3 != 0);
0x0001128a mov r0, sb | r0 = sb;
0x0001128c bl 0x177b0 | fcn_000177b0 (r0);
0x00011290 str r0, [sp, 4] | var_4h = r0;
| if (r0 == 0) {
0x00011292 cbz r0, 0x112ca | goto label_14;
| }
0x00011294 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x00011298 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x0001129c cmp r3, 4 |
| if (r3 <= 4) {
0x0001129e ble 0x112d2 | goto label_15;
| }
0x000112a0 cmp r6, 1 |
| if (r6 <= 1) {
0x000112a2 ble.w 0x11492 | goto label_16;
| }
0x000112a6 ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x000112aa cmp r3, r6 |
0x000112ac it ne |
| if (r3 != r6) {
0x000112ae cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != r6) {
0x000112b0 bne 0x112c2 | goto label_1;
| }
| label_5:
0x000112b2 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
| if (r3 == 0) {
0x000112b6 cbz r3, 0x112c2 | goto label_1;
| }
0x000112b8 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000112bc cmp r3, 0 |
| if (r3 == 0) {
0x000112be beq.w 0x114bc | goto label_17;
| }
| do {
| label_1:
0x000112c2 mvn r3, 0xe | r3 = ~0xe;
0x000112c6 str r3, [sp, 0x1c] | var_1ch = r3;
0x000112c8 b 0x11254 | goto label_0;
| label_14:
0x000112ca mvn r3, 9 | r3 = ~9;
0x000112ce str r3, [sp, 0x1c] | var_1ch = r3;
0x000112d0 b 0x11254 | goto label_0;
| label_15:
0x000112d2 cmp.w sl, 0 |
| if (sl == 0) {
0x000112d6 beq 0x112f0 | goto label_6;
| }
0x000112d8 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000112dc cmp r3, 0 |
| if (r3 <= 0) {
0x000112de ble 0x112f0 | goto label_6;
| }
0x000112e0 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000112e4 cmp r3, 0 |
0x000112e6 bne 0x112c2 |
| } while (r3 != 0);
0x000112e8 ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x000112ec cmp r3, 0 |
| if (r3 != 0) {
0x000112ee bne 0x112c2 | goto label_1;
| }
| label_6:
0x000112f0 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000112f2 cmp r5, 0 |
| if (r5 != 0) {
0x000112f4 bne 0x11254 | goto label_0;
| }
0x000112f6 ldr.w fp, [pc, 0x1e8] |
0x000112fa movs r2, 0x60 | r2 = 0x60;
0x000112fc movw r1, 0x3f2 | r1 = 0x3f2;
0x00011300 add fp, pc | fp = 0x227e6;
0x00011302 mov r0, fp | r0 = fp;
0x00011304 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00011308 mov r4, r0 | r4 = r0;
0x0001130a cmp r0, 0 |
| if (r0 == 0) {
0x0001130c beq 0x113bc | goto label_3;
| }
0x0001130e mov r1, r5 | r1 = r5;
0x00011310 movs r2, 0x60 | r2 = 0x60;
0x00011312 blx 0x30d8 | fcn_000030d8 ();
0x00011316 ldr r1, [sp, 4] | r1 = var_4h;
0x00011318 str.w sb, [r4, 0x50] | __asm ("str.w sb, [r4, 0x50]");
0x0001131c str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0001131e cmp.w sl, 0 |
| if (sl != 0) {
0x00011322 beq 0x11352 |
0x00011324 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x00011328 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x0001132c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00011330 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00011332 ldr.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x00011336 cmp r3, 4 |
0x00011338 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x0001133a ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x0001133e str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00011340 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x00011344 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x00011346 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x0001134a str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0001134c str.w r1, [sl, 0x14] | __asm ("str.w r1, [sl, 0x14]");
| if (r3 > 4) {
0x00011350 bgt 0x113c4 | goto label_18;
| }
| }
| label_2:
0x00011352 ldr.w sb, [pc, 0x190] |
0x00011356 lsl.w sl, r6, 2 | sl = r6 << 2;
0x0001135a movs r3, 8 | r3 = 8;
0x0001135c str r6, [r4, 0x34] | *((r4 + 0x34)) = r6;
0x0001135e movw r1, 0x41d | r1 = 0x41d;
0x00011360 asrs r5, r3 | r5 >>= r3;
0x00011362 mov r2, sl | r2 = sl;
0x00011364 add sb, pc | sb = 0x2284e;
0x00011366 str r3, [r4] | *(r4) = r3;
0x00011368 mov r0, sb | r0 = sb;
0x0001136a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001136c mrc2 p6, 3, r4, c7, c2, 2 | __asm ("mrc2 p6, 3, r4, c7, c2, 2");
0x0001136e mov r2, sl | r2 = sl;
0x00011370 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x00011372 movw r1, 0x41e | r1 = 0x41e;
0x00011374 asrs r6, r3 | r6 >>= r3;
0x00011376 mov r0, sb | r0 = sb;
0x00011378 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001137c ldr.w sb, [r4, 0x38] | sb = *((r4 + 0x38));
0x00011380 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x00011382 cmp.w sb, 0 |
0x00011386 it ne |
| if (sb != 0) {
0x00011388 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
| if (sb == 0) {
0x0001138a beq 0x113bc | goto label_3;
| }
0x0001138c cmp r6, 0 |
| if (r6 <= 0) {
0x0001138e ble 0x1147e | goto label_19;
| }
| label_4:
0x00011390 subs r7, 4 | r7 -= 4;
0x00011392 sub.w r8, r8, 4 | r8 -= 4;
0x00011396 b 0x113ac |
| while (r0 != 0) {
0x00011398 ldr r2, [r8, 4]! | r2 = *((r8 += 4));
0x0001139c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0001139e str.w r2, [r3, r5, lsl 2] | __asm ("str.w r2, [r3, r5, lsl 2]");
0x000113a2 adds r5, 1 | r5++;
0x000113a4 cmp r6, r5 |
| if (r6 <= r5) {
0x000113a6 ble 0x1147e | goto label_19;
| }
0x000113a8 ldr.w sb, [r4, 0x38] | sb = *((r4 + 0x38));
0x000113ac ldr r0, [r7, 4]! | r0 = *((r7 += 4));
0x000113b0 bl 0x5274 | fcn_00005274 (r0);
0x000113b4 str.w r0, [sb, r5, lsl 2] | __asm ("str.w r0, [sb, r5, lsl 2]");
0x000113b8 cmp r0, 0 |
0x000113ba bne 0x11398 |
| }
| label_3:
0x000113bc mvn r3, 0x62 | r3 = ~0x62;
0x000113c0 str r3, [sp, 0x1c] | var_1ch = r3;
0x000113c2 b 0x11254 | goto label_0;
| label_18:
0x000113c4 add r0, sp, 8 | r0 += var_8h;
0x000113c6 add.w r1, sl, 0x20 | r1 = sl + 0x20;
0x000113ca str r0, [sp, 4] | var_4h = r0;
0x000113cc add.w sb, sl, 0x30 | sb = sl + 0x30;
0x000113d0 blx 0x351c | SSL_CTX_set_ex_data ();
0x000113d4 ldr r0, [sp, 4] | r0 = var_4h;
0x000113d6 add.w ip, r4, 0x24 |
0x000113da cmp r6, 1 |
0x000113dc add.w lr, r4, 0x40 | lr = r4 + 0x40;
0x000113e0 ldm r0, {r0, r1, r2, r3} | r0 = *(r0);
| r1 = *((r0 + 4));
| r2 = *((r0 + 8));
| r3 = *((r0 + 12));
0x000113e2 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000113e6 ldm.w sb, {r0, r1, r2} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
0x000113ea stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x000113ec movs r7, r0 | r7 = r0;
| if (r7 <= r0) {
0x000113ee ble 0x11352 | goto label_2;
| }
0x000113f0 add.w sb, r6, r6, lsl 1 | sb = r6 + (r6 << 1);
0x000113f4 mov r0, fp | r0 = fp;
0x000113f6 mov.w r1, 0x408 | r1 = 0x408;
0x000113fa lsl.w sb, sb, 2 | sb <<= 2;
0x000113fe mov r2, sb | r2 = sb;
0x00011400 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00011404 mov r3, r0 | r3 = r0;
0x00011406 str r0, [r4, 0x4c] | *((r4 + 0x4c)) = r0;
0x00011408 cmp r0, 0 |
| if (r0 == 0) {
0x0001140a beq 0x113bc | goto label_3;
| }
0x0001140c ldr.w ip, [sl, 0x3c] | ip = *((sl + 0x3c));
0x00011410 cmp.w ip, 0 |
| if (ip != 0) {
0x00011414 bne 0x1149c | goto label_20;
| }
0x00011416 ldr r2, [pc, 0xd0] |
0x00011418 add.w lr, sp, 0x20 | lr += var_20h;
0x0001141a lsrs r0, r4, 0x18 | r0 = r4 >> 0x18;
0x0001141c mov sb, ip | sb = ip;
0x0001141e add r2, pc | r2 = 0x2290c;
0x00011420 adds r2, 0x54 | r2 += 0x54;
0x00011422 ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x00011424 stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x00011428 b 0x1142c |
| while (r6 != ip) {
0x0001142a ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0001142c ldm.w lr, {r0, r1, r2} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| label_8:
0x00011430 add.w ip, ip, 1 |
0x00011434 cmp r6, ip |
0x00011436 add r3, sb | r3 += sb;
0x00011438 add.w sb, sb, 0xc | sb += 0xc;
0x0001143c stm.w r3, {r0, r1, r2} | *(r3) = r0;
| *((r3 + 4)) = r1;
| *((r3 + 8)) = r2;
0x00011440 bne 0x1142a |
| }
| label_7:
0x00011442 ldr.w sb, [pc, 0xa8] |
0x00011446 lsl.w sl, r6, 2 | sl = r6 << 2;
0x0001144a movs r3, 8 | r3 = 8;
0x0001144c movw r1, 0x41d | r1 = 0x41d;
0x00011450 mov r2, sl | r2 = sl;
0x00011452 add sb, pc | sb = 0x22944;
0x00011454 str r3, [r4] | *(r4) = r3;
0x00011456 mov r0, sb | r0 = sb;
0x00011458 str r6, [r4, 0x34] | *((r4 + 0x34)) = r6;
0x0001145a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001145e mov r2, sl | r2 = sl;
0x00011460 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x00011462 movw r1, 0x41e | r1 = 0x41e;
0x00011466 mov r0, sb | r0 = sb;
0x00011468 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001146a ldc2l p8, c15, [r8, 0x350]! | __asm ("ldc2l p8, c15, [r8, 0x350]!");
0x0001146e str r0, [sp, 0xe0] | *((sp + 0xe0)) = r0;
0x00011470 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x00011472 cmp.w sb, 0 |
0x00011476 it ne |
| if (sb == 0) {
0x00011478 cmpne r0, 0 | __asm ("cmpne r0, 0");
| goto label_21;
| }
| if (sb == 0) {
| label_21:
0x0001147a beq 0x113bc | goto label_3;
| }
0x0001147c b 0x11390 | goto label_4;
| label_19:
0x0001147e movs r1, 4 | r1 = 4;
0x00011480 mov r0, r4 | r0 = r4;
0x00011482 bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x00011486 str r0, [sp, 0x1c] | var_1ch = r0;
0x00011488 b 0x11254 | goto label_0;
| label_12:
0x0001148a mvn r3, 8 | r3 = ~8;
0x0001148e str r3, [sp, 0x1c] | var_1ch = r3;
0x00011490 b 0x11254 | goto label_0;
| label_16:
0x00011492 cmp.w sl, 0 |
| if (sl != 0) {
0x00011496 bne.w 0x112b2 | goto label_5;
| }
0x0001149a b 0x112f0 | goto label_6;
| label_20:
0x0001149c ldr.w lr, [sl, 0x40] |
0x000114a0 mov ip, r5 |
0x000114a2 b 0x114a6 |
| while (sb != ip) {
0x000114a4 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x000114a6 add.w r2, lr, ip | r2 = lr + ip;
0x000114aa add r3, ip | r3 += ip;
0x000114ac ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x000114ae add.w ip, ip, 0xc |
0x000114b2 cmp sb, ip |
0x000114b4 stm.w r3, {r0, r1, r2} | *(r3) = r0;
| *((r3 + 4)) = r1;
| *((r3 + 8)) = r2;
0x000114b8 bne 0x114a4 |
| }
0x000114ba b 0x11442 | goto label_7;
| label_17:
0x000114bc ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000114c0 cmp r3, 0 |
| if (r3 != 0) {
0x000114c2 bne.w 0x112c2 | goto label_1;
| }
0x000114c6 b 0x112f0 | goto label_6;
| label_13:
0x000114c8 blx 0x348c | fprintf_chk ()
| if (r3 >= 0) {
0x000114cc bge 0x11430 | goto label_8;
| }
0x000114ce movs r1, r0 | r1 = r0;
0x000114d0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000114d2 movs r0, r0 |
0x000114d4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x114f0 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_subscribe () | void MQTTAsync_subscribe (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000114f0 push {r4, r5, r6, lr} |
0x000114f2 sub sp, 0x18 |
0x000114f4 str r1, [sp, 0xc] | var_ch = r1;
0x000114f6 mov r5, r3 | r5 = r3;
0x000114f8 mov r6, r0 | r6 = r0;
0x000114fa movs r3, 0 | r3 = 0;
0x000114fc ldr r1, [pc, 0x60] |
0x000114fe str r2, [sp, 8] | var_8h = r2;
0x00011500 ldr r2, [pc, 0x60] | r2 = *(0x11564);
0x00011502 ldr r4, [pc, 0x64] |
0x00011504 add r1, pc | r1 = 0x22a68;
0x00011506 ldr r2, [r1, r2] |
0x00011508 mov.w r1, 0x438 | r1 = 0x438;
0x0001150c add r4, pc | r4 = 0x22a7a;
0x0001150e adds r4, 0x60 | r4 += 0x60;
0x00011510 ldr r2, [r2] | r2 = *(0x22a68);
0x00011512 str r2, [sp, 0x14] | var_14h = r2;
0x00011514 mov.w r2, 0 | r2 = 0;
0x00011518 mov r0, r4 | r0 = r4;
0x0001151a movs r2, 3 | r2 = 3;
0x0001151c str r3, [sp, 0x10] | var_10h = r3;
0x0001151e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011522 add r3, sp, 8 | r3 += var_8h;
0x00011524 add r2, sp, 0xc | r2 += var_ch;
0x00011526 movs r1, 1 | r1 = 1;
0x00011528 str r5, [sp] | *(sp) = r5;
0x0001152a mov r0, r6 | r0 = r6;
0x0001152c blx 0x3360 | snprintf_chk ();
0x00011530 movs r3, 3 | r3 = 3;
0x00011532 mov r5, r0 | r5 = r0;
0x00011534 add r2, sp, 0x10 | r2 += var_10h;
0x00011536 mov r0, r4 | r0 = r4;
0x00011538 movw r1, 0x43a | r1 = 0x43a;
0x0001153c str r5, [sp, 0x10] | var_10h = r5;
0x0001153e bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011542 ldr r2, [pc, 0x28] |
0x00011544 ldr r3, [pc, 0x1c] | r3 = *(0x11564);
0x00011546 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00011548 add r2, pc | r2 = 0x22aba;
0x0001154a ldr r3, [r2, r3] | r3 = *(0x22aba);
0x0001154c ldr r2, [r3] | r2 = *(0x22aba);
0x0001154e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00011550 eors r2, r3 | r2 ^= r3;
0x00011552 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00011556 bne 0x1155c |
0x00011558 add sp, 0x18 |
0x0001155a pop {r4, r5, r6, pc} |
| }
0x0001155c blx 0x348c | fprintf_chk ()
0x00011560 bvc 0x1147c | __asm ("bvc aav.0x0001147c");
0x00011562 movs r1, r0 | r1 = r0;
0x00011564 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011566 movs r0, r0 |
| if (r0 == 0) {
0x00011568 cbz r0, 0x115d8 | void (*0x115d8)() ();
| }
0x0001156a movs r0, r0 |
0x0001156c bvc 0x11600 | __asm ("bvc 0x11600");
0x0001156e movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x111cc */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_subscribeMany () | void MQTTAsync_subscribeMany (int16_t arg_4h, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000111cc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000111d0 mov r7, r2 | r7 = r2;
0x000111d2 ldr r2, [pc, 0x2f8] |
0x000111d4 mov r8, r3 | r8 = r3;
0x000111d6 mov sb, r0 | sb = r0;
0x000111d8 sub sp, 0x34 |
0x000111da ldr r3, [pc, 0x2f4] | r3 = *(0x114d2);
0x000111dc mov r6, r1 | r6 = r1;
0x000111de ldr r0, [pc, 0x2f4] |
0x000111e0 add r2, pc | r2 = 0x226b2;
0x000111e2 movs r4, 0 | r4 = 0;
0x000111e4 mov.w r1, 0x3c8 | r1 = 0x3c8;
0x000111e8 ldr r3, [r2, r3] |
0x000111ea movs r2, 3 | r2 = 3;
0x000111ec add r0, pc | r0 = 0x226c6;
0x000111ee ldr.w sl, [sp, 0x58] | sl = *(arg_58h);
0x000111f2 adds r0, 0x3c | r0 += 0x3c;
0x000111f4 ldr r3, [r3] | r3 = *(0x226b2);
0x000111f6 str r3, [sp, 0x2c] | var_2ch = r3;
0x000111f8 mov.w r3, 0 | r3 = 0;
0x000111fc str r4, [sp, 0x1c] | var_1ch = r4;
0x000111fe bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011202 cmp.w sb, 0 |
| if (sb == 0) {
0x00011206 beq 0x1124e | goto label_9;
| }
0x00011208 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
| if (r3 == 0) {
0x0001120c cbz r3, 0x1124e | goto label_9;
| }
0x0001120e ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00011210 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x00011212 itt pl |
| if (r3 < r3) {
0x00011214 mvnpl r3, 2 | r3 = ~2;
| }
| if (r3 >= r3) {
0x00011218 str r3, [sp, 0x1c] | var_1ch = r3;
| }
| if (r3 >= r3) {
0x0001121a bpl 0x11254 | goto label_0;
| }
0x0001121c cmp r6, 0 |
0x0001121e itt gt |
| if (r6 <= 0) {
0x00011220 subgt r5, r7, 4 | r5 = r7 - 4;
| }
| if (r6 <= 0) {
0x00011222 subgt fp, r8, 4 |
| }
| if (r6 > 0) {
0x00011226 bgt 0x1123a | goto label_10;
| }
0x00011228 b 0x11284 | goto label_11;
| do {
0x0001122a ldr r3, [fp, 4]! | r3 = *(arg_4h);
0x0001122e cmp r3, 2 |
| if (r3 > 2) {
0x00011230 bhi.w 0x1148a | goto label_12;
| }
0x00011234 adds r4, 1 | r4++;
0x00011236 cmp r6, r4 |
| if (r6 == r4) {
0x00011238 beq 0x11284 | goto label_11;
| }
| label_10:
0x0001123a ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x0001123e bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x00011242 cmp r0, 0 |
0x00011244 bne 0x1122a |
| } while (r0 != 0);
0x00011246 mvn r3, 4 | r3 = ~4;
0x0001124a str r3, [sp, 0x1c] | var_1ch = r3;
0x0001124c b 0x11254 | goto label_0;
| label_9:
0x0001124e mov.w r3, -1 | r3 = -1;
0x00011252 str r3, [sp, 0x1c] | var_1ch = r3;
| do {
| label_0:
0x00011254 ldr r0, [pc, 0x280] |
0x00011256 movs r3, 3 | r3 = 3;
0x00011258 add r2, sp, 0x1c | r2 += var_1ch;
0x0001125a mov.w r1, 0x430 | r1 = 0x430;
0x0001125e add r0, pc | r0 = 0x2273a;
0x00011260 adds r0, 0x3c | r0 += 0x3c;
0x00011262 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x00011266 ldr r2, [pc, 0x274] |
0x00011268 ldr r3, [pc, 0x264] | r3 = *(0x114d0);
0x0001126a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0001126c add r2, pc | r2 = 0x2274e;
0x0001126e ldr r3, [r2, r3] | r3 = *(0x2274e);
0x00011270 ldr r2, [r3] | r2 = *(0x2274e);
0x00011272 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00011274 eors r2, r3 | r2 ^= r3;
0x00011276 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001127a bne.w 0x114c8 | goto label_13;
| }
0x0001127e add sp, 0x34 |
0x00011280 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00011284 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00011286 cmp r3, 0 |
0x00011288 bne 0x11254 |
| } while (r3 != 0);
0x0001128a mov r0, sb | r0 = sb;
0x0001128c bl 0x177b0 | fcn_000177b0 (r0);
0x00011290 str r0, [sp, 4] | var_4h = r0;
| if (r0 == 0) {
0x00011292 cbz r0, 0x112ca | goto label_14;
| }
0x00011294 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x00011298 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x0001129c cmp r3, 4 |
| if (r3 <= 4) {
0x0001129e ble 0x112d2 | goto label_15;
| }
0x000112a0 cmp r6, 1 |
| if (r6 <= 1) {
0x000112a2 ble.w 0x11492 | goto label_16;
| }
0x000112a6 ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x000112aa cmp r3, r6 |
0x000112ac it ne |
| if (r3 != r6) {
0x000112ae cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != r6) {
0x000112b0 bne 0x112c2 | goto label_1;
| }
| label_5:
0x000112b2 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
| if (r3 == 0) {
0x000112b6 cbz r3, 0x112c2 | goto label_1;
| }
0x000112b8 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000112bc cmp r3, 0 |
| if (r3 == 0) {
0x000112be beq.w 0x114bc | goto label_17;
| }
| do {
| label_1:
0x000112c2 mvn r3, 0xe | r3 = ~0xe;
0x000112c6 str r3, [sp, 0x1c] | var_1ch = r3;
0x000112c8 b 0x11254 | goto label_0;
| label_14:
0x000112ca mvn r3, 9 | r3 = ~9;
0x000112ce str r3, [sp, 0x1c] | var_1ch = r3;
0x000112d0 b 0x11254 | goto label_0;
| label_15:
0x000112d2 cmp.w sl, 0 |
| if (sl == 0) {
0x000112d6 beq 0x112f0 | goto label_6;
| }
0x000112d8 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000112dc cmp r3, 0 |
| if (r3 <= 0) {
0x000112de ble 0x112f0 | goto label_6;
| }
0x000112e0 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000112e4 cmp r3, 0 |
0x000112e6 bne 0x112c2 |
| } while (r3 != 0);
0x000112e8 ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x000112ec cmp r3, 0 |
| if (r3 != 0) {
0x000112ee bne 0x112c2 | goto label_1;
| }
| label_6:
0x000112f0 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000112f2 cmp r5, 0 |
| if (r5 != 0) {
0x000112f4 bne 0x11254 | goto label_0;
| }
0x000112f6 ldr.w fp, [pc, 0x1e8] |
0x000112fa movs r2, 0x60 | r2 = 0x60;
0x000112fc movw r1, 0x3f2 | r1 = 0x3f2;
0x00011300 add fp, pc | fp = 0x227e6;
0x00011302 mov r0, fp | r0 = fp;
0x00011304 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00011308 mov r4, r0 | r4 = r0;
0x0001130a cmp r0, 0 |
| if (r0 == 0) {
0x0001130c beq 0x113bc | goto label_3;
| }
0x0001130e mov r1, r5 | r1 = r5;
0x00011310 movs r2, 0x60 | r2 = 0x60;
0x00011312 blx 0x30d8 | fcn_000030d8 ();
0x00011316 ldr r1, [sp, 4] | r1 = var_4h;
0x00011318 str.w sb, [r4, 0x50] | __asm ("str.w sb, [r4, 0x50]");
0x0001131c str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0001131e cmp.w sl, 0 |
| if (sl != 0) {
0x00011322 beq 0x11352 |
0x00011324 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x00011328 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x0001132c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00011330 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00011332 ldr.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x00011336 cmp r3, 4 |
0x00011338 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x0001133a ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x0001133e str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00011340 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x00011344 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x00011346 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x0001134a str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0001134c str.w r1, [sl, 0x14] | __asm ("str.w r1, [sl, 0x14]");
| if (r3 > 4) {
0x00011350 bgt 0x113c4 | goto label_18;
| }
| }
| label_2:
0x00011352 ldr.w sb, [pc, 0x190] |
0x00011356 lsl.w sl, r6, 2 | sl = r6 << 2;
0x0001135a movs r3, 8 | r3 = 8;
0x0001135c str r6, [r4, 0x34] | *((r4 + 0x34)) = r6;
0x0001135e movw r1, 0x41d | r1 = 0x41d;
0x00011360 asrs r5, r3 | r5 >>= r3;
0x00011362 mov r2, sl | r2 = sl;
0x00011364 add sb, pc | sb = 0x2284e;
0x00011366 str r3, [r4] | *(r4) = r3;
0x00011368 mov r0, sb | r0 = sb;
0x0001136a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001136c mrc2 p6, 3, r4, c7, c2, 2 | __asm ("mrc2 p6, 3, r4, c7, c2, 2");
0x0001136e mov r2, sl | r2 = sl;
0x00011370 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x00011372 movw r1, 0x41e | r1 = 0x41e;
0x00011374 asrs r6, r3 | r6 >>= r3;
0x00011376 mov r0, sb | r0 = sb;
0x00011378 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001137c ldr.w sb, [r4, 0x38] | sb = *((r4 + 0x38));
0x00011380 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x00011382 cmp.w sb, 0 |
0x00011386 it ne |
| if (sb != 0) {
0x00011388 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
| if (sb == 0) {
0x0001138a beq 0x113bc | goto label_3;
| }
0x0001138c cmp r6, 0 |
| if (r6 <= 0) {
0x0001138e ble 0x1147e | goto label_19;
| }
| label_4:
0x00011390 subs r7, 4 | r7 -= 4;
0x00011392 sub.w r8, r8, 4 | r8 -= 4;
0x00011396 b 0x113ac |
| while (r0 != 0) {
0x00011398 ldr r2, [r8, 4]! | r2 = *((r8 += 4));
0x0001139c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0001139e str.w r2, [r3, r5, lsl 2] | __asm ("str.w r2, [r3, r5, lsl 2]");
0x000113a2 adds r5, 1 | r5++;
0x000113a4 cmp r6, r5 |
| if (r6 <= r5) {
0x000113a6 ble 0x1147e | goto label_19;
| }
0x000113a8 ldr.w sb, [r4, 0x38] | sb = *((r4 + 0x38));
0x000113ac ldr r0, [r7, 4]! | r0 = *((r7 += 4));
0x000113b0 bl 0x5274 | fcn_00005274 (r0);
0x000113b4 str.w r0, [sb, r5, lsl 2] | __asm ("str.w r0, [sb, r5, lsl 2]");
0x000113b8 cmp r0, 0 |
0x000113ba bne 0x11398 |
| }
| label_3:
0x000113bc mvn r3, 0x62 | r3 = ~0x62;
0x000113c0 str r3, [sp, 0x1c] | var_1ch = r3;
0x000113c2 b 0x11254 | goto label_0;
| label_18:
0x000113c4 add r0, sp, 8 | r0 += var_8h;
0x000113c6 add.w r1, sl, 0x20 | r1 = sl + 0x20;
0x000113ca str r0, [sp, 4] | var_4h = r0;
0x000113cc add.w sb, sl, 0x30 | sb = sl + 0x30;
0x000113d0 blx 0x351c | SSL_CTX_set_ex_data ();
0x000113d4 ldr r0, [sp, 4] | r0 = var_4h;
0x000113d6 add.w ip, r4, 0x24 |
0x000113da cmp r6, 1 |
0x000113dc add.w lr, r4, 0x40 | lr = r4 + 0x40;
0x000113e0 ldm r0, {r0, r1, r2, r3} | r0 = *(r0);
| r1 = *((r0 + 4));
| r2 = *((r0 + 8));
| r3 = *((r0 + 12));
0x000113e2 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000113e6 ldm.w sb, {r0, r1, r2} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
0x000113ea stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x000113ec movs r7, r0 | r7 = r0;
| if (r7 <= r0) {
0x000113ee ble 0x11352 | goto label_2;
| }
0x000113f0 add.w sb, r6, r6, lsl 1 | sb = r6 + (r6 << 1);
0x000113f4 mov r0, fp | r0 = fp;
0x000113f6 mov.w r1, 0x408 | r1 = 0x408;
0x000113fa lsl.w sb, sb, 2 | sb <<= 2;
0x000113fe mov r2, sb | r2 = sb;
0x00011400 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00011404 mov r3, r0 | r3 = r0;
0x00011406 str r0, [r4, 0x4c] | *((r4 + 0x4c)) = r0;
0x00011408 cmp r0, 0 |
| if (r0 == 0) {
0x0001140a beq 0x113bc | goto label_3;
| }
0x0001140c ldr.w ip, [sl, 0x3c] | ip = *((sl + 0x3c));
0x00011410 cmp.w ip, 0 |
| if (ip != 0) {
0x00011414 bne 0x1149c | goto label_20;
| }
0x00011416 ldr r2, [pc, 0xd0] |
0x00011418 add.w lr, sp, 0x20 | lr += var_20h;
0x0001141a lsrs r0, r4, 0x18 | r0 = r4 >> 0x18;
0x0001141c mov sb, ip | sb = ip;
0x0001141e add r2, pc | r2 = 0x2290c;
0x00011420 adds r2, 0x54 | r2 += 0x54;
0x00011422 ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x00011424 stm.w lr, {r0, r1, r2} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
0x00011428 b 0x1142c |
| while (r6 != ip) {
0x0001142a ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0001142c ldm.w lr, {r0, r1, r2} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| label_8:
0x00011430 add.w ip, ip, 1 |
0x00011434 cmp r6, ip |
0x00011436 add r3, sb | r3 += sb;
0x00011438 add.w sb, sb, 0xc | sb += 0xc;
0x0001143c stm.w r3, {r0, r1, r2} | *(r3) = r0;
| *((r3 + 4)) = r1;
| *((r3 + 8)) = r2;
0x00011440 bne 0x1142a |
| }
| label_7:
0x00011442 ldr.w sb, [pc, 0xa8] |
0x00011446 lsl.w sl, r6, 2 | sl = r6 << 2;
0x0001144a movs r3, 8 | r3 = 8;
0x0001144c movw r1, 0x41d | r1 = 0x41d;
0x00011450 mov r2, sl | r2 = sl;
0x00011452 add sb, pc | sb = 0x22944;
0x00011454 str r3, [r4] | *(r4) = r3;
0x00011456 mov r0, sb | r0 = sb;
0x00011458 str r6, [r4, 0x34] | *((r4 + 0x34)) = r6;
0x0001145a bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001145e mov r2, sl | r2 = sl;
0x00011460 str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x00011462 movw r1, 0x41e | r1 = 0x41e;
0x00011466 mov r0, sb | r0 = sb;
0x00011468 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0001146a ldc2l p8, c15, [r8, 0x350]! | __asm ("ldc2l p8, c15, [r8, 0x350]!");
0x0001146e str r0, [sp, 0xe0] | *((sp + 0xe0)) = r0;
0x00011470 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x00011472 cmp.w sb, 0 |
0x00011476 it ne |
| if (sb == 0) {
0x00011478 cmpne r0, 0 | __asm ("cmpne r0, 0");
| goto label_21;
| }
| if (sb == 0) {
| label_21:
0x0001147a beq 0x113bc | goto label_3;
| }
0x0001147c b 0x11390 | goto label_4;
| label_19:
0x0001147e movs r1, 4 | r1 = 4;
0x00011480 mov r0, r4 | r0 = r4;
0x00011482 bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x00011486 str r0, [sp, 0x1c] | var_1ch = r0;
0x00011488 b 0x11254 | goto label_0;
| label_12:
0x0001148a mvn r3, 8 | r3 = ~8;
0x0001148e str r3, [sp, 0x1c] | var_1ch = r3;
0x00011490 b 0x11254 | goto label_0;
| label_16:
0x00011492 cmp.w sl, 0 |
| if (sl != 0) {
0x00011496 bne.w 0x112b2 | goto label_5;
| }
0x0001149a b 0x112f0 | goto label_6;
| label_20:
0x0001149c ldr.w lr, [sl, 0x40] |
0x000114a0 mov ip, r5 |
0x000114a2 b 0x114a6 |
| while (sb != ip) {
0x000114a4 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x000114a6 add.w r2, lr, ip | r2 = lr + ip;
0x000114aa add r3, ip | r3 += ip;
0x000114ac ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x000114ae add.w ip, ip, 0xc |
0x000114b2 cmp sb, ip |
0x000114b4 stm.w r3, {r0, r1, r2} | *(r3) = r0;
| *((r3 + 4)) = r1;
| *((r3 + 8)) = r2;
0x000114b8 bne 0x114a4 |
| }
0x000114ba b 0x11442 | goto label_7;
| label_17:
0x000114bc ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000114c0 cmp r3, 0 |
| if (r3 != 0) {
0x000114c2 bne.w 0x112c2 | goto label_1;
| }
0x000114c6 b 0x112f0 | goto label_6;
| label_13:
0x000114c8 blx 0x348c | fprintf_chk ()
| if (r3 >= 0) {
0x000114cc bge 0x11430 | goto label_8;
| }
0x000114ce movs r1, r0 | r1 = r0;
0x000114d0 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000114d2 movs r0, r0 |
0x000114d4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x11570 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_unsubscribeMany () | void MQTTAsync_unsubscribeMany (int16_t arg_80h, int16_t arg_200h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_8h;
| int16_t var_0h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00011570 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00011574 mov r7, r2 | r7 = r2;
0x00011576 ldr r2, [pc, 0x1c4] |
0x00011578 mov sb, r3 | sb = r3;
0x0001157a mov r8, r0 | r8 = r0;
0x0001157c sub sp, 0x18 |
0x0001157e ldr r3, [pc, 0x1c0] | r3 = *(0x11742);
0x00011580 movs r4, 0 | r4 = 0;
0x00011582 ldr r0, [pc, 0x1c0] |
0x00011584 add r2, pc | r2 = 0x22cc6;
0x00011586 mov r5, r1 | r5 = r1;
0x00011588 movw r1, 0x447 | r1 = 0x447;
0x0001158c ldr r3, [r2, r3] |
0x0001158e movs r2, 3 | r2 = 3;
0x00011590 add r0, pc | r0 = 0x22cda;
0x00011592 adds r0, 0x74 | r0 += 0x74;
0x00011594 ldr r3, [r3] | r3 = *(0x22cc6);
0x00011596 str r3, [sp, 0x14] | var_14h = r3;
0x00011598 mov.w r3, 0 | r3 = 0;
0x0001159c str r4, [sp, 0x10] | var_10h = r4;
0x0001159e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000115a2 cmp.w r8, 0 |
| if (r8 == 0) {
0x000115a6 beq 0x115e0 | goto label_5;
| }
0x000115a8 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
| if (r3 == 0) {
0x000115ac cbz r3, 0x115e0 | goto label_5;
| }
0x000115ae ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000115b0 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x000115b2 itt pl |
| if (r3 < r3) {
0x000115b4 mvnpl r3, 2 | r3 = ~2;
| }
| if (r3 >= r3) {
0x000115b8 str r3, [sp, 0x10] | var_10h = r3;
| }
| if (r3 >= r3) {
0x000115ba bpl 0x115e6 | goto label_0;
| }
0x000115bc cmp r5, 0 |
0x000115be it gt |
| if (r5 <= 0) {
0x000115c0 subgt r6, r7, 4 | r6 = r7 - 4;
| }
| if (r5 > 0) {
0x000115c2 bgt 0x115cc | goto label_6;
| }
0x000115c4 b 0x11616 | goto label_7;
| do {
0x000115c6 adds r4, 1 | r4++;
0x000115c8 cmp r5, r4 |
| if (r5 == r4) {
0x000115ca beq 0x11616 | goto label_7;
| }
| label_6:
0x000115cc ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x000115d0 bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x000115d4 cmp r0, 0 |
0x000115d6 bne 0x115c6 |
| } while (r0 != 0);
0x000115d8 mvn r3, 4 | r3 = ~4;
0x000115dc str r3, [sp, 0x10] | var_10h = r3;
0x000115de b 0x115e6 | goto label_0;
| label_5:
0x000115e0 mov.w r3, -1 | r3 = -1;
0x000115e4 str r3, [sp, 0x10] | var_10h = r3;
| do {
| label_0:
0x000115e6 ldr r0, [pc, 0x160] |
0x000115e8 movs r3, 3 | r3 = 3;
0x000115ea add r2, sp, 0x10 | r2 += var_10h;
0x000115ec mov.w r1, 0x488 | r1 = 0x488;
0x000115f0 add r0, pc | r0 = 0x22d3e;
0x000115f2 adds r0, 0x74 | r0 += 0x74;
0x000115f4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000115f8 ldr r2, [pc, 0x150] |
0x000115fa ldr r3, [pc, 0x144] | r3 = *(0x11742);
0x000115fc ldr r0, [sp, 0x10] | r0 = var_10h;
0x000115fe add r2, pc | r2 = 0x22d4e;
0x00011600 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00011602 ldr r2, [r3] | r2 = *(r3);
0x00011604 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00011606 eors r2, r3 | r2 ^= r3;
0x00011608 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001160c bne.w 0x11736 | goto label_8;
| }
0x00011610 add sp, 0x18 |
0x00011612 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_7:
0x00011616 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00011618 cmp r3, 0 |
0x0001161a bne 0x115e6 |
| } while (r3 != 0);
0x0001161c mov r0, r8 | r0 = r8;
0x0001161e bl 0x177b0 | r0 = fcn_000177b0 (r0);
0x00011622 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00011624 cbz r0, 0x11652 |
0x00011626 cmp.w sb, 0 |
| if (sb == 0) {
0x0001162a beq 0x1165e | goto label_3;
| }
0x0001162c ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00011630 ldr.w r2, [r3, 0x9c] | r2 = *((r3 + 0x9c));
0x00011634 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00011638 cmp r2, 4 |
| if (r2 <= 4) {
0x0001163a ble 0x1165a | goto label_9;
| }
| if (r3 != 0) {
0x0001163c cbz r3, 0x1164a |
0x0001163e ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
| if (r3 != 0) {
0x00011642 cbnz r3, 0x1164a | goto label_2;
| }
0x00011644 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
| if (r3 == 0) {
0x00011648 cbz r3, 0x1165e | goto label_3;
| }
| }
| label_2:
0x0001164a mvn r3, 0xe | r3 = ~0xe;
0x0001164e str r3, [sp, 0x10] | var_10h = r3;
0x00011650 b 0x115e6 | goto label_0;
| }
0x00011652 mvn r3, 9 | r3 = ~9;
0x00011656 str r3, [sp, 0x10] | var_10h = r3;
0x00011658 b 0x115e6 | goto label_0;
| label_9:
0x0001165a cmp r3, 0 |
| if (r3 > 0) {
0x0001165c bgt 0x11724 | goto label_10;
| }
| label_3:
0x0001165e ldr r4, [sp, 0x10] | r4 = var_10h;
0x00011660 cmp r4, 0 |
| if (r4 != 0) {
0x00011662 bne 0x115e6 | goto label_0;
| }
0x00011664 ldr r0, [pc, 0xe8] |
0x00011666 movs r2, 0x60 | r2 = 0x60;
0x00011668 movw r1, 0x469 | r1 = 0x469;
0x0001166c add r0, pc | r0 = 0x22dc0;
0x0001166e bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00011672 mov r6, r0 | r6 = r0;
| label_4:
0x00011674 cmp r0, 0 |
| if (r0 == 0) {
0x00011676 beq 0x11702 | goto label_11;
| }
0x00011678 movs r2, 0x5c | r2 = 0x5c;
0x0001167a mov r1, r4 | r1 = r4;
0x0001167c adds r0, 4 | r0 += 4;
0x0001167e blx 0x30d8 | fcn_000030d8 ();
0x00011682 movs r3, 0xa | r3 = 0xa;
0x00011684 str.w r8, [r6, 0x50] | __asm ("str.w r8, [r6, 0x50]");
0x00011688 str.w sl, [r6, 0x14] | __asm ("str.w sl, [r6, 0x14]");
0x0001168c str r3, [r6] | *(r6) = r3;
0x0001168e cmp.w sb, 0 |
| if (sb != 0) {
0x00011692 beq 0x116c2 |
0x00011694 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00011698 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0001169c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x000116a0 str r2, [r6, 4] | *((r6 + 4)) = r2;
0x000116a2 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x000116a6 cmp r3, 4 |
0x000116a8 str r2, [r6, 8] | *((r6 + 8)) = r2;
0x000116aa ldr.w r2, [sb, 0x18] | r2 = *((sb + 0x18));
0x000116ae str r2, [r6, 0xc] | *((r6 + 0xc)) = r2;
0x000116b0 ldr.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x000116b4 str r2, [r6, 0x10] | *((r6 + 0x10)) = r2;
0x000116b6 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x000116ba str r2, [r6, 0x18] | *((r6 + 0x18)) = r2;
0x000116bc str.w sl, [sb, 0x14] | __asm ("str.w sl, [sb, 0x14]");
| if (r3 > 4) {
0x000116c0 bgt 0x1170a | goto label_12;
| }
| }
| label_1:
0x000116c2 ldr r0, [pc, 0x90] |
0x000116c4 lsls r2, r5, 2 | r2 = r5 << 2;
0x000116c6 movw r1, 0x47e | r1 = 0x47e;
0x000116ca str r5, [r6, 0x34] | *((r6 + 0x34)) = r5;
0x000116cc add r0, pc | r0 = 0x22e26;
0x000116ce bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000116d2 mov r8, r0 | r8 = r0;
0x000116d4 str r0, [r6, 0x38] | *((r6 + 0x38)) = r0;
| if (r0 == 0) {
0x000116d6 cbz r0, 0x11702 | goto label_11;
| }
0x000116d8 cmp r5, 0 |
| if (r5 <= 0) {
0x000116da ble 0x116f6 | goto label_13;
| }
0x000116dc subs r7, 4 | r7 -= 4;
0x000116de b 0x116e4 |
| while (r5 != r4) {
0x000116e0 ldr.w r8, [r6, 0x38] | r8 = *((r6 + 0x38));
0x000116e4 ldr r0, [r7, 4]! | r0 = *((r7 += 4));
0x000116e8 bl 0x5274 | fcn_00005274 (r0);
0x000116ec str.w r0, [r8, r4, lsl 2] | __asm ("str.w r0, [r8, r4, lsl 2]");
0x000116f0 adds r4, 1 | r4++;
0x000116f2 cmp r5, r4 |
0x000116f4 bne 0x116e0 |
| }
| label_13:
0x000116f6 movs r1, 4 | r1 = 4;
0x000116f8 mov r0, r6 | r0 = r6;
0x000116fa bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x000116fe str r0, [sp, 0x10] | var_10h = r0;
0x00011700 b 0x115e6 | goto label_0;
| label_11:
0x00011702 mvn r3, 0x62 | r3 = ~0x62;
0x00011706 str r3, [sp, 0x10] | var_10h = r3;
0x00011708 b 0x115e6 | goto label_0;
| label_12:
0x0001170a mov r8, sp | r8 = sp;
0x0001170c add.w r1, sb, 0x20 | r1 = sb + 0x20;
0x00011710 mov r0, r8 | r0 = r8;
0x00011712 blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x00011716 ldm.w r8, {r0, r1, r2, r3} | r0 = *(r8);
| r1 = *((r8 + 4));
| r2 = *((r8 + 8));
| r3 = *((r8 + 12));
0x0001171a add.w ip, r6, 0x24 |
0x0001171e stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00011722 b 0x116c2 | goto label_1;
| label_10:
0x00011724 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00011728 cmp r3, 0 |
| if (r3 != 0) {
0x0001172a bne 0x1164a | goto label_2;
| }
0x0001172c ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00011730 cmp r3, 0 |
| if (r3 != 0) {
0x00011732 bne 0x1164a | goto label_2;
| }
0x00011734 b 0x1165e | goto label_3;
| label_8:
0x00011736 blx 0x348c | fprintf_chk ()
0x0001173a nop |
0x0001173c bvc 0x11758 | __asm ("bvc sym.MQTTAsync_unsubscribe");
0x0001173e movs r1, r0 | r1 = r0;
0x00011740 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011742 movs r0, r0 |
| if (r4 == 0) {
0x00011744 cbz r4, 0x11792 | void (*0x11792)() ();
| }
0x00011746 movs r0, r0 |
0x00011748 uxtb r4, r1 | r4 = (int8_t) r1;
0x0001174a movs r0, r0 |
0x0001174c bvs 0x11674 | __asm ("bvs 0x11674");
| goto label_4;
0x0001174e movs r1, r0 | r1 = r0;
0x00011750 add r5, sp, 0x200 | r5 += arg_200h;
0x00011752 movs r0, r0 |
0x00011754 add r5, sp, 0x80 | r5 += arg_80h;
0x00011756 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x11758 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_unsubscribe () | void MQTTAsync_unsubscribe (int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_280h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_0h;
| int16_t var_18h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00011758 push {r4, r5, r6, lr} |
0x0001175a mov r5, r0 | r5 = r0;
0x0001175c sub sp, 0x10 |
0x0001175e ldr r0, [pc, 0x64] |
0x00011760 movs r3, 0 | r3 = 0;
0x00011762 mov r6, r2 | r6 = r2;
0x00011764 str r1, [sp, 4] | var_4h = r1;
0x00011766 movs r2, 3 | r2 = 3;
0x00011768 ldr r1, [pc, 0x5c] | r1 = *(0x117c8);
0x0001176a add r0, pc | r0 = 0x22f34;
0x0001176c ldr r4, [pc, 0x5c] |
0x0001176e ldr r1, [r0, r1] |
0x00011770 add r4, pc | r4 = 0x22f40;
0x00011772 adds r4, 0x90 | r4 += 0x90;
0x00011774 ldr r1, [r1] | r1 = *(0x22f34);
0x00011776 str r1, [sp, 0xc] | var_ch = r1;
0x00011778 mov.w r1, 0 | r1 = 0;
0x0001177c mov r0, r4 | r0 = r4;
0x0001177e mov.w r1, 0x490 | r1 = 0x490;
0x00011782 str r3, [sp, 8] | var_8h = r3;
0x00011784 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x00011788 mov r3, r6 | r3 = r6;
0x0001178a add r2, sp, 4 | r2 += var_4h;
0x0001178c movs r1, 1 | r1 = 1;
0x0001178e mov r0, r5 | r0 = r5;
0x00011790 invalid |
0x00011792 cdp p3, 2, c2, c14, c3, 0 | __asm ("cdp p3, 2, c2, c14, c3, 0");
0x00011796 mov r5, r0 | r5 = r0;
0x00011798 add r2, sp, 8 | r2 += var_8h;
0x0001179a mov r0, r4 | r0 = r4;
| do {
0x0001179c movw r1, 0x492 | r1 = 0x492;
0x000117a0 str r5, [sp, 8] | var_8h = r5;
0x000117a2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000117a6 ldr r2, [pc, 0x28] |
0x000117a8 ldr r3, [pc, 0x1c] | r3 = *(0x117c8);
0x000117aa ldr r0, [sp, 8] | r0 = var_8h;
0x000117ac add r2, pc | r2 = 0x22f82;
0x000117ae ldr r3, [r2, r3] | r3 = *(0x22f82);
0x000117b0 ldr r2, [r3] | r2 = *(0x22f82);
0x000117b2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000117b4 eors r2, r3 | r2 ^= r3;
0x000117b6 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000117ba bne 0x117c0 |
0x000117bc add sp, 0x10 |
0x000117be pop {r4, r5, r6, pc} |
| }
0x000117c0 blx 0x348c | fprintf_chk ()
| if (r2 >= r3) {
0x000117c4 bpl 0x11814 | goto label_8;
| }
0x000117c6 movs r1, r0 | r1 = r0;
0x000117c8 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x000117ca movs r0, r0 |
| if (r4 == 0) {
0x000117cc cbz r4, 0x117e2 | goto label_9;
| }
0x000117ce movs r0, r0 |
0x000117d0 bmi 0x1179c |
| } while (r0 < r0);
0x000117d2 movs r1, r0 | r1 = r0;
| label_9:
0x000117e2 ldr r3, [pc, 0x250] |
0x000117e4 mov r5, r1 | r5 = r1;
0x000117e6 add r2, pc | r2 += pc;
0x000117e8 ldr r0, [pc, 0x24c] |
0x000117ea movw r1, 0x49f | r1 = 0x49f;
0x000117ec sbcs r7, r3 | __asm ("sbcs r7, r3");
0x000117ee ldr.w r8, [sp, 0x48] | r8 = *(arg_48h);
0x000117f2 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000117f4 movs r2, 0 | r2 = 0;
0x000117f6 add r0, pc | r0 = 0x23232;
0x000117f8 adds r0, 0xa8 | r0 += 0xa8;
0x000117fa ldr r3, [r3] | r3 = *(0x11a36);
0x000117fc str r3, [sp, 0x14] | var_14h = r3;
0x000117fe mov.w r3, 0 | r3 = 0;
0x00011802 str r2, [sp, 0x10] | var_10h = r2;
0x00011804 movs r2, 3 | r2 = 3;
0x00011806 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
| if (r4 != 0) {
0x0001180a cbz r4, 0x11846 |
0x0001180c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x0001180e cbz r3, 0x11846 |
0x00011810 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00011812 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
| label_8:
0x00011814 bmi 0x11832 |
0x00011816 ldr.w r3, [r4, 0xf0] | r3 = *((r4 + 0xf0));
0x0001181a cmp r3, 0 |
| if (r3 == 0) {
0x0001181c beq.w 0x11984 | goto label_10;
| }
0x00011820 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00011822 cmp r2, 0 |
| if (r2 == 0) {
0x00011824 beq.w 0x11984 | goto label_10;
| }
0x00011828 ldr.w r2, [r4, 0xf4] | r2 = *((r4 + 0xf4));
0x0001182c cmp r2, 0 |
| if (r2 == 0) {
0x0001182e beq.w 0x11976 | goto label_11;
| }
| }
| label_1:
0x00011832 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x00011834 cbnz r3, 0x1184c | goto label_0;
| }
0x00011836 mov r0, r5 | r0 = r5;
0x00011838 bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
| if (r0 != 0) {
0x0001183c cbnz r0, 0x1187c | goto label_12;
| }
0x0001183e mvn r3, 4 | r3 = ~4;
0x00011842 str r3, [sp, 0x10] | var_10h = r3;
0x00011844 b 0x1184c |
| }
| } else {
0x00011846 mov.w r3, -1 | r3 = -1;
0x0001184a str r3, [sp, 0x10] | var_10h = r3;
| }
| do {
| label_0:
0x0001184c ldr r0, [pc, 0x1ec] |
0x0001184e movs r3, 3 | r3 = 3;
0x00011850 add r2, sp, 0x10 | r2 += var_10h;
0x00011852 movw r1, 0x4f3 | r1 = 0x4f3;
0x00011856 add r0, pc | r0 = 0x23296;
0x00011858 adds r0, 0xa8 | r0 += 0xa8;
0x0001185a bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0001185e ldr r2, [pc, 0x1e0] |
0x00011860 ldr r3, [pc, 0x1d0] | r3 = *(0x11a34);
0x00011862 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00011864 add r2, pc | r2 = 0x232aa;
0x00011866 ldr r3, [r2, r3] | r3 = *(0x232aa);
0x00011868 ldr r2, [r3] | r2 = *(0x232aa);
0x0001186a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001186c eors r2, r3 | r2 ^= r3;
0x0001186e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00011872 bne.w 0x11a2c | goto label_13;
| }
0x00011876 add sp, 0x1c |
0x00011878 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x0001187c ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x0001187e cmp r3, 2 |
0x00011880 itt hi |
| if (r3 <= 2) {
0x00011882 mvnhi r3, 8 | r3 = ~8;
| }
| if (r3 > 2) {
0x00011886 str r3, [sp, 0x10] | var_10h = r3;
| }
0x00011888 bhi 0x1184c |
| } while (r3 > 2);
0x0001188a ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x0001188c ldr.w fp, [sp, 0x40] | fp = *(arg_40h);
0x00011890 cmp r3, 0 |
| if (r3 != 0) {
0x00011892 bne.w 0x119d2 | goto label_14;
| }
| label_4:
0x00011896 ldr.w r3, [r4, 0xf0] | r3 = *((r4 + 0xf0));
| if (r3 != 0) {
0x0001189a cbz r3, 0x118ac |
0x0001189c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0001189e cmp r2, 1 |
| if (r2 <= 1) {
0x000118a0 ble.w 0x119b6 | goto label_15;
| }
0x000118a4 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000118a6 cmp r3, 0 |
| if (r3 == 0) {
0x000118a8 beq.w 0x119b6 | goto label_15;
| }
| }
| label_3:
0x000118ac cmp.w r8, 0 |
| if (r8 != 0) {
0x000118b0 beq 0x118d4 |
0x000118b2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000118b4 ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x000118b8 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x000118bc cmp r3, 4 |
| if (r3 <= 4) {
0x000118be ble 0x119a2 | goto label_16;
| }
0x000118c0 cmp r2, 0 |
| if (r2 == 0) {
0x000118c2 beq 0x119ae | goto label_6;
| }
0x000118c4 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x000118c8 cmp r3, 0 |
| if (r3 != 0) {
0x000118ca bne 0x119ae | goto label_6;
| }
0x000118cc ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x000118d0 cmp r3, 0 |
| if (r3 != 0) {
0x000118d2 bne 0x119ae | goto label_6;
| }
| }
| label_2:
0x000118d4 ldr.w sl, [sp, 0x10] | sl = var_10h;
0x000118d8 cmp.w sl, 0 |
| if (sl != 0) {
0x000118dc bne 0x1184c | goto label_0;
| }
0x000118de ldr r0, [pc, 0x164] |
0x000118e0 movs r2, 0x60 | r2 = 0x60;
0x000118e2 movw r1, 0x4cb | r1 = 0x4cb;
0x000118e6 add r0, pc | r0 = 0x23330;
0x000118e8 bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000118ec mov r7, r0 | r7 = r0;
0x000118ee cmp r0, 0 |
| if (r0 == 0) {
0x000118f0 beq 0x1199a | goto label_17;
| }
0x000118f2 mov r1, sl | r1 = sl;
0x000118f4 movs r2, 0x5c | r2 = 0x5c;
0x000118f6 adds r0, 4 | r0 += 4;
0x000118f8 blx 0x30d8 | fcn_000030d8 ();
0x000118fc movs r3, 3 | r3 = 3;
0x000118fe str r4, [r7, 0x50] | *((r7 + 0x50)) = r4;
0x00011900 str.w fp, [r7, 0x14] | __asm ("str.w fp, [r7, 0x14]");
0x00011904 str r3, [r7] | *(r7) = r3;
0x00011906 cmp.w r8, 0 |
| if (r8 != 0) {
0x0001190a beq 0x11938 |
0x0001190c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001190e ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x00011912 ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x00011916 str r2, [r7, 4] | *((r7 + 4)) = r2;
0x00011918 ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x0001191c cmp r3, 4 |
0x0001191e str r2, [r7, 8] | *((r7 + 8)) = r2;
0x00011920 ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x00011924 str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x00011926 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x0001192a str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x0001192c ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00011930 str r2, [r7, 0x18] | *((r7 + 0x18)) = r2;
0x00011932 str.w fp, [r8, 0x14] | __asm ("str.w fp, [r8, 0x14]");
| if (r3 > 4) {
0x00011936 bgt 0x119e8 | goto label_18;
| }
| }
| label_5:
0x00011938 mov r0, r5 | r0 = r5;
0x0001193a bl 0x5274 | fcn_00005274 (r0);
0x0001193e str r0, [r7, 0x34] | *((r7 + 0x34)) = r0;
| if (r0 == 0) {
0x00011940 cbz r0, 0x1198c | goto label_19;
| }
0x00011942 ldr r4, [pc, 0x104] |
0x00011944 mov r2, r6 | r2 = r6;
0x00011946 movw r1, 0x4e6 | r1 = 0x4e6;
0x0001194a str r6, [r7, 0x38] | *((r7 + 0x38)) = r6;
0x0001194c add r4, pc | r4 = 0x2339a;
0x0001194e mov r0, r4 | r0 = r4;
0x00011950 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x00011954 str r0, [r7, 0x3c] | *((r7 + 0x3c)) = r0;
0x00011956 cmp r0, 0 |
| if (r0 == 0) {
0x00011958 beq 0x11a02 | goto label_20;
| }
0x0001195a mov r2, r6 | r2 = r6;
0x0001195c mov r1, sb | r1 = sb;
0x0001195e blx 0x32a0 | pthread_cond_signal ();
0x00011962 ldr r3, [sp, 0x40] | r3 = *(arg_40h);
0x00011964 movs r1, 4 | r1 = 4;
0x00011966 mov r0, r7 | r0 = r7;
0x00011968 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x0001196a ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x0001196c str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x0001196e bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x00011970 vld1.8 {d9[0]}, [pc], r4 | __asm ("vld1.8 {d9[0]}, [pc], r4");
0x00011974 b 0x1184c | goto label_0;
| label_11:
0x00011976 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00011978 cmp r2, 1 |
| if (r2 <= 1) {
0x0001197a ble 0x11984 | goto label_10;
| }
0x0001197c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0001197e cmp r3, 0 |
| if (r3 != 0) {
0x00011980 bne.w 0x11832 | goto label_1;
| }
| label_10:
0x00011984 mvn r3, 2 | r3 = ~2;
| label_7:
0x00011988 str r3, [sp, 0x10] | var_10h = r3;
0x0001198a b 0x1184c | goto label_0;
| label_19:
0x0001198c ldr r0, [pc, 0xbc] |
0x0001198e mov r2, r7 | r2 = r7;
0x00011990 movw r1, 0x4e1 | r1 = 0x4e1;
0x00011994 add r0, pc | r0 = 0x233e4;
0x00011996 bl 0x10194 | fcn_00010194 (r0, r1, r2);
| label_17:
0x0001199a mvn r3, 0x62 | r3 = ~0x62;
0x0001199e str r3, [sp, 0x10] | var_10h = r3;
0x000119a0 b 0x1184c | goto label_0;
| label_16:
0x000119a2 cmp r2, 0 |
| if (r2 <= 0) {
0x000119a4 ble 0x118d4 | goto label_2;
| }
0x000119a6 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x000119aa cmp r3, 0 |
| if (r3 == 0) {
0x000119ac beq 0x11a22 | goto label_21;
| }
| label_6:
0x000119ae mvn r3, 0xe | r3 = ~0xe;
0x000119b2 str r3, [sp, 0x10] | var_10h = r3;
0x000119b4 b 0x1184c | goto label_0;
| label_15:
0x000119b6 mov r0, r4 | r0 = r4;
0x000119b8 bl 0x179a0 | fcn_000179a0 (r0);
0x000119bc ldr.w r3, [r4, 0xf0] | r3 = *((r4 + 0xf0));
0x000119c0 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000119c2 cmp r0, r3 |
0x000119c4 itt ge |
| if (r0 < r3) {
0x000119c6 mvnge r3, 0xb | r3 = ~0xb;
| }
| if (r0 < r3) {
0x000119ca str r3, [sp, 0x10] | var_10h = r3;
| goto label_22;
| }
| if (r0 >= r3) {
| label_22:
0x000119cc bge.w 0x1184c | goto label_0;
| }
0x000119d0 b 0x118ac | goto label_3;
| label_14:
0x000119d2 mov r0, r4 | r0 = r4;
0x000119d4 bl 0x177b0 | r0 = fcn_000177b0 (r0);
0x000119d8 mov fp, r0 |
0x000119da cmp r0, 0 |
| if (r0 != 0) {
0x000119dc bne.w 0x11896 | goto label_4;
| }
0x000119e0 mvn r3, 9 | r3 = ~9;
0x000119e4 str r3, [sp, 0x10] | var_10h = r3;
0x000119e6 b 0x1184c | goto label_0;
| label_18:
0x000119e8 add.w r1, r8, 0x20 | r1 = r8 + 0x20;
0x000119ec mov r8, sp | r8 = sp;
0x000119ee mov r0, r8 | r0 = r8;
0x000119f0 add.w r4, r7, 0x24 | r4 = r7 + 0x24;
0x000119f4 blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x000119f8 ldm.w r8, {r0, r1, r2, r3} | r0 = *(r8);
| r1 = *((r8 + 4));
| r2 = *((r8 + 8));
| r3 = *((r8 + 12));
0x000119fa movs r7, r1 | r7 = r1;
0x000119fc stm.w r4, {r0, r1, r2, r3} | *(r4) = r0;
| *((r4 + 4)) = r1;
| *((r4 + 8)) = r2;
| *((r4 + 12)) = r3;
0x00011a00 b 0x11938 | goto label_5;
| label_20:
0x00011a02 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00011a04 mov.w r1, 0x4e8 | r1 = 0x4e8;
0x00011a08 mov r0, r4 | r0 = r4;
0x00011a0a bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00011a0e mov r2, r7 | r2 = r7;
0x00011a10 movw r1, 0x4e9 | r1 = 0x4e9;
0x00011a14 mov r0, r4 | r0 = r4;
0x00011a16 bl 0x10194 | fcn_00010194 (r0, r1, r2);
0x00011a1a mvn r3, 0x62 | r3 = ~0x62;
0x00011a1e str r3, [sp, 0x10] | var_10h = r3;
0x00011a20 b 0x1184c | goto label_0;
| label_21:
0x00011a22 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00011a26 cmp r3, 0 |
| if (r3 != 0) {
0x00011a28 bne 0x119ae | goto label_6;
| }
0x00011a2a b 0x118d4 | goto label_2;
| label_13:
0x00011a2c blx 0x348c | fprintf_chk ()
| if (r3 < 0) {
0x00011a30 bmi 0x11988 | goto label_7;
| }
0x00011a32 movs r1, r0 | r1 = r0;
0x00011a34 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011a36 movs r0, r0 |
0x00011a38 sub sp, 0x118 |
0x00011a3a movs r0, r0 |
0x00011a3c add sp, 0x198 |
0x00011a3e movs r0, r0 |
| if (r0 >= r0) {
0x00011a40 bmi 0x11a9c |
0x00011a42 movs r1, r0 | r1 = r0;
0x00011a44 add r3, sp, 0x18 | r3 += var_18h;
0x00011a46 movs r0, r0 |
0x00011a48 add r2, sp, 0x280 | r2 += arg_280h;
0x00011a4a movs r0, r0 |
0x00011a4c add r2, sp, 0x160 | r2 += arg_48h;
0x00011a4e movs r0, r0 |
| }
0x00011a9c adds r0, 0x9c | r0 += 0x9c;
0x00011a9e cmp r5, 0 |
0x00011aa0 it ne |
| if (r5 != 0) {
0x00011aa2 cmpne r3, 4 | __asm ("cmpne r3, 4");
| }
0x00011aa4 itttt gt |
| if (r5 <= 0) {
0x00011aa6 addgt r3, r4, 0x20 | r3 = r4 + 0x20;
| }
| if (r5 <= 0) {
0x00011aaa addgt ip, r5, 0x20 |
| }
| if (r5 > 0) {
0x00011aae ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
| }
| if (r5 > 0) {
0x00011ab0 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
| }
0x00011ab4 mov r1, r6 | r1 = r6;
0x00011ab6 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00011ab8 mov r0, r7 | r0 = r7;
0x00011aba strd r3, r5, [sp, 4] | __asm ("strd r3, r5, [sp, 4]");
0x00011abe ldrd r3, r5, [r4, 0xc] | __asm ("ldrd r3, r5, [r4, 0xc]");
0x00011ac2 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00011ac4 str r5, [sp] | *(sp) = r5;
0x00011ac6 blx 0x3198 | r0 = free (r0);
0x00011aca mov r4, r0 | r4 = r0;
0x00011acc b 0x11ad2 | return void (*0x11ad2)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0x11570 */
| #include <stdint.h>
|
; (fcn) sym.MQTTAsync_unsubscribeMany () | void MQTTAsync_unsubscribeMany (int16_t arg_80h, int16_t arg_200h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_8h;
| int16_t var_0h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00011570 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00011574 mov r7, r2 | r7 = r2;
0x00011576 ldr r2, [pc, 0x1c4] |
0x00011578 mov sb, r3 | sb = r3;
0x0001157a mov r8, r0 | r8 = r0;
0x0001157c sub sp, 0x18 |
0x0001157e ldr r3, [pc, 0x1c0] | r3 = *(0x11742);
0x00011580 movs r4, 0 | r4 = 0;
0x00011582 ldr r0, [pc, 0x1c0] |
0x00011584 add r2, pc | r2 = 0x22cc6;
0x00011586 mov r5, r1 | r5 = r1;
0x00011588 movw r1, 0x447 | r1 = 0x447;
0x0001158c ldr r3, [r2, r3] |
0x0001158e movs r2, 3 | r2 = 3;
0x00011590 add r0, pc | r0 = 0x22cda;
0x00011592 adds r0, 0x74 | r0 += 0x74;
0x00011594 ldr r3, [r3] | r3 = *(0x22cc6);
0x00011596 str r3, [sp, 0x14] | var_14h = r3;
0x00011598 mov.w r3, 0 | r3 = 0;
0x0001159c str r4, [sp, 0x10] | var_10h = r4;
0x0001159e bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x000115a2 cmp.w r8, 0 |
| if (r8 == 0) {
0x000115a6 beq 0x115e0 | goto label_5;
| }
0x000115a8 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
| if (r3 == 0) {
0x000115ac cbz r3, 0x115e0 | goto label_5;
| }
0x000115ae ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000115b0 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x000115b2 itt pl |
| if (r3 < r3) {
0x000115b4 mvnpl r3, 2 | r3 = ~2;
| }
| if (r3 >= r3) {
0x000115b8 str r3, [sp, 0x10] | var_10h = r3;
| }
| if (r3 >= r3) {
0x000115ba bpl 0x115e6 | goto label_0;
| }
0x000115bc cmp r5, 0 |
0x000115be it gt |
| if (r5 <= 0) {
0x000115c0 subgt r6, r7, 4 | r6 = r7 - 4;
| }
| if (r5 > 0) {
0x000115c2 bgt 0x115cc | goto label_6;
| }
0x000115c4 b 0x11616 | goto label_7;
| do {
0x000115c6 adds r4, 1 | r4++;
0x000115c8 cmp r5, r4 |
| if (r5 == r4) {
0x000115ca beq 0x11616 | goto label_7;
| }
| label_6:
0x000115cc ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x000115d0 bl 0x53e8 | r0 = fcn_000053e8 (r0, r1, r2);
0x000115d4 cmp r0, 0 |
0x000115d6 bne 0x115c6 |
| } while (r0 != 0);
0x000115d8 mvn r3, 4 | r3 = ~4;
0x000115dc str r3, [sp, 0x10] | var_10h = r3;
0x000115de b 0x115e6 | goto label_0;
| label_5:
0x000115e0 mov.w r3, -1 | r3 = -1;
0x000115e4 str r3, [sp, 0x10] | var_10h = r3;
| do {
| label_0:
0x000115e6 ldr r0, [pc, 0x160] |
0x000115e8 movs r3, 3 | r3 = 3;
0x000115ea add r2, sp, 0x10 | r2 += var_10h;
0x000115ec mov.w r1, 0x488 | r1 = 0x488;
0x000115f0 add r0, pc | r0 = 0x22d3e;
0x000115f2 adds r0, 0x74 | r0 += 0x74;
0x000115f4 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x000115f8 ldr r2, [pc, 0x150] |
0x000115fa ldr r3, [pc, 0x144] | r3 = *(0x11742);
0x000115fc ldr r0, [sp, 0x10] | r0 = var_10h;
0x000115fe add r2, pc | r2 = 0x22d4e;
0x00011600 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00011602 ldr r2, [r3] | r2 = *(r3);
0x00011604 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00011606 eors r2, r3 | r2 ^= r3;
0x00011608 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001160c bne.w 0x11736 | goto label_8;
| }
0x00011610 add sp, 0x18 |
0x00011612 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_7:
0x00011616 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00011618 cmp r3, 0 |
0x0001161a bne 0x115e6 |
| } while (r3 != 0);
0x0001161c mov r0, r8 | r0 = r8;
0x0001161e bl 0x177b0 | r0 = fcn_000177b0 (r0);
0x00011622 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00011624 cbz r0, 0x11652 |
0x00011626 cmp.w sb, 0 |
| if (sb == 0) {
0x0001162a beq 0x1165e | goto label_3;
| }
0x0001162c ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00011630 ldr.w r2, [r3, 0x9c] | r2 = *((r3 + 0x9c));
0x00011634 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00011638 cmp r2, 4 |
| if (r2 <= 4) {
0x0001163a ble 0x1165a | goto label_9;
| }
| if (r3 != 0) {
0x0001163c cbz r3, 0x1164a |
0x0001163e ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
| if (r3 != 0) {
0x00011642 cbnz r3, 0x1164a | goto label_2;
| }
0x00011644 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
| if (r3 == 0) {
0x00011648 cbz r3, 0x1165e | goto label_3;
| }
| }
| label_2:
0x0001164a mvn r3, 0xe | r3 = ~0xe;
0x0001164e str r3, [sp, 0x10] | var_10h = r3;
0x00011650 b 0x115e6 | goto label_0;
| }
0x00011652 mvn r3, 9 | r3 = ~9;
0x00011656 str r3, [sp, 0x10] | var_10h = r3;
0x00011658 b 0x115e6 | goto label_0;
| label_9:
0x0001165a cmp r3, 0 |
| if (r3 > 0) {
0x0001165c bgt 0x11724 | goto label_10;
| }
| label_3:
0x0001165e ldr r4, [sp, 0x10] | r4 = var_10h;
0x00011660 cmp r4, 0 |
| if (r4 != 0) {
0x00011662 bne 0x115e6 | goto label_0;
| }
0x00011664 ldr r0, [pc, 0xe8] |
0x00011666 movs r2, 0x60 | r2 = 0x60;
0x00011668 movw r1, 0x469 | r1 = 0x469;
0x0001166c add r0, pc | r0 = 0x22dc0;
0x0001166e bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x00011672 mov r6, r0 | r6 = r0;
| label_4:
0x00011674 cmp r0, 0 |
| if (r0 == 0) {
0x00011676 beq 0x11702 | goto label_11;
| }
0x00011678 movs r2, 0x5c | r2 = 0x5c;
0x0001167a mov r1, r4 | r1 = r4;
0x0001167c adds r0, 4 | r0 += 4;
0x0001167e blx 0x30d8 | fcn_000030d8 ();
0x00011682 movs r3, 0xa | r3 = 0xa;
0x00011684 str.w r8, [r6, 0x50] | __asm ("str.w r8, [r6, 0x50]");
0x00011688 str.w sl, [r6, 0x14] | __asm ("str.w sl, [r6, 0x14]");
0x0001168c str r3, [r6] | *(r6) = r3;
0x0001168e cmp.w sb, 0 |
| if (sb != 0) {
0x00011692 beq 0x116c2 |
0x00011694 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00011698 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0001169c ldr.w r3, [r3, 0x9c] | r3 = *((r3 + 0x9c));
0x000116a0 str r2, [r6, 4] | *((r6 + 4)) = r2;
0x000116a2 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x000116a6 cmp r3, 4 |
0x000116a8 str r2, [r6, 8] | *((r6 + 8)) = r2;
0x000116aa ldr.w r2, [sb, 0x18] | r2 = *((sb + 0x18));
0x000116ae str r2, [r6, 0xc] | *((r6 + 0xc)) = r2;
0x000116b0 ldr.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x000116b4 str r2, [r6, 0x10] | *((r6 + 0x10)) = r2;
0x000116b6 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x000116ba str r2, [r6, 0x18] | *((r6 + 0x18)) = r2;
0x000116bc str.w sl, [sb, 0x14] | __asm ("str.w sl, [sb, 0x14]");
| if (r3 > 4) {
0x000116c0 bgt 0x1170a | goto label_12;
| }
| }
| label_1:
0x000116c2 ldr r0, [pc, 0x90] |
0x000116c4 lsls r2, r5, 2 | r2 = r5 << 2;
0x000116c6 movw r1, 0x47e | r1 = 0x47e;
0x000116ca str r5, [r6, 0x34] | *((r6 + 0x34)) = r5;
0x000116cc add r0, pc | r0 = 0x22e26;
0x000116ce bl 0x1005c | r0 = fcn_0001005c (r0, r1, r2);
0x000116d2 mov r8, r0 | r8 = r0;
0x000116d4 str r0, [r6, 0x38] | *((r6 + 0x38)) = r0;
| if (r0 == 0) {
0x000116d6 cbz r0, 0x11702 | goto label_11;
| }
0x000116d8 cmp r5, 0 |
| if (r5 <= 0) {
0x000116da ble 0x116f6 | goto label_13;
| }
0x000116dc subs r7, 4 | r7 -= 4;
0x000116de b 0x116e4 |
| while (r5 != r4) {
0x000116e0 ldr.w r8, [r6, 0x38] | r8 = *((r6 + 0x38));
0x000116e4 ldr r0, [r7, 4]! | r0 = *((r7 += 4));
0x000116e8 bl 0x5274 | fcn_00005274 (r0);
0x000116ec str.w r0, [r8, r4, lsl 2] | __asm ("str.w r0, [r8, r4, lsl 2]");
0x000116f0 adds r4, 1 | r4++;
0x000116f2 cmp r5, r4 |
0x000116f4 bne 0x116e0 |
| }
| label_13:
0x000116f6 movs r1, 4 | r1 = 4;
0x000116f8 mov r0, r6 | r0 = r6;
0x000116fa bl 0x13cd0 | fcn_00013cd0 (r0, r1, r2, r3, r4, r5, r6);
0x000116fe str r0, [sp, 0x10] | var_10h = r0;
0x00011700 b 0x115e6 | goto label_0;
| label_11:
0x00011702 mvn r3, 0x62 | r3 = ~0x62;
0x00011706 str r3, [sp, 0x10] | var_10h = r3;
0x00011708 b 0x115e6 | goto label_0;
| label_12:
0x0001170a mov r8, sp | r8 = sp;
0x0001170c add.w r1, sb, 0x20 | r1 = sb + 0x20;
0x00011710 mov r0, r8 | r0 = r8;
0x00011712 blx 0x351c | r0 = SSL_CTX_set_ex_data ();
0x00011716 ldm.w r8, {r0, r1, r2, r3} | r0 = *(r8);
| r1 = *((r8 + 4));
| r2 = *((r8 + 8));
| r3 = *((r8 + 12));
0x0001171a add.w ip, r6, 0x24 |
0x0001171e stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00011722 b 0x116c2 | goto label_1;
| label_10:
0x00011724 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00011728 cmp r3, 0 |
| if (r3 != 0) {
0x0001172a bne 0x1164a | goto label_2;
| }
0x0001172c ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00011730 cmp r3, 0 |
| if (r3 != 0) {
0x00011732 bne 0x1164a | goto label_2;
| }
0x00011734 b 0x1165e | goto label_3;
| label_8:
0x00011736 blx 0x348c | fprintf_chk ()
0x0001173a nop |
0x0001173c bvc 0x11758 | __asm ("bvc sym.MQTTAsync_unsubscribe");
0x0001173e movs r1, r0 | r1 = r0;
0x00011740 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x00011742 movs r0, r0 |
| if (r4 == 0) {
0x00011744 cbz r4, 0x11792 | void (*0x11792)() ();
| }
0x00011746 movs r0, r0 |
0x00011748 uxtb r4, r1 | r4 = (int8_t) r1;
0x0001174a movs r0, r0 |
0x0001174c bvs 0x11674 | __asm ("bvs 0x11674");
| goto label_4;
0x0001174e movs r1, r0 | r1 = r0;
0x00011750 add r5, sp, 0x200 | r5 += arg_200h;
0x00011752 movs r0, r0 |
0x00011754 add r5, sp, 0x80 | r5 += arg_80h;
0x00011756 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xdfc8 */
| #include <stdint.h>
|
; (fcn) sym.MQTTProperties_copy () | void MQTTProperties_copy (int16_t arg1, int16_t arg2) {
| int16_t var_4h_2;
| int16_t var_14h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_ch_2;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| label_6:
0x0000dec0 strd r1, r1, [sp, 4] | __asm ("strd r1, r1, [sp, 4]");
0x0000dec4 movw r1, 0x131 | r1 = 0x131;
0x0000dec8 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000decc ldr r0, [r5] | r0 = *(r5);
0x0000dece subs r3, r6, r0 | r3 = r6 - r0;
0x0000ded0 cmp r3, 0 |
| if (r3 <= 0) {
0x0000ded2 bgt 0xdf12 |
| label_3:
0x0000ded4 ldr r3, [sp, 4] | r3 = var_4h;
0x0000ded6 cmp r3, 1 |
| if (r3 != 1) {
0x0000ded8 beq 0xdee4 |
0x0000deda ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x0000dedc cbz r3, 0xdee4 | goto label_0;
| }
0x0000dede mov r0, r4 | r0 = r4;
0x0000dee0 blx 0x3620 | fcn_00003620 ();
| }
| label_0:
0x0000dee4 ldr r0, [pc, 0xd0] |
0x0000dee6 movs r3, 3 | r3 = 3;
0x0000dee8 add r2, sp, 4 | r2 += var_4h;
0x0000deea mov.w r1, 0x156 | r1 = 0x156;
0x0000deee add r0, pc | r0 = 0x1beaa;
0x0000def0 adds r0, 0xec | r0 += 0xec;
0x0000def2 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000def6 ldr r2, [pc, 0xc4] |
0x0000def8 ldr r3, [pc, 0xb8] | r3 = *(0xdfb4);
0x0000defa ldr r0, [sp, 4] | r0 = var_4h;
0x0000defc add r2, pc | r2 = 0x1bebe;
0x0000defe ldr r3, [r2, r3] | r3 = *(0x1bebe);
0x0000df00 ldr r2, [r3] | r2 = *(0x1bebe);
0x0000df02 ldr r3, [sp, 0xc] | r3 = var_ch;
| label_7:
0x0000df04 eors r2, r3 | r2 ^= r3;
0x0000df06 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000df0a bne 0xdfa6 | goto label_10;
| }
0x0000df0c add sp, 0x10 |
0x0000df0e pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x0000df12 add r1, sp, 8 | r1 += var_8h;
0x0000df14 bl 0x69c0 | fcn_000069c0 (r0, r1);
0x0000df18 ldr r3, [r5] | r3 = *(r5);
0x0000df1a ldr r2, [sp, 8] | r2 = var_8h;
0x0000df1c add r3, r0 | r3 += r0;
0x0000df1e str r3, [r5] | *(r5) = r3;
0x0000df20 str r2, [r4, 8] | *((r4 + 8)) = r2;
| if (r2 == 0) {
0x0000df22 cbz r2, 0xdf60 | goto label_4;
| }
0x0000df24 ldr r7, [pc, 0x98] |
0x0000df26 ldr.w r8, [pc, 0x9c] |
0x0000df2a ldr r3, [r4] | r3 = *(r4);
0x0000df2c add r7, pc | r7 = 0x1bef0;
0x0000df2e add r8, pc | r8 = 0x1bef8;
| do {
0x0000df30 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0000df32 cmp r2, r3 |
| if (r2 == r3) {
0x0000df34 beq 0xdf66 | goto label_11;
| }
0x0000df36 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 == 0) {
| label_2:
0x0000df38 cbz r0, 0xdf86 | goto label_12;
| }
| label_1:
0x0000df3a ldr r3, [r4] | r3 = *(r4);
0x0000df3c mov r2, r6 | r2 = r6;
0x0000df3e mov r1, r5 | r1 = r5;
0x0000df40 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0000df44 add.w r0, r0, r3, lsl 2 | r0 += (r3 << 2);
| label_5:
0x0000df48 bl 0xdca0 | r0 = fcn_0000dca0 (r0, r1, r2);
0x0000df4c cmp r0, 0 |
| if (r0 <= 0) {
0x0000df4e ble 0xdf9e | goto label_13;
| }
0x0000df50 ldr r2, [sp, 8] | r2 = var_8h;
0x0000df52 ldr r3, [r4] | r3 = *(r4);
0x0000df54 subs r2, r2, r0 | r2 -= r0;
0x0000df56 adds r3, 1 | r3++;
0x0000df58 str r2, [sp, 8] | var_8h = r2;
0x0000df5a str r3, [r4] | *(r4) = r3;
0x0000df5c cmp r2, 0 |
0x0000df5e bne 0xdf30 |
| } while (r2 != 0);
| label_4:
0x0000df60 movs r3, 1 | r3 = 1;
0x0000df62 str r3, [sp, 4] | var_4h = r3;
0x0000df64 b 0xdee4 | goto label_0;
| label_11:
0x0000df66 adds r3, 0xa | r3 += 0xa;
0x0000df68 cmp r3, 0xa |
0x0000df6a str r3, [r4, 4] | *((r4 + 4)) = r3;
| if (r3 == 0xa) {
0x0000df6c beq 0xdf8e | goto label_14;
| }
0x0000df6e add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0000df72 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0000df74 movw r1, 0x141 | r1 = 0x141;
0x0000df78 lsls r3, r3, 2 | r3 <<= 2;
0x0000df7a mov r0, r7 | r0 = r7;
0x0000df7c bl 0x10220 | fcn_00010220 (r0, r1, r2, r3);
0x0000df80 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0000df82 cmp r0, 0 |
| if (r0 != 0) {
0x0000df84 bne 0xdf3a | goto label_1;
| }
| label_12:
0x0000df86 mvn r3, 0x62 | r3 = ~0x62;
0x0000df8a str r3, [sp, 4] | var_4h = r3;
0x0000df8c b 0xdee4 | goto label_0;
| label_14:
0x0000df8e movs r2, 0xc8 | r2 = 0xc8;
0x0000df90 movw r1, 0x13f | r1 = 0x13f;
0x0000df94 mov r0, r8 | r0 = r8;
0x0000df96 bl 0x1005c | fcn_0001005c (r0, r1, r2);
0x0000df98 invalid |
0x0000df9c b 0xdf38 | goto label_2;
| label_13:
0x0000df9e ldr r3, [sp, 8] | r3 = var_8h;
0x0000dfa0 cmp r3, 0 |
| if (r3 != 0) {
0x0000dfa2 bne 0xded4 | goto label_3;
| }
0x0000dfa4 b 0xdf60 | goto label_4;
| label_10:
0x0000dfa6 blx 0x348c | fprintf_chk ()
0x0000dfaa nop |
| if (r3 > 0) {
0x0000dfac bhi 0xdf48 | goto label_5;
| }
0x0000dfae movs r0, r0 |
0x0000dfb0 lsrs r2, r4, 0x17 | r2 = r4 >> 0x17;
0x0000dfb2 movs r2, r0 | r2 = r0;
| label_9:
0x0000dfb4 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000dfb6 movs r0, r0 |
| if (r0 > r0) {
0x0000dfb8 bhi 0xdec0 | goto label_6;
| }
0x0000dfba movs r0, r0 |
0x0000dfbc lsrs r4, r2, 0x16 | r4 = r2 >> 0x16;
0x0000dfbe movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x0000dfc0 bpl 0xdf04 | goto label_7;
| }
0x0000dfc2 movs r0, r0 |
| if (r0 >= r0) {
0x0000dfc4 bpl 0xdf04 | goto label_7;
| }
0x0000dfc6 movs r0, r0 |
0x0000dfc8 ldr r3, [pc, 0xb0] |
0x0000dfca movs r2, 3 | r2 = 3;
0x0000dfcc push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000dfd0 mov r6, r1 | r6 = r1;
0x0000dfd2 ldr r1, [pc, 0xac] |
0x0000dfd4 mov r8, r0 | r8 = r0;
0x0000dfd6 add r3, pc | r3 = 0x1c056;
0x0000dfd8 sub sp, 0x1c |
0x0000dfda add.w r0, r3, 0x100 | r0 = r3 + 0x100;
0x0000dfde ldr r3, [pc, 0xa4] | r3 = *(0xe086);
0x0000dfe0 add r1, pc | r1 = 0x1c066;
0x0000dfe2 movs r4, 0 | r4 = 0;
0x0000dfe4 add r7, sp, 4 | r7 += var_4h;
0x0000dfe6 ldr r3, [r1, r3] |
0x0000dfe8 movw r1, 0x1b1 | r1 = 0x1b1;
0x0000dfec ldr r3, [r3] | r3 = *(0x1c066);
0x0000dfee str r3, [sp, 0x14] | var_14h = r3;
0x0000dff0 mov.w r3, 0 | r3 = 0;
0x0000dff4 strd r4, r4, [sp, 4] | __asm ("strd r4, r4, [var_4h]");
0x0000dff8 strd r4, r4, [sp, 0xc] | __asm ("strd r4, r4, [var_ch]");
0x0000dffc bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000e000 ldr r3, [r6] | r3 = *(r6);
0x0000e002 cmp r3, r4 |
| if (r3 <= r4) {
0x0000e004 ble 0xe040 | goto label_15;
| }
0x0000e006 ldr.w sb, [pc, 0x80] |
0x0000e00a mov r5, r4 | r5 = r4;
0x0000e00c add sb, pc | sb = 0x1c09a;
0x0000e00e b 0xe01a |
| while (r0 == 0) {
0x0000e010 ldr r3, [r6] | r3 = *(r6);
0x0000e012 adds r5, 1 | r5++;
0x0000e014 adds r4, 0x14 | r4 += 0x14;
0x0000e016 cmp r3, r5 |
| if (r3 <= r5) {
0x0000e018 ble 0xe040 | goto label_15;
| }
| label_8:
0x0000e01a ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0000e01c mov r0, r7 | r0 = r7;
0x0000e01e add r1, r4 | r1 += r4;
0x0000e020 blx 0x2fe0 | r0 = fcn_00002fe0 ();
0x0000e024 cmp r0, 0 |
0x0000e026 beq 0xe010 |
| }
0x0000e028 mov r3, r0 | r3 = r0;
0x0000e02a mov r2, sb | r2 = sb;
0x0000e02c mov.w r1, -1 | r1 = -1;
0x0000e030 movs r0, 5 | r0 = 5;
0x0000e032 bl 0x9a28 | fcn_00009a28 (r0, r1);
0x0000e036 ldr r3, [r6] | r3 = *(r6);
0x0000e038 adds r5, 1 | r5++;
0x0000e03a adds r4, 0x14 | r4 += 0x14;
0x0000e03c cmp r3, r5 |
| if (r3 > r5) {
0x0000e03e bgt 0xe01a | goto label_8;
| }
| label_15:
0x0000e040 ldr r0, [pc, 0x48] |
0x0000e042 movs r3, 3 | r3 = 3;
0x0000e044 movs r2, 0 | r2 = 0;
0x0000e046 mov.w r1, 0x1ba | r1 = 0x1ba;
0x0000e04a add r0, pc |
0x0000e04c add.w r0, r0, 0x100 | r0 = 0x1c1da;
0x0000e050 bl 0xfbf4 | r0 = fcn_0000fbf4 (r0, r1, r2, r3);
0x0000e054 ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x0000e058 stm.w r8, {r0, r1, r2, r3} | *(r8) = r0;
| *((r8 + 4)) = r1;
| *((r8 + 8)) = r2;
| *((r8 + 12)) = r3;
0x0000e05c ldr r2, [pc, 0x30] |
0x0000e05e ldr r3, [pc, 0x24] | r3 = *(0xe086);
0x0000e060 add r2, pc | r2 = 0x1c0f4;
0x0000e062 ldr r3, [r2, r3] | r3 = *(0x1c0f4);
0x0000e064 ldr r2, [r3] | r2 = *(0x1c0f4);
0x0000e066 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000e068 eors r2, r3 | r2 ^= r3;
0x0000e06a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000e06e bne 0xe078 |
0x0000e070 mov r0, r8 | r0 = r8;
0x0000e072 add sp, 0x1c |
0x0000e074 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x0000e078 blx 0x348c | fprintf_chk ()
0x0000e07c bvc 0xdfb4 | __asm ("bvc 0xdfb4");
| goto label_9;
0x0000e07e movs r0, r0 |
0x0000e080 lsrs r0, r6, 0x12 | r0 = r6 >> 0x12;
0x0000e082 movs r2, r0 | r2 = r0;
0x0000e084 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000e086 movs r0, r0 |
| if (r0 < r0) {
0x0000e088 bpl 0xe08c |
0x0000e08a movs r0, r0 |
| }
0x0000e08c bvc 0xe0dc | __asm ("bvc 0xe0dc");
0x0000e08e movs r0, r0 |
0x0000e090 lsrs r0, r6, 0x10 | r0 = r6 >> 0x10;
0x0000e092 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3as.so.1.3.9 @ 0xb1a8 */
| #include <stdint.h>
|
; (fcn) sym.Thread_start () | void Thread_start (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x0000b1a8 ldr.w ip, [pc, 0x78] | ip = *(0x0000b224);
0x0000b1ac movs r2, 3 | r2 = 3;
0x0000b1ae ldr r3, [pc, 0x78] |
0x0000b1b0 push {r4, r5, r6, r7, lr} |
0x0000b1b2 mov r5, r0 | r5 = r0;
0x0000b1b4 add ip, pc |
0x0000b1b6 ldr r0, [pc, 0x74] |
0x0000b1b8 sub sp, 0x34 |
0x0000b1ba mov r6, r1 | r6 = r1;
0x0000b1bc ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x0000b1c0 add r4, sp, 8 | r4 += var_8h;
0x0000b1c2 movs r1, 0x44 | r1 = 0x44;
0x0000b1c4 add r0, pc | r0 = 0x163f6;
0x0000b1c6 movs r7, 0 | r7 = 0;
0x0000b1c8 ldr r3, [r3] | r3 = *(0xb22a);
0x0000b1ca str r3, [sp, 0x2c] | var_2ch = r3;
0x0000b1cc mov.w r3, 0 | r3 = 0;
0x0000b1d0 str r7, [sp, 4] | var_4h = r7;
0x0000b1d2 bl 0xfb54 | fcn_0000fb54 (r0, r1, r2);
0x0000b1d6 mov r0, r4 | r0 = r4;
0x0000b1d8 blx 0x34b0 | strnlen ();
0x0000b1dc movs r1, 1 | r1 = 1;
0x0000b1de mov r0, r4 | r0 = r4;
0x0000b1e0 blx 0x2fbc | fcn_00002fbc ();
0x0000b1e4 mov r3, r6 | r3 = r6;
0x0000b1e6 mov r2, r5 | r2 = r5;
0x0000b1e8 mov r1, r4 | r1 = r4;
0x0000b1ea add r0, sp, 4 | r0 += var_4h;
0x0000b1ec blx 0x3180 | r0 = CRYPTO_free ();
| if (r0 != 0) {
0x0000b1f0 cbz r0, 0xb1f4 |
0x0000b1f2 str r7, [sp, 4] | var_4h = r7;
| }
0x0000b1f4 mov r0, r4 | r0 = r4;
0x0000b1f6 blx 0x35fc | fcn_000035fc ();
0x0000b1fa ldr r0, [pc, 0x34] |
0x0000b1fc movs r3, 3 | r3 = 3;
0x0000b1fe movs r2, 0 | r2 = 0;
0x0000b200 movs r1, 0x4f | r1 = 0x4f;
0x0000b202 add r0, pc | r0 = 0x16438;
0x0000b204 bl 0xfbf4 | fcn_0000fbf4 (r0, r1, r2, r3);
0x0000b208 ldr r2, [pc, 0x28] |
0x0000b20a ldr r3, [pc, 0x1c] | r3 = *(0xb22a);
0x0000b20c add r2, pc | r2 = 0x16444;
0x0000b20e ldr r3, [r2, r3] | r3 = *(0x16444);
0x0000b210 ldr r2, [r3] | r2 = *(0x16444);
0x0000b212 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0000b214 eors r2, r3 | r2 ^= r3;
0x0000b216 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0000b21a bne 0xb220 |
0x0000b21c add sp, 0x34 |
0x0000b21e pop {r4, r5, r6, r7, pc} |
| }
0x0000b220 blx 0x348c | fprintf_chk ()
0x0000b224 subs r2, 0xdc | r2 -= 0xdc;
0x0000b226 movs r2, r0 | r2 = r0;
0x0000b228 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0000b22a movs r0, r0 |
0x0000b22c stc2l p0, c0, [ip, -0]! | __asm ("stc2l p0, c0, [ip, -0]!");
0x0000b230 stc2 p0, c0, [lr, -0]! | __asm ("stc2 p0, c0, [lr, -0]!");
0x0000b234 subs r2, 0x84 | r2 -= 0x84;
0x0000b236 movs r2, r0 | r2 = r0;
| }
[*] Function fprintf used 155 times libpaho-mqtt3as.so.1.3.9