[*] Binary protection state of libkmod.so.2.3.7
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of libkmod.so.2.3.7
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libkmod.so.2.3.7 @ 0x3a38 */
| #include <stdint.h>
|
; (fcn) fcn.00003a38 () | void fcn_00003a38 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00003a38 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00003a3c mov r7, r0 | r7 = r0;
0x00003a3e sub sp, 8 |
0x00003a40 mov r8, r1 | r8 = r1;
0x00003a42 mov r5, r2 | r5 = r2;
0x00003a44 mov.w sb, 0 | sb = 0;
| if (r2 == 0) {
0x00003a48 cbz r2, 0x3a84 | goto label_5;
| }
| label_0:
0x00003a4a ldr r6, [r7] | r6 = *(r7);
0x00003a4c mov.w r3, -1 | r3 = -1;
0x00003a50 mov r4, r6 | r4 = r6;
| do {
0x00003a52 mov r0, r5 | r0 = r5;
| if (r4 == 0) {
0x00003a54 cbz r4, 0x3abe | goto label_6;
| }
0x00003a56 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00003a58 adds r1, 5 | r1 += 5;
0x00003a5a blx 0x201c | r0 = fcn_0000201c ();
0x00003a5e subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 <= r0) {
0x00003a60 ble 0x3abe | goto label_6;
| }
0x00003a62 ldr r4, [r4] | r4 = *(r4);
0x00003a64 cmp r4, r6 |
0x00003a66 bne 0x3a52 |
| } while (r4 != r6);
0x00003a68 mov r0, r5 | r0 = r5;
0x00003a6a blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003a6e mov r4, r0 | r4 = r0;
0x00003a70 adds r0, 9 | r0 += 9;
0x00003a72 blx 0x21fc | r0 = fcn_000021fc ();
0x00003a76 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00003a78 cbnz r0, 0x3a92 | goto label_7;
| }
| label_1:
0x00003a7a mvn r0, 0xb | r0 = ~0xb;
| do {
0x00003a7e add sp, 8 |
0x00003a80 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x00003a84 mov r0, r1 | r0 = r1;
0x00003a86 mov.w sb, 1 | sb = 1;
0x00003a8a blx 0x2040 | r0 = fcn_00002040 ();
0x00003a8e mov r5, r0 | r5 = r0;
0x00003a90 b 0x3a4a | goto label_0;
| label_7:
0x00003a92 adds r2, r4, 1 | r2 = r4 + 1;
0x00003a94 mov r1, r5 | r1 = r5;
0x00003a96 add.w r0, sl, 5 | r0 = sl + 5;
0x00003a9a blx 0x20c0 | mmap64 ()
0x00003a9e str.w r8, [sl] | __asm ("str.w r8, [sl]");
0x00003aa2 strb.w sb, [sl, 4] | *((sl + 4)) = sb;
| label_2:
0x00003aa6 mov r1, sl | r1 = sl;
0x00003aa8 mov r0, r6 | r0 = r6;
0x00003aaa bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
0x00003aae mov r3, r0 | r3 = r0;
0x00003ab0 cmp r0, 0 |
| if (r0 == 0) {
0x00003ab2 beq 0x3b1e | goto label_8;
| }
| label_3:
0x00003ab4 movs r0, 0 | r0 = 0;
0x00003ab6 str r3, [r7] | *(r7) = r3;
0x00003ab8 add sp, 8 |
0x00003aba pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x00003abe mvn r0, 0x10 | r0 = ~0x10;
0x00003ac2 cmp r3, 0 |
0x00003ac4 beq 0x3a7e |
| } while (r3 == 0);
0x00003ac6 mov r0, r5 | r0 = r5;
0x00003ac8 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003acc mov r2, r0 | r2 = r0;
0x00003ace adds r0, 9 | r0 += 9;
0x00003ad0 str r2, [sp, 4] | var_4h = r2;
0x00003ad2 blx 0x21fc | fcn_000021fc ();
0x00003ad6 ldr r2, [sp, 4] | r2 = var_4h;
0x00003ad8 mov sl, r0 | sl = r0;
0x00003ada cmp r0, 0 |
| if (r0 == 0) {
0x00003adc beq 0x3a7a | goto label_1;
| }
0x00003ade adds r2, 1 | r2++;
0x00003ae0 mov r1, r5 | r1 = r5;
0x00003ae2 adds r0, 5 | r0 += 5;
0x00003ae4 blx 0x20c0 | mmap64 ()
0x00003ae8 str.w r8, [sl] | __asm ("str.w r8, [sl]");
0x00003aec strb.w sb, [sl, 4] | *((sl + 4)) = sb;
0x00003af0 cmp r4, 0 |
| if (r4 == 0) {
0x00003af2 beq 0x3aa6 | goto label_2;
| }
0x00003af4 cmp r6, r4 |
0x00003af6 mov r1, sl | r1 = sl;
0x00003af8 mov r0, r4 | r0 = r4;
| if (r6 == r4) {
0x00003afa beq 0x3b14 | goto label_9;
| }
0x00003afc bl 0x37e8 | r0 = fcn_000037e8 (r0, r1);
0x00003b00 mov r3, r0 | r3 = r0;
| if (r3 == 0) {
0x00003b02 cbz r3, 0x3b1e | goto label_8;
| }
| label_4:
0x00003b04 ldr r2, [r7] | r2 = *(r7);
0x00003b06 cmp r4, r2 |
0x00003b08 it ne |
| if (r4 != r2) {
0x00003b0a movne r0, 0 | r0 = 0;
| goto label_10;
| }
| if (r4 == r2) {
| label_10:
0x00003b0c beq 0x3ab4 | goto label_3;
| }
0x00003b0e add sp, 8 |
0x00003b10 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x00003b14 bl 0x3838 | r0 = fcn_00003838 (r0, r1);
0x00003b18 mov r3, r0 | r3 = r0;
0x00003b1a cmp r3, 0 |
| if (r3 != 0) {
0x00003b1c bne 0x3b04 | goto label_4;
| }
| label_8:
0x00003b1e mov r0, sl | r0 = sl;
0x00003b20 blx 0x20a4 | fcn_000020a4 ();
0x00003b24 b 0x3a7a | 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/libkmod.so.2.3.7 @ 0x3b28 */
| #include <stdint.h>
|
; (fcn) fcn.00003b28 () | void fcn_00003b28 (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00003b28 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00003b2c mov r6, r1 | r6 = r1;
0x00003b2e mov r8, r2 | r8 = r2;
0x00003b30 mov sb, r0 | sb = r0;
0x00003b32 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003b36 add.w sl, r0, 1 | sl = r0 + 1;
0x00003b3a mov r4, r0 | r4 = r0;
0x00003b3c mov r0, r6 | r0 = r6;
0x00003b3e blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003b42 adds r7, r0, 1 | r7 = r0 + 1;
0x00003b44 add.w r0, sl, r7 | r0 = sl + r7;
0x00003b48 adds r0, 4 | r0 += 4;
0x00003b4a blx 0x21fc | r0 = fcn_000021fc ();
0x00003b4e mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00003b50 cbz r0, 0x3b7e |
0x00003b52 adds r4, 5 | r4 += 5;
0x00003b54 mov r2, sl | r2 = sl;
0x00003b56 add r4, r0 | r4 += r0;
0x00003b58 mov r1, sb | r1 = sb;
0x00003b5a str r4, [r0], 4 | *(r0) = r4;
| r0 += 4;
0x00003b5e blx 0x20c0 | mmap64 ()
0x00003b62 mov r1, r6 | r1 = r6;
0x00003b64 mov r2, r7 | r2 = r7;
0x00003b66 mov r0, r4 | r0 = r4;
0x00003b68 blx 0x20c0 | mmap64 ()
0x00003b6c ldr.w r0, [r8] | r0 = *(r8);
0x00003b70 mov r1, r5 | r1 = r5;
0x00003b72 bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
| if (r0 == 0) {
0x00003b76 cbz r0, 0x3b7e | goto label_0;
| }
0x00003b78 movs r5, 0 | r5 = 0;
0x00003b7a str.w r0, [r8] | __asm ("str.w r0, [r8]");
| }
| label_0:
0x00003b7e mov r0, r5 | r0 = r5;
0x00003b80 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00003b84 b.w 0x20a0 | return void (*0x20a0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libkmod.so.2.3.7 @ 0x3b88 */
| #include <stdint.h>
|
; (fcn) fcn.00003b88 () | void fcn_00003b88 (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00003b88 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00003b8c mov r6, r2 | r6 = r2;
0x00003b8e mov r8, r0 | r8 = r0;
0x00003b90 mov r0, r1 | r0 = r1;
0x00003b92 mov sb, r1 | sb = r1;
0x00003b94 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003b98 add.w sl, r0, 1 | sl = r0 + 1;
0x00003b9c mov r4, r0 | r4 = r0;
0x00003b9e mov r0, r6 | r0 = r6;
0x00003ba0 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003ba4 adds r7, r0, 1 | r7 = r0 + 1;
0x00003ba6 add.w r0, sl, r7 | r0 = sl + r7;
0x00003baa adds r0, 4 | r0 += 4;
0x00003bac blx 0x21fc | r0 = fcn_000021fc ();
0x00003bb0 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00003bb2 cbz r0, 0x3bea |
0x00003bb4 adds r4, 5 | r4 += 5;
0x00003bb6 mov r2, sl | r2 = sl;
0x00003bb8 add r4, r0 | r4 += r0;
0x00003bba mov r1, sb | r1 = sb;
0x00003bbc str r4, [r0], 4 | *(r0) = r4;
| r0 += 4;
0x00003bc0 blx 0x20c0 | mmap64 ()
0x00003bc4 mov r2, r7 | r2 = r7;
0x00003bc6 mov r1, r6 | r1 = r6;
0x00003bc8 mov r0, r4 | r0 = r4;
0x00003bca blx 0x20c0 | mmap64 ()
0x00003bce movs r1, 9 | r1 = 9;
0x00003bd0 ldr r0, [r5] | r0 = *(r5);
0x00003bd2 movs r2, 0x20 | r2 = 0x20;
0x00003bd4 bl 0xa564 | fcn_0000a564 (r0, r1, r2);
0x00003bd8 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00003bdc mov r1, r5 | r1 = r5;
0x00003bde bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
| if (r0 == 0) {
0x00003be2 cbz r0, 0x3bea | goto label_0;
| }
0x00003be4 movs r5, 0 | r5 = 0;
0x00003be6 str.w r0, [r8, 0xc] | __asm ("str.w r0, [r8, 0xc]");
| }
| label_0:
0x00003bea mov r0, r5 | r0 = r5;
0x00003bec pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00003bf0 b.w 0x20a0 | return void (*0x20a0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libkmod.so.2.3.7 @ 0x3cd0 */
| #include <stdint.h>
|
; (fcn) fcn.00003cd0 () | void fcn_00003cd0 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_bp_c8h;
| int16_t var_bp_60h;
| int16_t var_4h;
| int32_t var_0h_2;
| int32_t var_0h_3;
| int16_t var_8h;
| int16_t var_10h;
| int32_t var_10h_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_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_5ch;
| size_t size;
| int16_t var_c8h;
| int16_t var_138h;
| int16_t var_1120h;
| int32_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00003cd0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00003cd4 mov sb, r2 | sb = r2;
0x00003cd6 ldr.w r2, [pc, 0xa04] | r2 = *(0x000046dc);
0x00003cda sub.w sp, sp, 0x1120 |
0x00003cde sub sp, 0x1c |
0x00003ce0 movs r7, 0 | r7 = 0;
0x00003ce2 ldr.w r3, [pc, 0x9fc] |
0x00003ce6 add.w fp, sp, 0x138 |
0x00003cea add r2, pc | r2 += pc;
0x00003cec strd r0, r1, [sp, 0x2c] | __asm ("strd r0, r1, [var_30h]");
0x00003cf0 add.w r1, sp, 0x1120 | r1 += var_1120h;
0x00003cf4 add.w r8, sp, 0x5c | r8 += var_5ch;
0x00003cf8 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00003cfa adds r1, 0x14 | r1 += 0x14;
0x00003cfc ldr r3, [r3] | r3 = *(0x46e2);
0x00003cfe str r3, [r1] | *(r1) = r3;
0x00003d00 mov.w r3, 0 | r3 = 0;
0x00003d04 str r7, [fp, -0xdc] | var_5ch = r7;
0x00003d08 blx 0x2384 | uflow ();
0x00003d0c ldr.w r2, [pc, 0x9d4] |
0x00003d10 mov r1, r0 | r1 = r0;
0x00003d12 mov r0, r8 | r0 = r8;
0x00003d14 add r2, pc | r2 = 0x83fc;
0x00003d16 bl 0x3a38 | fcn_00003a38 (r0, r1, r2);
0x00003d1a ldr.w r5, [sb] | r5 = *(sb);
0x00003d1e cmp r5, 0 |
| if (r5 == 0) {
0x00003d20 beq.w 0x46b8 | goto label_18;
| }
0x00003d24 ldr.w r3, [pc, 0x9c0] |
0x00003d28 add.w sl, sp, 0x60 | sl += size;
0x00003d2c str r7, [sp, 0x18] | var_18h = r7;
0x00003d2e add r3, pc | r3 = 0x841a;
0x00003d30 str r3, [sp, 0x28] | var_28h = r3;
0x00003d32 ldr.w r3, [pc, 0x9b8] |
0x00003d36 add r3, pc | r3 = 0x8428;
0x00003d38 str r3, [sp, 0x1c] | var_1ch = r3;
0x00003d3a b 0x3d50 |
| while (r0 != 0) {
0x00003d3c blx 0x22f4 | r0 = gzerror ();
0x00003d40 ldr r3, [r0] | r3 = *(r0);
0x00003d42 cmp r3, 0 |
| if (r3 <= 0) {
0x00003d44 ble.w 0x4022 | goto label_19;
| }
| label_3:
0x00003d48 ldr r5, [sb, 4]! | r5 = *((sb += 4));
0x00003d4c cmp r5, 0 |
| if (r5 == 0) {
0x00003d4e beq 0x3dc2 | goto label_20;
| }
| label_0:
0x00003d50 mov r1, sl | r1 = sl;
0x00003d52 mov r0, r5 | r0 = r5;
0x00003d54 blx 0x212c | r0 = realloc (r0, r1);
0x00003d58 mov r4, r0 | r4 = r0;
0x00003d5a cmp r0, 0 |
0x00003d5c bne 0x3d3c |
| }
0x00003d5e mov r0, sl | r0 = sl;
0x00003d60 bl 0xa960 | fcn_0000a960 (r0);
0x00003d64 ldr r3, [fp, -0xc8] | r3 = var_bp_c8h;
0x00003d68 strd r0, r1, [sp, 0x10] | __asm ("strd r0, r1, [var_10h]");
0x00003d6c and r3, r3, 0xf000 | r3 &= 0xf000;
0x00003d70 cmp.w r3, 0x4000 |
| if (r3 == 0x4000) {
0x00003d74 beq.w 0x3f8e | goto label_21;
| }
0x00003d78 mov r2, r4 | r2 = r4;
0x00003d7a mov r1, r5 | r1 = r5;
0x00003d7c mov r0, r8 | r0 = r8;
0x00003d7e bl 0x3a38 | fcn_00003a38 (r0, r1, r2);
| label_4:
0x00003d82 mov r0, r5 | r0 = r5;
0x00003d84 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003d88 mov r2, r0 | r2 = r0;
0x00003d8a adds r0, 9 | r0 += 9;
0x00003d8c adds r6, r2, 1 | r6 = r2 + 1;
0x00003d8e blx 0x21fc | r0 = fcn_000021fc ();
0x00003d92 mov r4, r0 | r4 = r0;
0x00003d94 cmp r0, 0 |
| if (r0 == 0) {
0x00003d96 beq.w 0x46be | goto label_22;
| }
0x00003d9a mov r1, r5 | r1 = r5;
0x00003d9c mov r2, r6 | r2 = r6;
0x00003d9e ldrd r5, r6, [sp, 0x10] | __asm ("ldrd r5, r6, [var_10h]");
0x00003da2 strd r5, r6, [r0], 8 | __asm ("strd r5, r6, [r0], 8");
0x00003da6 blx 0x20c0 | mmap64 ()
0x00003daa ldr r0, [sp, 0x18] | r0 = var_18h;
0x00003dac mov r1, r4 | r1 = r4;
0x00003dae bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
0x00003db2 cmp r0, 0 |
| if (r0 == 0) {
0x00003db4 beq.w 0x43ba | goto label_23;
| }
0x00003db8 ldr r5, [sb, 4]! | r5 = *((sb += 4));
0x00003dbc str r0, [sp, 0x18] | var_18h = r0;
0x00003dbe cmp r5, 0 |
| if (r5 != 0) {
0x00003dc0 bne 0x3d50 | goto label_0;
| }
| label_20:
0x00003dc2 ldr r7, [sp, 0x18] | r7 = var_18h;
| label_16:
0x00003dc4 movs r1, 0x20 | r1 = 0x20;
0x00003dc6 movs r0, 1 | r0 = 1;
0x00003dc8 blx 0x1fd0 | calloc (r0, r1);
0x00003dcc ldr r2, [sp, 0x30] | r2 = var_30h;
0x00003dce str r0, [sp, 0x24] | var_24h = r0;
0x00003dd0 str r0, [r2] | *(r2) = r0;
0x00003dd2 ldr r2, [fp, -0xdc] | r2 = var_5ch;
0x00003dd6 str r2, [sp, 0x10] | var_10h = r2;
0x00003dd8 cmp r0, 0 |
| if (r0 == 0) {
0x00003dda beq.w 0x43c2 | goto label_17;
| }
0x00003dde ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00003de0 str r7, [r0, 0x1c] | *((r0 + 0x1c)) = r7;
0x00003de2 str r1, [r0] | *(r0) = r1;
0x00003de4 cmp r2, 0 |
| if (r2 == 0) {
0x00003de6 beq.w 0x4118 | goto label_24;
| }
0x00003dea ldr.w r3, [pc, 0x904] |
0x00003dee str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x00003df2 add r3, pc | r3 = 0x84e8;
0x00003df4 str r3, [sp, 0x38] | var_38h = r3;
0x00003df6 ldr.w r3, [pc, 0x8fc] |
0x00003dfa add r3, pc | r3 = 0x84f4;
0x00003dfc str r3, [sp, 0x3c] | var_3ch = r3;
0x00003dfe b 0x3e1a |
| while (r4 < r0) {
| label_5:
0x00003e00 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00003e02 blx 0x20a4 | fcn_000020a4 ();
0x00003e06 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00003e08 bl 0x385c | fcn_0000385c (r0);
0x00003e0c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00003e0e str r0, [sp, 0x10] | var_10h = r0;
0x00003e10 str r0, [r2, -0xdc] | *((r2 - 0xdc)) = r0;
0x00003e14 cmp r0, 0 |
| if (r0 == 0) {
0x00003e16 beq.w 0x4116 | goto label_25;
| }
0x00003e1a ldr r3, [sp, 0x10] | r3 = var_10h;
0x00003e1c ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00003e1e ldrb r3, [r2, 4] | r3 = *((r2 + 4));
0x00003e20 ldr r0, [r2] | r0 = *(r2);
0x00003e22 str r2, [sp, 0x18] | var_18h = r2;
0x00003e24 cmp r3, 0 |
| if (r3 == 0) {
0x00003e26 beq.w 0x4034 | goto label_26;
| }
| label_6:
0x00003e2a mov.w r1, 0x80000 | r1 = 0x80000;
0x00003e2e blx 0x21cc | r0 = fcn_000021cc ();
0x00003e32 subs r4, r0, 0 | r4 = r0 - 0;
0x00003e34 blt 0x3e00 |
| }
0x00003e36 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00003e38 movs r3, 0 | r3 = 0;
0x00003e3a ldr.w r1, [pc, 0x8bc] |
0x00003e3e str r3, [r2, -0xd8] | *((r2 - 0xd8)) = r3;
0x00003e42 add r1, pc | r1 = 0x8540;
0x00003e44 blx 0x1fc4 | r0 = fdopen ();
0x00003e48 mov sb, r0 | sb = r0;
0x00003e4a cmp r0, 0 |
| if (r0 == 0) {
0x00003e4c beq.w 0x46c2 | goto label_27;
| }
0x00003e4e strh r1, [r7, 0x20] | *((r7 + 0x20)) = r1;
0x00003e50 ldr.w r3, [pc, 0x8a8] |
0x00003e54 add.w sl, sp, 0x60 | sl += size;
0x00003e58 ldr.w fp, [pc, 0x8a4] |
0x00003e5c add r3, pc | r3 = 0x855c;
0x00003e5e add fp, pc | fp = 0x8562;
0x00003e60 str r3, [sp, 0x20] | var_20h = r3;
0x00003e62 b 0x3ece | goto label_28;
| label_2:
0x00003e64 ldr.w r1, [pc, 0x89c] |
0x00003e68 mov r0, r6 | r0 = r6;
0x00003e6a add r1, pc | r1 = 0x8572;
0x00003e6c blx 0x201c | r0 = fcn_0000201c ();
0x00003e70 mov r5, r0 | r5 = r0;
0x00003e72 cmp r0, 0 |
| if (r0 == 0) {
0x00003e74 beq.w 0x4064 | goto label_29;
| }
0x00003e78 ldr.w r1, [pc, 0x88c] |
0x00003e7c mov r0, r6 | r0 = r6;
0x00003e7e add r1, pc | r1 = 0x858a;
0x00003e80 blx 0x201c | r0 = fcn_0000201c ();
0x00003e84 mov r5, r0 | r5 = r0;
0x00003e86 cmp r0, 0 |
| if (r0 == 0) {
0x00003e88 beq.w 0x409a | goto label_30;
| }
0x00003e8c ldr.w r1, [pc, 0x87c] |
0x00003e90 mov r0, r6 | r0 = r6;
0x00003e92 add r1, pc | r1 = 0x85a2;
0x00003e94 blx 0x201c | r0 = fcn_0000201c ();
0x00003e98 mov r5, r0 | r5 = r0;
0x00003e9a cmp r0, 0 |
| if (r0 == 0) {
0x00003e9c beq.w 0x40d6 | goto label_31;
| }
0x00003ea0 ldr.w r1, [pc, 0x86c] |
0x00003ea4 mov r0, r6 | r0 = r6;
0x00003ea6 add r1, pc | r1 = 0x85ba;
0x00003ea8 blx 0x201c | r0 = fcn_0000201c ();
0x00003eac mov r5, r0 | r5 = r0;
0x00003eae cmp r0, 0 |
| if (r0 == 0) {
0x00003eb0 beq.w 0x437c | goto label_32;
| }
0x00003eb4 ldr.w r1, [pc, 0x85c] |
0x00003eb8 mov r0, r6 | r0 = r6;
0x00003eba add r1, pc | r1 = 0x85d2;
0x00003ebc blx 0x201c | r0 = fcn_0000201c ();
0x00003ec0 mov r5, r0 | r5 = r0;
0x00003ec2 cmp r0, 0 |
| if (r0 == 0) {
0x00003ec4 beq.w 0x43f8 | goto label_33;
| }
| do {
| label_1:
0x00003ec8 mov r0, r4 | r0 = r4;
0x00003eca blx 0x20a4 | fcn_000020a4 ();
| label_28:
0x00003ece mov r1, sl | r1 = sl;
0x00003ed0 mov r0, sb | r0 = sb;
0x00003ed2 bl 0xa838 | r0 = fcn_0000a838 (r0, r1);
0x00003ed6 mov r4, r0 | r4 = r0;
0x00003ed8 cmp r0, 0 |
| if (r0 == 0) {
0x00003eda beq.w 0x402c | goto label_34;
| }
0x00003ede ldrb r3, [r4] | r3 = *(r4);
0x00003ee0 cmp r3, 0x23 |
0x00003ee2 it ne |
| if (r3 != 0x23) {
0x00003ee4 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x00003ee6 beq 0x3ec8 |
| } while (r3 == 0x23);
0x00003ee8 add r7, sp, 0xc8 | r7 += var_c8h;
0x00003eea mov r1, fp | r1 = fp;
0x00003eec mov r2, r7 | r2 = r7;
0x00003eee blx 0x21a8 | r0 = fcn_000021a8 ();
0x00003ef2 mov r6, r0 | r6 = r0;
0x00003ef4 cmp r0, 0 |
| if (r0 == 0) {
0x00003ef6 beq 0x3ec8 | goto label_1;
| }
0x00003ef8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00003efa blx 0x201c | r0 = fcn_0000201c ();
0x00003efe mov r5, r0 | r5 = r0;
0x00003f00 cmp r0, 0 |
| if (r0 != 0) {
0x00003f02 bne 0x3e64 | goto label_2;
| }
0x00003f04 mov r2, r7 | r2 = r7;
0x00003f06 mov r1, fp | r1 = fp;
0x00003f08 blx 0x21a8 | fcn_000021a8 ();
0x00003f0c mov r2, r7 | r2 = r7;
0x00003f0e mov r6, r0 | r6 = r0;
0x00003f10 mov r1, fp | r1 = fp;
0x00003f12 mov r0, r5 | r0 = r5;
0x00003f14 blx 0x21a8 | fcn_000021a8 ();
0x00003f16 strd r4, r6, [r8, -0x1c] | __asm ("strd r4, r6, [r8, -0x1c]");
0x00003f1a mov r0, r6 | r0 = r6;
0x00003f1c bl 0xa5e0 | r0 = fcn_0000a5e0 (r0);
0x00003f20 cmp r0, 0 |
| if (r0 < 0) {
0x00003f22 blt 0x3ec8 | goto label_1;
| }
0x00003f24 mov r0, r7 | r0 = r7;
0x00003f26 bl 0xa5e0 | r0 = fcn_0000a5e0 (r0);
0x00003f2a cmp r0, 0 |
| if (r0 < 0) {
0x00003f2c blt 0x3ec8 | goto label_1;
| }
0x00003f2e mov r0, r6 | r0 = r6;
0x00003f30 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00003f34 adds r3, r0, 1 | r3 = r0 + 1;
0x00003f36 mov r0, r7 | r0 = r7;
0x00003f38 str r3, [sp, 0x28] | var_28h = r3;
0x00003f3a blx 0x22a8 | fcn_000022a8 ();
0x00003f3e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00003f40 adds r2, r0, 1 | r2 = r0 + 1;
0x00003f42 mov r8, r0 | r8 = r0;
0x00003f44 str r2, [sp, 0x2c] | var_2ch = r2;
0x00003f46 adds r0, r3, r2 | r0 = r3 + r2;
0x00003f48 adds r0, 4 | r0 += 4;
0x00003f4a blx 0x21fc | r0 = fcn_000021fc ();
0x00003f4e mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00003f50 cbz r0, 0x3f86 |
0x00003f52 add.w r8, r8, 5 | r8 += 5;
0x00003f56 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00003f58 add r8, r0 | r8 += r0;
0x00003f5a mov r1, r7 | r1 = r7;
0x00003f5c str r0, [sp, 0x2c] | var_2ch = r0;
0x00003f5e str r8, [r0], 4 | *(r0) = r8;
| r0 += 4;
0x00003f62 blx 0x20c0 | mmap64 ()
0x00003f66 mov r1, r6 | r1 = r6;
0x00003f68 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00003f6a mov r0, r8 | r0 = r8;
0x00003f6c blx 0x20c0 | mmap64 ()
0x00003f70 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00003f72 ldr r6, [sp, 0x24] | r6 = var_24h;
0x00003f74 mov r1, r3 | r1 = r3;
0x00003f76 str r3, [sp, 0x28] | var_28h = r3;
0x00003f78 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00003f7a bl 0x37c0 | fcn_000037c0 (r0, r1);
0x00003f7e ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r0 == 0) {
0x00003f80 cbz r0, 0x3f86 | goto label_35;
| }
0x00003f82 mov r3, r5 | r3 = r5;
0x00003f84 str r0, [r6, 4] | *((r6 + 4)) = r0;
| }
| label_35:
0x00003f86 mov r0, r3 | r0 = r3;
0x00003f88 blx 0x20a4 | fcn_000020a4 ();
0x00003f8c b 0x3ec8 | goto label_1;
| label_21:
0x00003f8e mov r0, r5 | r0 = r5;
0x00003f90 blx 0x21b4 | r0 = fcn_000021b4 ();
0x00003f94 mov r6, r0 | r6 = r0;
0x00003f96 cmp r0, 0 |
| if (r0 == 0) {
0x00003f98 beq.w 0x3d48 | goto label_3;
| }
0x00003f9c blx 0x23dc | r0 = fcn_000023dc ();
| if (r0 == 0) {
0x00003fa0 cbz r0, 0x401a | goto label_36;
| }
0x00003fa2 strd sb, sl, [sp, 0x20] | __asm ("strd sb, sl, [var_24h]");
0x00003fa6 add r3, sp, 0xc8 | r3 += var_c8h;
0x00003fa8 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x00003fac mov sl, r0 | sl = r0;
0x00003fae mov r7, r3 | r7 = r3;
| do {
0x00003fb0 add.w r4, sl, 0x13 | r4 = sl + 0x13;
0x00003fb4 mov r0, r4 | r0 = r4;
0x00003fb6 blx 0x22a8 | fcn_000022a8 ();
0x00003fba ldrb.w r2, [sl, 0x13] | r2 = *((sl + 0x13));
0x00003fbc movs r0, 0x13 | r0 = 0x13;
0x00003fbe mov sl, r0 | sl = r0;
0x00003fc0 cmp r2, 0x2e |
| if (r2 != 0x2e) {
0x00003fc2 beq 0x400a |
0x00003fc4 cmp r0, 5 |
| if (r0 < 5) {
0x00003fc6 bls 0x400a | goto label_37;
| }
0x00003fc8 subs r0, 5 | r0 -= 5;
0x00003fca mov r1, sb | r1 = sb;
0x00003fcc add r0, r4 | r0 += r4;
0x00003fce blx 0x201c | r0 = fcn_0000201c ();
| if (r0 != 0) {
0x00003fd2 cbz r0, 0x3fe2 |
0x00003fd4 sub.w r0, sl, 6 | r0 = sl - 6;
0x00003fd8 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00003fda add r0, r4 | r0 += r4;
0x00003fdc blx 0x201c | r0 = fcn_0000201c ();
| if (r0 != 0) {
0x00003fe0 cbnz r0, 0x400a | goto label_37;
| }
| }
0x00003fe2 mov r0, r6 | r0 = r6;
0x00003fe4 blx 0x23f4 | fcn_000023f4 ();
0x00003fe8 movs r3, 0 | r3 = 0;
0x00003fea mov r2, r7 | r2 = r7;
0x00003fec mov r1, r4 | r1 = r4;
0x00003fee blx 0x21e4 | fcn_000021e4 ();
0x00003ff2 ldr r3, [fp, -0x60] | r3 = var_bp_60h;
0x00003ff6 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00003ffa cmp.w r3, 0x4000 |
| if (r3 == 0x4000) {
0x00003ffe beq 0x400a | goto label_37;
| }
0x00004000 mov r2, r4 | r2 = r4;
0x00004002 mov r1, r5 | r1 = r5;
0x00004004 mov r0, r8 | r0 = r8;
0x00004006 bl 0x3a38 | fcn_00003a38 (r0, r1, r2);
| }
| label_37:
0x0000400a mov r0, r6 | r0 = r6;
0x0000400c blx 0x23dc | r0 = fcn_000023dc ();
0x00004010 mov sl, r0 | sl = r0;
0x00004012 cmp r0, 0 |
0x00004014 bne 0x3fb0 |
| } while (r0 != 0);
0x00004016 ldrd sb, sl, [sp, 0x20] | __asm ("ldrd sb, sl, [var_24h]");
| label_36:
0x0000401a mov r0, r6 | r0 = r6;
0x0000401c blx 0x2454 | fcn_00002454 ();
0x00004020 b 0x3d82 | goto label_4;
| label_19:
0x00004022 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00004026 vstr d16, [sp, 0x10] | __asm ("vstr d16, [sp, 0x10]");
0x0000402a b 0x3d82 | goto label_4;
| label_34:
0x0000402c mov r0, sb | r0 = sb;
0x0000402e blx 0x236c | fcn_0000236c ();
0x00004032 b 0x3e00 | goto label_5;
| label_26:
0x00004034 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00004036 subs r4, r3, 4 | r4 = r3 - 4;
0x00004038 mov r3, r2 | r3 = r2;
0x0000403a adds r3, 5 | r3 += 5;
0x0000403c movs r2, 1 | r2 = 1;
0x0000403e str r3, [sp, 8] | var_8h = r3;
0x00004040 ldr.w r3, [pc, 0x6d4] |
0x00004044 add r3, pc | r3 = 0x8760;
0x00004046 strd r3, r0, [sp] | __asm ("strd r3, r0, [sp]");
0x0000404a mov.w r3, 0x1000 | r3 = 0x1000;
0x0000404e mov r1, r3 | r1 = r3;
0x00004050 mov r0, r4 | r0 = r4;
0x00004052 blx 0x2460 | r0 = fcn_00002460 ();
0x00004056 cmp.w r0, 0x1000 |
0x0000405a it lt |
| if (r0 < 0x1000) {
0x0000405c movlt r0, r4 | r0 = r4;
| goto label_38;
| }
| if (r0 < 0x1000) {
| label_38:
0x0000405e blt.w 0x3e2a | goto label_6;
| }
0x00004062 b 0x3e00 | goto label_5;
| label_29:
0x00004064 mov r2, r7 | r2 = r7;
0x00004066 mov r1, fp | r1 = fp;
0x00004068 blx 0x21a8 | r0 = fcn_000021a8 ();
0x0000406c mov r6, r0 | r6 = r0;
0x0000406e bl 0xa5e0 | r0 = fcn_0000a5e0 (r0);
0x00004072 cmp r0, 0 |
| if (r0 < 0) {
0x00004074 blt.w 0x3ec8 | goto label_1;
| }
0x00004078 mov r0, r6 | r0 = r6;
0x0000407a blx 0x20fc | r0 = stack_chk_fail ();
0x0000407e mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00004080 cbz r0, 0x4092 |
0x00004082 ldr r7, [sp, 0x24] | r7 = var_24h;
0x00004084 mov r1, r6 | r1 = r6;
0x00004086 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00004088 bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
| if (r0 == 0) {
0x0000408c cbz r0, 0x4092 | goto label_39;
| }
0x0000408e mov r6, r5 | r6 = r5;
0x00004090 str r0, [r7, 8] | *((r7 + 8)) = r0;
| }
| label_39:
0x00004092 mov r0, r6 | r0 = r6;
0x00004094 blx 0x20a4 | fcn_000020a4 ();
0x00004098 b 0x3ec8 | goto label_1;
| label_30:
0x0000409a mov r2, r7 | r2 = r7;
0x0000409c mov r1, fp | r1 = fp;
0x0000409e blx 0x21a8 | fcn_000021a8 ();
0x000040a2 ldr.w r1, [pc, 0x678] |
0x000040a6 mov r3, r0 | r3 = r0;
0x000040a8 mov r2, r7 | r2 = r7;
0x000040aa mov r0, r5 | r0 = r5;
0x000040ac mov r5, r3 | r5 = r3;
0x000040ae add r1, pc | r1 = 0x87d0;
0x000040b0 blx 0x21a8 | r0 = fcn_000021a8 ();
0x000040b4 mov r6, r0 | r6 = r0;
0x000040b6 mov r0, r5 | r0 = r5;
0x000040b8 bl 0xa5e0 | fcn_0000a5e0 (r0);
0x000040bc clz r3, r6 | r3 &= r6;
0x000040c0 lsrs r3, r3, 5 | r3 >>= 5;
0x000040c2 orrs.w r3, r3, r0, lsr 31 | r3 |= (r0 >> 31);
| if (r3 != r3) {
0x000040c6 bne.w 0x3ec8 | goto label_1;
| }
0x000040ca ldr r0, [sp, 0x24] | r0 = var_24h;
0x000040cc mov r2, r6 | r2 = r6;
0x000040ce mov r1, r5 | r1 = r5;
0x000040d0 bl 0x3b88 | fcn_00003b88 (r0, r1, r2);
0x000040d4 b 0x3ec8 | goto label_1;
| label_31:
0x000040d6 mov r2, r7 | r2 = r7;
0x000040d8 mov r1, fp | r1 = fp;
0x000040da blx 0x21a8 | fcn_000021a8 ();
0x000040de ldr.w r1, [pc, 0x640] |
0x000040e2 mov r3, r0 | r3 = r0;
0x000040e4 mov r2, r7 | r2 = r7;
0x000040e6 mov r0, r5 | r0 = r5;
0x000040e8 mov r5, r3 | r5 = r3;
0x000040ea add r1, pc | r1 = 0x8810;
0x000040ec blx 0x21a8 | r0 = fcn_000021a8 ();
0x000040f0 mov r6, r0 | r6 = r0;
0x000040f2 mov r0, r5 | r0 = r5;
0x000040f4 bl 0xa5e0 | fcn_0000a5e0 (r0);
0x000040f8 clz r3, r6 | r3 &= r6;
0x000040fc lsrs r3, r3, 5 | r3 >>= 5;
0x000040fe orrs.w r3, r3, r0, lsr 31 | r3 |= (r0 >> 31);
| if (r3 != r3) {
0x00004102 bne.w 0x3ec8 | goto label_1;
| }
0x00004106 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00004108 mov r1, r6 | r1 = r6;
0x0000410a mov r0, r5 | r0 = r5;
0x0000410c add.w r2, r3, 0x14 | r2 = r3 + 0x14;
0x00004110 bl 0x3b28 | fcn_00003b28 (r0, r1, r2);
0x00004114 b 0x3ec8 | goto label_1;
| label_25:
0x00004116 mov fp, r2 |
| label_24:
0x00004118 ldr.w r0, [pc, 0x608] |
0x0000411c mov.w r1, 0x80000 | r1 = 0x80000;
0x00004120 add r0, pc | r0 = 0x8848;
0x00004122 blx 0x21cc | r0 = fcn_000021cc ();
0x00004126 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00004128 blt.w 0x4242 | goto label_15;
| }
0x0000412c sub.w r4, fp, 4 | r4 = fp - 4;
0x00004130 mov.w r2, 0x1000 | r2 = 0x1000;
0x00004134 mov r1, r4 | r1 = r4;
0x00004136 bl 0xa69c | r0 = fcn_0000a69c (r0, r1, r2);
0x0000413a mov r6, r0 | r6 = r0;
0x0000413c mov r0, r5 | r0 = r5;
0x0000413e blx 0x2448 | fcn_00002448 ();
0x00004142 cmp r6, 0 |
| if (r6 < 0) {
0x00004144 blt.w 0x46b0 | goto label_40;
| }
0x00004148 ldr.w r3, [pc, 0x5dc] |
0x0000414c movs r6, 0 | r6 = 0;
0x0000414e mov r7, r6 | r7 = r6;
0x00004150 mov r0, r6 | r0 = r6;
0x00004152 mov r8, r4 | r8 = r4;
0x00004154 movs r2, 1 | r2 = 1;
0x00004156 mov r5, r6 | r5 = r6;
0x00004158 add r3, pc | r3 = 0x8884;
0x0000415a str r3, [sp, 0x10] | var_10h = r3;
| do {
| label_7:
0x0000415c mov r1, r4 | r1 = r4;
0x0000415e ldrb r3, [r4], 1 | r3 = *(r4);
| r4++;
0x00004162 cmp r3, 0x2e |
| if (r3 > 0x2e) {
0x00004164 bhi.w 0x428a | goto label_41;
| }
0x00004168 cmp r3, 0x2e |
0x0000416a bhi 0x415c |
| } while (r3 > 0x2e);
0x0000416c addw ip, pc, 8 | __asm ("addw ip, pc, 8");
0x00004170 ldr.w r3, [ip, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((ip + offset_0));
0x00004174 add ip, r3 |
0x00004176 bx ip | return void (*ip)() ();
| label_15:
0x00004242 movs r0, 0 | r0 = 0;
| label_8:
0x00004244 ldr.w r2, [pc, 0x4e4] | r2 = *(0x0000472c);
0x00004248 add.w r1, sp, 0x1120 | r1 += var_1120h;
0x0000424c ldr.w r3, [pc, 0x490] | r3 = *(0x46e0);
0x00004250 adds r1, 0x14 | r1 += 0x14;
0x00004252 add r2, pc | r2 += pc;
0x00004254 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00004256 ldr r2, [r3] | r2 = *(0x46e0);
0x00004258 ldr r3, [r1] | r3 = *(r1);
0x0000425a eors r2, r3 | r2 ^= r3;
0x0000425c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004260 bne.w 0x46cc | goto label_42;
| }
0x00004264 add.w sp, sp, 0x1120 |
0x00004268 add sp, 0x1c |
0x0000426a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_41:
0x0000428a cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x0000428c bne.w 0x415c | goto label_7;
| }
0x00004290 cmp r2, 2 |
| if (r2 == 2) {
0x00004292 beq.w 0x4658 | goto label_43;
| }
0x00004296 cmp r2, 1 |
0x00004298 it eq |
| if (r2 != 1) {
0x0000429a moveq r2, 0 | r2 = 0;
| }
0x0000429c b 0x415c | goto label_7;
| label_32:
0x0000437c mov r2, r7 | r2 = r7;
0x0000437e mov r1, fp | r1 = fp;
0x00004380 blx 0x21a8 | fcn_000021a8 ();
0x00004384 ldr r1, [pc, 0x3b0] |
0x00004386 mov r3, r0 | r3 = r0;
0x00004388 mov r2, r7 | r2 = r7;
0x0000438a mov r0, r5 | r0 = r5;
0x0000438c mov r5, r3 | r5 = r3;
0x0000438e add r1, pc | r1 = 0x8aca;
0x00004390 blx 0x21a8 | r0 = fcn_000021a8 ();
0x00004394 mov r6, r0 | r6 = r0;
0x00004396 mov r0, r5 | r0 = r5;
0x00004398 bl 0xa5e0 | fcn_0000a5e0 (r0);
0x0000439c clz r3, r6 | r3 &= r6;
0x000043a0 lsrs r3, r3, 5 | r3 >>= 5;
0x000043a2 orrs.w r3, r3, r0, lsr 31 | r3 |= (r0 >> 31);
| if (r3 != r3) {
0x000043a6 bne.w 0x3ec8 | goto label_1;
| }
0x000043aa ldr r3, [sp, 0x24] | r3 = var_24h;
0x000043ac mov r1, r6 | r1 = r6;
0x000043ae mov r0, r5 | r0 = r5;
0x000043b0 add.w r2, r3, 0x10 | r2 = r3 + 0x10;
0x000043b4 bl 0x3b28 | fcn_00003b28 (r0, r1, r2);
0x000043b8 b 0x3ec8 | goto label_1;
| label_23:
0x000043ba mov r0, r4 | r0 = r4;
0x000043bc ldr r7, [sp, 0x18] | r7 = var_18h;
0x000043be blx 0x20a4 | fcn_000020a4 ();
| label_17:
0x000043c2 ldr r4, [fp, -0xdc] | r4 = var_5ch;
| if (r4 == 0) {
0x000043c6 cbz r4, 0x43de | goto label_44;
| }
| do {
0x000043c8 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000043ca blx 0x20a4 | fcn_000020a4 ();
0x000043ce mov r0, r4 | r0 = r4;
0x000043d0 bl 0x385c | r0 = fcn_0000385c (r0);
0x000043d4 mov r4, r0 | r4 = r0;
0x000043d6 str r0, [fp, -0xdc] | var_5ch = r0;
0x000043da cmp r0, 0 |
0x000043dc bne 0x43c8 |
| } while (r0 != 0);
| if (r7 == 0) {
| label_44:
0x000043de cbz r7, 0x43f2 | goto label_45;
| }
| do {
0x000043e0 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x000043e2 blx 0x20a4 | fcn_000020a4 ();
0x000043e6 mov r0, r7 | r0 = r7;
0x000043e8 bl 0x385c | r0 = fcn_0000385c (r0);
0x000043ec mov r7, r0 | r7 = r0;
0x000043ee cmp r7, 0 |
0x000043f0 bne 0x43e0 |
| } while (r7 != 0);
| label_45:
0x000043f2 mvn r0, 0xb | r0 = ~0xb;
0x000043f6 b 0x4244 | goto label_8;
| label_33:
0x000043f8 mov r2, r7 | r2 = r7;
0x000043fa mov r1, fp | r1 = fp;
0x000043fc blx 0x21a8 | fcn_000021a8 ();
0x00004400 ldr r1, [pc, 0x338] |
0x00004402 mov r3, r0 | r3 = r0;
0x00004404 mov r2, r7 | r2 = r7;
0x00004406 mov r0, r5 | r0 = r5;
0x00004408 mov r5, r3 | r5 = r3;
0x0000440a str r3, [sp, 0x48] | var_48h = r3;
0x0000440c add r1, pc | r1 = 0x8b4c;
0x0000440e blx 0x21a8 | r0 = fcn_000021a8 ();
0x00004412 mov r7, r0 | r7 = r0;
0x00004414 mov r0, r5 | r0 = r5;
0x00004416 bl 0xa5e0 | fcn_0000a5e0 (r0);
0x0000441a clz r3, r7 | r3 &= r7;
0x0000441e lsrs r3, r3, 5 | r3 >>= 5;
0x00004420 orrs.w r3, r3, r0, lsr 31 | r3 |= (r0 >> 31);
| if (r3 != r3) {
0x00004424 bne.w 0x3ec8 | goto label_1;
| }
0x00004428 mov r0, r5 | r0 = r5;
0x0000442a mov r6, r7 | r6 = r7;
0x0000442c blx 0x22a8 | r0 = fcn_000022a8 ();
0x00004430 mov r3, r0 | r3 = r0;
0x00004432 mov r5, r7 | r5 = r7;
0x00004434 adds r3, 1 | r3++;
0x00004436 mov r8, r7 | r8 = r7;
0x00004438 str r3, [sp, 0x54] | var_54h = r3;
0x0000443a mov r3, r7 | r3 = r7;
0x0000443c movs r2, 0 | r2 = 0;
0x0000443e str r0, [sp, 0x50] | var_50h = r0;
0x00004440 str r2, [sp, 0x28] | var_28h = r2;
0x00004442 strd r2, r2, [sp, 0x30] | __asm ("strd r2, r2, [var_30h]");
0x00004446 strd r2, r2, [sp, 0x40] | __asm ("strd r2, r2, [var_44h]");
0x0000444a str r4, [sp, 0x4c] | var_4ch = r4;
| do {
| label_9:
0x0000444c mov r2, r6 | r2 = r6;
0x0000444e ldrb r4, [r6], 1 | r4 = *(r6);
| r6++;
| if (r4 == 0) {
0x00004452 cbz r4, 0x447c | goto label_46;
| }
0x00004454 str r2, [sp, 0x2c] | var_2ch = r2;
0x00004456 blx 0x226c | r0 = fcn_0000226c ();
0x0000445a ldr r0, [r0] | r0 = *(r0);
0x0000445c ldrh.w r0, [r0, r4, lsl 1] | offset_1 = r4 << 1;
| r0 = *((r0 + offset_1));
0x00004460 ands r0, r0, 0x2000 | r0 &= 0x2000;
| if (r0 == r0) {
0x00004464 beq.w 0x45fe | goto label_47;
| }
0x00004468 ldrd r3, r2, [sp, 0x28] | __asm ("ldrd r3, r2, [var_28h]");
0x0000446c cmp r3, 0 |
| if (r3 != 0) {
0x0000446e bne.w 0x4654 | goto label_48;
| }
0x00004472 cmp r2, r8 |
0x00004474 mov.w r3, 1 | r3 = 1;
0x00004478 str r3, [sp, 0x28] | var_28h = r3;
0x0000447a bls 0x444c |
| } while (r2 < r8);
| label_46:
0x0000447c sub.w r2, r2, r8 | r2 -= r8;
0x00004480 cmp r2, 4 |
| if (r2 == 4) {
0x00004482 beq.w 0x45b4 | goto label_49;
| }
0x00004486 cmp r2, 5 |
| if (r2 == 5) {
0x00004488 beq.w 0x45e6 | goto label_50;
| }
| label_11:
0x0000448c ldr r1, [sp, 0x28] | r1 = var_28h;
0x0000448e cmp r4, 0 |
0x00004490 ite ne |
| if (r4 == 0) {
0x00004492 movne r1, 0 | r1 = 0;
| }
| if (r4 != 0) {
0x00004494 andeq r1, r1, 1 | r1 &= 1;
| }
| if (r1 != 0) {
0x00004498 cbnz r1, 0x44bc | goto label_51;
| }
0x0000449a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0000449c cmp r3, 1 |
| if (r3 == 1) {
0x0000449e beq.w 0x4602 | goto label_52;
| }
0x000044a2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000044a4 cmp r3, 2 |
| if (r3 == 2) {
0x000044a6 bne 0x44b6 |
0x000044a8 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000044aa adds r1, 1 | r1++;
0x000044ac adds r3, r2, r1 | r3 = r2 + r1;
0x000044ae str r3, [sp, 0x34] | var_34h = r3;
0x000044b0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000044b2 adds r3, 1 | r3++;
0x000044b4 str r3, [sp, 0x44] | var_44h = r3;
| }
| label_12:
0x000044b6 mov r8, r6 | r8 = r6;
0x000044b8 cmp r4, 0 |
| if (r4 != 0) {
0x000044ba bne 0x444c | goto label_9;
| }
| label_51:
0x000044bc ldrd r4, r0, [sp, 0x4c] | __asm ("ldrd r4, r0, [var_50h]");
0x000044c0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000044c2 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000044c4 adds r0, 0x15 | r0 += 0x15;
0x000044c6 add r0, r3 | r0 += r3;
0x000044c8 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000044ca lsls r6, r2, 2 | r6 = r2 << 2;
0x000044cc lsl.w r8, r3, 2 | r8 = r3 << 2;
0x000044d0 add r0, r8 | r0 += r8;
0x000044d2 add r0, r6 | r0 += r6;
0x000044d4 blx 0x21fc | fcn_000021fc ();
0x000044d8 str r0, [sp, 0x30] | var_30h = r0;
0x000044da cmp r0, 0 |
| if (r0 == 0) {
0x000044dc beq.w 0x3ec8 | goto label_1;
| }
0x000044de add r4, sp, 0x3d0 | r4 = sp + 0x3d0;
0x000044e0 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000044e2 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000044e4 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000044e6 str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x000044e8 add.w r2, r0, 0x14 | r2 = r0 + 0x14;
0x000044ec str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x000044ee add.w r3, r2, r8 | r3 = r2 + r8;
0x000044f2 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000044f4 adds r0, r3, r6 | r0 = r3 + r6;
0x000044f6 ldr.w r8, [sp, 0x54] | r8 = var_54h;
0x000044fa ldr r6, [sp, 0x30] | r6 = var_30h;
0x000044fc mov r2, r8 | r2 = r8;
0x000044fe str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00004500 str r0, [r6] | *(r6) = r0;
0x00004502 blx 0x20c0 | mmap64 ()
0x00004506 ldr r3, [r6] | r3 = *(r6);
0x00004508 mov r2, r8 | r2 = r8;
0x0000450a mov.w r8, 0 | r8 = 0;
0x0000450e str.w r8, [sp, 0x2c] | __asm ("str.w r8, [var_2ch]");
0x00004512 add r2, r3 | r2 += r3;
0x00004514 strd r8, r8, [sp, 0x40] | __asm ("strd r8, r8, [var_44h]");
0x00004516 ldrh r0, [r2] | r0 = *(r2);
0x00004518 str r2, [sp, 0x34] | var_34h = r2;
| do {
| label_10:
0x0000451a mov r2, r5 | r2 = r5;
0x0000451c ldrb r6, [r5], 1 | r6 = *(r5);
| r5++;
| if (r6 == 0) {
0x00004520 cbz r6, 0x4548 | goto label_53;
| }
0x00004522 str r2, [sp, 0x28] | var_28h = r2;
0x00004524 blx 0x226c | r0 = fcn_0000226c ();
0x00004528 ldr r3, [r0] | r3 = *(r0);
0x0000452a ldrh.w r3, [r3, r6, lsl 1] | offset_2 = r6 << 1;
| r3 = *((r3 + offset_2));
0x0000452e ands r3, r3, 0x2000 | r3 &= 0x2000;
| if (r3 == r3) {
0x00004532 beq.w 0x464c | goto label_54;
| }
0x00004536 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00004538 cmp.w r8, 0 |
| if (r8 != 0) {
0x0000453c bne.w 0x4650 | goto label_55;
| }
0x00004540 cmp r2, r7 |
0x00004542 mov.w r8, 1 | r8 = 1;
0x00004546 bls 0x451a |
| } while (r2 < r7);
| label_53:
0x00004548 subs r2, r2, r7 | r2 -= r7;
0x0000454a cmp r2, 4 |
| if (r2 == 4) {
0x0000454c beq 0x4612 | goto label_56;
| }
0x0000454e cmp r2, 5 |
| if (r2 == 5) {
0x00004550 beq 0x4636 | goto label_57;
| }
| label_13:
0x00004552 cmp r6, 0 |
0x00004554 ite ne |
| if (r6 == 0) {
0x00004556 movne r3, 0 | r3 = 0;
| }
| if (r6 != 0) {
0x00004558 andeq r3, r8, 1 | r3 = r8 & 1;
| }
| if (r3 != 0) {
0x0000455c cbnz r3, 0x4574 | goto label_58;
| }
0x0000455e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00004560 cmp r1, 1 |
| if (r1 == 1) {
0x00004562 beq.w 0x466c | goto label_59;
| }
0x00004566 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00004568 cmp r1, 2 |
| if (r1 == 2) {
0x0000456a beq.w 0x469a | goto label_60;
| }
| label_14:
0x0000456e mov r7, r5 | r7 = r5;
0x00004570 cmp r6, 0 |
| if (r6 != 0) {
0x00004572 bne 0x451a | goto label_10;
| }
| label_58:
0x00004574 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00004576 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00004578 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x0000457a bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
0x0000457e cmp r0, 0 |
| if (r0 == 0) {
0x00004580 beq.w 0x46d0 | goto label_61;
| }
0x00004584 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00004586 str r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x00004588 b 0x3ec8 | goto label_1;
| label_49:
0x000045b4 ldrb.w r0, [r8] | r0 = *(r8);
0x000045b8 cmp r0, 0x70 |
| if (r0 != 0x70) {
0x000045ba bne.w 0x448c | goto label_11;
| }
0x000045be ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x000045c2 add.w r1, r8, 1 | r1 = r8 + 1;
0x000045c6 cmp r0, 0x72 |
| if (r0 != 0x72) {
0x000045c8 bne.w 0x448c | goto label_11;
| }
0x000045cc ldrb r0, [r1, 1]! | r0 = *((r1 += 1));
0x000045d0 cmp r0, 0x65 |
| if (r0 != 0x65) {
0x000045d2 bne.w 0x448c | goto label_11;
| }
0x000045d6 ldrb r1, [r1, 1] | r1 = *((r1 + 1));
0x000045d8 cmp r1, 0x3a |
0x000045da itt eq |
| if (r1 != 0x3a) {
0x000045dc moveq r3, 1 | r3 = 1;
| }
| if (r1 == 0x3a) {
0x000045de streq r3, [sp, 0x30] | var_30h = r3;
| goto label_62;
| }
| if (r1 != 0x3a) {
| label_62:
0x000045e0 bne.w 0x448c | goto label_11;
| }
0x000045e4 b 0x44b6 | goto label_12;
| label_50:
0x000045e6 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000045e8 mov r0, r8 | r0 = r8;
0x000045ea str r2, [sp, 0x2c] | var_2ch = r2;
0x000045ec blx 0x20e4 | uname ();
0x000045f0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000045f2 cmp r0, 0 |
| if (r0 != 0) {
0x000045f4 bne.w 0x448c | goto label_11;
| }
0x000045f8 movs r3, 2 | r3 = 2;
0x000045fa str r3, [sp, 0x30] | var_30h = r3;
0x000045fc b 0x44b6 | goto label_12;
| label_47:
0x000045fe str r0, [sp, 0x28] | var_28h = r0;
0x00004600 b 0x444c | goto label_9;
| label_52:
0x00004602 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00004604 adds r1, 1 | r1++;
0x00004606 adds r3, r1, r2 | r3 = r1 + r2;
0x00004608 str r3, [sp, 0x34] | var_34h = r3;
0x0000460a ldr r3, [sp, 0x40] | r3 = var_40h;
0x0000460c adds r3, 1 | r3++;
0x0000460e str r3, [sp, 0x40] | var_40h = r3;
0x00004610 b 0x44b6 | goto label_12;
| label_56:
0x00004612 ldrb r3, [r7] | r3 = *(r7);
0x00004614 cmp r3, 0x70 |
| if (r3 != 0x70) {
0x00004616 bne 0x4552 | goto label_13;
| }
0x00004618 ldrb r3, [r7, 1] | r3 = *((r7 + 1));
0x0000461a adds r1, r7, 1 | r1 = r7 + 1;
0x0000461c cmp r3, 0x72 |
| if (r3 != 0x72) {
0x0000461e bne 0x4552 | goto label_13;
| }
0x00004620 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x00004624 cmp r3, 0x65 |
| if (r3 != 0x65) {
0x00004626 bne 0x4552 | goto label_13;
| }
0x00004628 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x0000462a cmp r3, 0x3a |
0x0000462c itt eq |
| if (r3 != 0x3a) {
0x0000462e moveq r3, 1 | r3 = 1;
| }
| if (r3 == 0x3a) {
0x00004630 streq r3, [sp, 0x2c] | var_2ch = r3;
| goto label_63;
| }
| if (r3 != 0x3a) {
| label_63:
0x00004632 bne 0x4552 | goto label_13;
| }
0x00004634 b 0x456e | goto label_14;
| label_57:
0x00004636 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00004638 mov r0, r7 | r0 = r7;
0x0000463a str r2, [sp, 0x28] | var_28h = r2;
0x0000463c blx 0x20e4 | uname ();
0x00004640 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00004642 cmp r0, 0 |
| if (r0 != 0) {
0x00004644 bne 0x4552 | goto label_13;
| }
0x00004646 movs r3, 2 | r3 = 2;
0x00004648 str r3, [sp, 0x2c] | var_2ch = r3;
0x0000464a b 0x456e | goto label_14;
| label_54:
0x0000464c mov r8, r3 | r8 = r3;
0x0000464e b 0x451a | goto label_10;
| label_55:
0x00004650 mov r7, r5 | r7 = r5;
0x00004652 b 0x451a | goto label_10;
| label_48:
0x00004654 mov r8, r6 | r8 = r6;
0x00004656 b 0x444c | goto label_9;
| label_43:
0x00004658 mov r6, r4 | r6 = r4;
0x0000465a movs r2, 3 | r2 = 3;
0x0000465c b 0x415c | goto label_7;
| label_59:
0x0000466c str r3, [sp, 0x48] | var_48h = r3;
0x0000466e mov r1, r7 | r1 = r7;
0x00004670 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00004672 ldr r6, [sp, 0x34] | r6 = var_34h;
0x00004674 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00004676 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00004678 str.w r6, [r0, r3, lsl 2] | __asm ("str.w r6, [r0, r3, lsl 2]");
0x0000467c adds r3, 1 | r3++;
0x0000467e str r3, [sp, 0x40] | var_40h = r3;
| do {
0x00004680 mov r0, r6 | r0 = r6;
0x00004682 str r2, [sp, 0x28] | var_28h = r2;
0x00004684 blx 0x20c0 | mmap64 ()
0x00004688 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0000468a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0000468c strb r3, [r6, r2] | *((r6 + r2)) = r3;
0x0000468e adds r2, 1 | r2++;
0x00004690 adds r3, r6, r2 | r3 = r6 + r2;
0x00004692 str r3, [sp, 0x34] | var_34h = r3;
0x00004694 ldrb r6, [r5, -0x1] | r6 = *((r5 - 0x1));
0x00004698 b 0x456e | goto label_14;
| label_60:
0x0000469a str r3, [sp, 0x48] | var_48h = r3;
0x0000469c mov r1, r7 | r1 = r7;
0x0000469e ldr r3, [sp, 0x30] | r3 = var_30h;
0x000046a0 ldr r6, [sp, 0x34] | r6 = var_34h;
0x000046a2 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x000046a4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000046a6 str.w r6, [r0, r3, lsl 2] | __asm ("str.w r6, [r0, r3, lsl 2]");
0x000046aa adds r3, 1 | r3++;
0x000046ac str r3, [sp, 0x44] | var_44h = r3;
0x000046ae b 0x4680 |
| } while (1);
| label_40:
0x000046b0 rsbs r0, r6, 0 | r0 = r6 - ;
0x000046b2 blx 0x2208 | fcn_00002208 ();
0x000046b6 b 0x4242 | goto label_15;
| label_18:
0x000046b8 mov r7, r5 | r7 = r5;
0x000046ba b.w 0x3dc4 | goto label_16;
| label_22:
0x000046be ldr r7, [sp, 0x18] | r7 = var_18h;
0x000046c0 b 0x43c2 | goto label_17;
| label_27:
0x000046c2 mov r0, r4 | r0 = r4;
0x000046c4 blx 0x2448 | fcn_00002448 ();
0x000046c8 b.w 0x3e00 | goto label_5;
| label_42:
0x000046cc blx 0x2108 | fcn_00002108 ();
| label_61:
0x000046d0 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000046d2 blx 0x20a4 | fcn_000020a4 ();
0x000046d6 b.w 0x3ec8 | 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/libkmod.so.2.3.7 @ 0x4910 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00004910 () | void fcn_00004910 (int16_t arg1, uint32_t arg2) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_0h;
| int16_t var_20ch;
| int16_t var_214h;
| r0 = arg1;
| r1 = arg2;
0x00004910 ldr r2, [pc, 0x15c] |
0x00004912 ldr r3, [pc, 0x160] | r3 = *(0x4a76);
0x00004914 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00004916 ldr r7, [pc, 0x3c0] | r7 = *(0x4cda);
0x00004918 sub.w sp, sp, 0x214 |
0x0000491c add r2, pc | r2 = 0x9390;
0x0000491e ldr r5, [r0, 4] | r5 = *((r0 + 4));
0x00004920 ldr r3, [r2, r3] |
0x00004922 ldr r3, [r3] | r3 = *(0x9390);
0x00004924 str r3, [sp, 0x20c] | var_20ch = r3;
0x00004926 mov.w r3, 0 | r3 = 0;
0x0000492a bics r3, r1, 0xf0000000 | __asm ("bics r3, r1, 0xf0000000");
| if (? == ?) {
0x0000492e beq.w 0x4a64 | goto label_4;
| }
0x00004932 cmp r1, 0 |
0x00004934 mov fp, r0 |
0x00004936 mov r6, r1 | r6 = r1;
0x00004938 add r5, r3 | r5 += r3;
| if (r1 < 0) {
0x0000493a blt 0x4a14 | goto label_5;
| }
0x0000493c ldr r3, [pc, 0x138] |
0x0000493e ands r4, r6, 0x20000000 | r4 = r6 & 0x20000000;
0x00004942 add r3, pc | r3 = 0x93be;
0x00004944 str r3, [sp, 4] | var_4h = r3;
| if (r4 == r6) {
0x00004946 beq 0x4a28 | goto label_6;
| }
| label_0:
0x00004948 ldrb.w sb, [r5] | sb = *(r5);
0x0000494c adds r7, r5, 2 | r7 = r5 + 2;
0x0000494e ldrb.w sl, [r5, 1] | sl = *((r5 + 1));
0x00004952 sub.w lr, sl, sb | lr = sl - sb;
0x00004956 add.w r4, lr, 1 | r4 = lr + 1;
0x0000495a add.w r0, lr, 6 | r0 = lr + 6;
0x0000495e cmp r4, 0 |
0x00004960 mov ip, r4 |
| if (r4 <= 0) {
0x00004962 ble.w 0x4a68 | goto label_7;
| }
0x00004966 add.w lr, r5, lr, lsl 2 | lr = r5 + (lr << 2);
0x0000496a mov r2, r7 | r2 = r7;
0x0000496c add r5, sp, 0xc | r5 += var_ch;
0x0000496e add.w lr, lr, 6 | lr += 6;
| do {
0x00004972 ldr r3, [r2], 4 | r3 = *(r2);
| r2 += 4;
0x00004976 cmp lr, r2 |
0x00004978 rev r3, r3 | r3 = SWAP32 (r3);
0x0000497a str r3, [r5], 4 | *(r5) = r3;
| r5 += 4;
0x0000497e bne 0x4972 |
| } while (lr != r2);
0x00004980 add.w r5, r7, ip, lsl 2 | r5 = r7 + (ip << 2);
| label_3:
0x00004984 lsls r3, r6, 1 | r3 = r6 << 1;
| if (r3 >= r6) {
0x00004986 bpl 0x4a36 | goto label_8;
| }
| label_1:
0x00004988 ldr r7, [r5], 4 | r7 = *(r5);
| r5 += 4;
0x0000498c rev r7, r7 | r7 = SWAP32 (r7);
0x0000498e add.w r8, r7, r7, lsl 1 | r8 = r7 + (r7 << 1);
0x00004992 add r0, r8 | r0 += r8;
0x00004994 lsls r0, r0, 2 | r0 <<= 2;
0x00004996 blx 0x21fc | r0 = fcn_000021fc ();
0x0000499a mov r6, r0 | r6 = r0;
0x0000499c cmp r0, 0 |
| if (r0 == 0) {
0x0000499e beq 0x4a64 | goto label_4;
| }
0x000049a0 ldr r3, [sp, 4] | r3 = var_4h;
0x000049a2 lsls r2, r4, 2 | r2 = r4 << 2;
0x000049a4 str.w fp, [r0] | __asm ("str.w fp, [r0]");
0x000049a8 adds r0, 0x14 | r0 += 0x14;
0x000049aa str r3, [r0, -0x10] | *((r0 - 0x10)) = r3;
0x000049ae cmp r7, 0 |
| if (r7 == 0) {
0x000049b0 beq 0x4a4e | goto label_9;
| }
0x000049b2 add.w r4, r2, 0x14 | r4 = r2 + 0x14;
0x000049b6 add r1, sp, 0xc | r1 += var_ch;
0x000049b8 add r4, r6 | r4 += r6;
0x000049ba strb.w sb, [r6, 0x10] | *((r6 + 0x10)) = sb;
0x000049be strb.w sl, [r6, 0x11] | *((r6 + 0x11)) = sl;
0x000049c2 str r7, [r6, 0xc] | *((r6 + 0xc)) = r7;
0x000049c4 str r4, [r6, 8] | *((r6 + 8)) = r4;
0x000049c6 blx 0x20c0 | r0 = mmap64 ()
0x000049c8 sbcs.w pc, ip, r0, lsl 8 | __asm ("sbcs.w pc, ip, r0, lsl 8");
| if (r7 <= 0) {
0x000049cc ble 0x49f6 | goto label_2;
| }
0x000049ce add.w r8, r4, r8, lsl 2 | r8 = r4 + (r8 << 2);
| do {
0x000049d2 ldr r3, [r5], 4 | r3 = *(r5);
| r5 += 4;
0x000049d6 adds r4, 0xc | r4 += 0xc;
0x000049d8 rev r3, r3 | r3 = SWAP32 (r3);
0x000049da mov r0, r5 | r0 = r5;
0x000049dc str r3, [r4, -0xc] | *((r4 - 0xc)) = r3;
0x000049e0 blx 0x22a8 | fcn_000022a8 ();
0x000049e4 cmp r8, r4 |
0x000049e6 add.w r3, r0, 1 | r3 = r0 + 1;
0x000049ea str r5, [r4, -0x4] | *((r4 - 0x4)) = r5;
0x000049ee add r5, r3 | r5 += r3;
0x000049f0 str r0, [r4, -0x8] | *((r4 - 0x8)) = r0;
0x000049f4 bne 0x49d2 |
| } while (r8 != r4);
| label_2:
0x000049f6 ldr r2, [pc, 0x84] |
0x000049f8 ldr r3, [pc, 0x78] | r3 = *(0x4a74);
0x000049fa add r2, pc | r2 = 0x947c;
0x000049fc ldr r3, [r2, r3] | r3 = *(0x947c);
0x000049fe ldr r2, [r3] | r2 = *(0x947c);
0x00004a00 ldr r3, [sp, 0x20c] | r3 = var_20ch;
0x00004a02 eors r2, r3 | r2 ^= r3;
0x00004a04 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00004a08 bne 0x4a6c | goto label_10;
| }
0x00004a0a mov r0, r6 | r0 = r6;
0x00004a0c add.w sp, sp, 0x214 |
0x00004a10 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00004a14 mov r0, r5 | r0 = r5;
0x00004a16 str r5, [sp, 4] | var_4h = r5;
0x00004a18 blx 0x22a8 | fcn_000022a8 ();
0x00004a1c ands r4, r6, 0x20000000 | r4 = r6 & 0x20000000;
0x00004a20 add.w r0, r0, 1 | r0++;
0x00004a24 add r5, r0 | r5 += r0;
| if (r4 != r6) {
0x00004a26 bne 0x4948 | goto label_0;
| }
| label_6:
0x00004a28 lsls r3, r6, 1 | r3 = r6 << 1;
0x00004a2a mov.w r0, 5 | r0 = 5;
0x00004a2e mov sl, r4 | sl = r4;
0x00004a30 mov.w sb, 0x80 | sb = 0x80;
| if (r3 < r6) {
0x00004a34 bmi 0x4988 | goto label_1;
| }
| label_8:
0x00004a36 lsls r0, r0, 2 | r0 <<= 2;
0x00004a38 blx 0x21fc | r0 = fcn_000021fc ();
0x00004a3c mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00004a3e cbz r0, 0x4a64 |
0x00004a40 ldr r3, [sp, 4] | r3 = var_4h;
0x00004a42 lsls r2, r4, 2 | r2 = r4 << 2;
0x00004a44 add.w r0, r6, 0x14 | r0 = r6 + 0x14;
0x00004a48 str.w fp, [r6] | __asm ("str.w fp, [r6]");
0x00004a4c str r3, [r6, 4] | *((r6 + 4)) = r3;
| label_9:
0x00004a4e movs r3, 0 | r3 = 0;
0x00004a50 add r1, sp, 0xc | r1 += var_ch;
0x00004a52 strb.w sb, [r6, 0x10] | *((r6 + 0x10)) = sb;
0x00004a56 strb.w sl, [r6, 0x11] | *((r6 + 0x11)) = sl;
0x00004a5a strd r3, r3, [r6, 8] | __asm ("strd r3, r3, [r6, 8]");
0x00004a5e blx 0x20c0 | mmap64 ()
0x00004a62 b 0x49f6 | goto label_2;
| }
| label_4:
0x00004a64 movs r6, 0 | r6 = 0;
0x00004a66 b 0x49f6 | goto label_2;
| label_7:
0x00004a68 mov r5, r7 | r5 = r7;
0x00004a6a b 0x4984 | goto label_3;
| label_10:
0x00004a6c blx 0x2108 | fcn_00002108 ();
0x00004a70 strb r4, [r5, 0x14] | *((r5 + 0x14)) = r4;
0x00004a72 movs r1, r0 | r1 = r0;
0x00004a74 lsls r4, r4, 6 | r4 <<= 6;
0x00004a76 movs r0, r0 |
0x00004a78 str r6, [r5, 0x64] | *((r5 + 0x64)) = r6;
0x00004a7a movs r0, r0 |
0x00004a7c strb r6, [r1, 0x11] | *((r1 + 0x11)) = r6;
0x00004a7e 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/libkmod.so.2.3.7 @ 0x4a80 */
| #include <stdint.h>
|
; (fcn) fcn.00004a80 () | void fcn_00004a80 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00004a80 invalid |
0x00004a84 mov r5, r0 | r5 = r0;
0x00004a86 ldr r4, [r0] | r4 = *(r0);
0x00004a88 mov sb, r1 | sb = r1;
0x00004a8a mov r8, r2 | r8 = r2;
0x00004a8c mov r6, r3 | r6 = r3;
| if (r4 != 0) {
0x00004a8e cbnz r4, 0x4a98 | goto label_0;
| }
0x00004a90 b 0x4a9e | goto label_1;
| do {
0x00004a92 mov r5, r4 | r5 = r4;
0x00004a94 ldr r4, [r4] | r4 = *(r4);
| if (r4 == 0) {
0x00004a96 cbz r4, 0x4a9e | goto label_1;
| }
| label_0:
0x00004a98 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00004a9a cmp r3, r6 |
0x00004a9c blo 0x4a92 |
| } while (r3 <= r6);
| label_1:
0x00004a9e add.w r0, r8, 0xd | r0 = r8 + 0xd;
0x00004aa2 blx 0x21fc | r0 = fcn_000021fc ();
0x00004aa6 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00004aa8 cbz r0, 0x4ac6 |
0x00004aaa str.w r8, [r0, 8] | __asm ("str.w r8, [r0, 8]");
0x00004aae mov r2, r8 | r2 = r8;
0x00004ab0 str r4, [r0] | *(r0) = r4;
0x00004ab2 mov r1, sb | r1 = sb;
0x00004ab4 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x00004ab6 adds r0, 0xc | r0 += 0xc;
0x00004ab8 blx 0x20c0 | mmap64 ()
0x00004abc add r8, r7 | r8 += r7;
0x00004abe movs r3, 0 | r3 = 0;
0x00004ac0 strb.w r3, [r8, 0xc] | *((r8 + 0xc)) = r3;
0x00004ac4 str r7, [r5] | *(r5) = r7;
| }
0x00004ac6 pop.w {r3, r4, r5, r6, r7, r8, sb, 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/libkmod.so.2.3.7 @ 0x58fc */
| #include <stdint.h>
|
; (fcn) fcn.000058fc () | void fcn_000058fc (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_20h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000058fc invalid |
0x00005900 mov r7, r0 | r7 = r0;
0x00005902 ldr r5, [sp, 0x20] | r5 = var_20h;
0x00005904 mov r6, r2 | r6 = r2;
0x00005906 mov sb, r1 | sb = r1;
0x00005908 mov r8, r3 | r8 = r3;
0x0000590a adds r0, r5, 6 | r0 = r5 + 6;
0x0000590c add r0, r2 | r0 += r2;
0x0000590e blx 0x21fc | r0 = fcn_000021fc ();
0x00005912 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00005914 cbz r0, 0x5960 | goto label_0;
| }
0x00005916 adds r0, r5, 5 | r0 = r5 + 5;
0x00005918 mov r1, sb | r1 = sb;
0x0000591a add r0, r4 | r0 += r4;
0x0000591c mov r2, r6 | r2 = r6;
0x0000591e str r0, [r4] | *(r4) = r0;
0x00005920 blx 0x20c0 | mmap64 ()
0x00005924 mov r0, r4 | r0 = r4;
0x00005926 mov r1, r8 | r1 = r8;
0x00005928 ldr r3, [r0], 4 | r3 = *(r0);
| r0 += 4;
0x0000592c mov.w r8, 0 | r8 = 0;
0x00005930 mov r2, r5 | r2 = r5;
0x00005932 add r5, r4 | r5 += r4;
0x00005934 strb.w r8, [r3, r6] | *((r3 + r6)) = r8;
0x00005938 blx 0x20c0 | mmap64 ()
0x0000593c strb.w r8, [r5, 4] | *((r5 + 4)) = r8;
0x00005940 mov r1, r4 | r1 = r4;
0x00005942 ldr r0, [r7] | r0 = *(r7);
0x00005944 bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
0x00005948 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0000594a cbz r0, 0x5954 | goto label_1;
| }
0x0000594c str r0, [r7] | *(r7) = r0;
| do {
0x0000594e mov r0, r5 | r0 = r5;
0x00005950 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x00005954 mov r0, r4 | r0 = r4;
0x00005956 blx 0x20a4 | fcn_000020a4 ();
0x0000595a mov r0, r5 | r0 = r5;
0x0000595c pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_0:
0x00005960 mov r5, r0 | r5 = r0;
0x00005962 b 0x594e |
| } 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/libkmod.so.2.3.7 @ 0x5c18 */
| #include <stdint.h>
|
; (fcn) fcn.00005c18 () | void fcn_00005c18 (int16_t arg_20h, int16_t arg_24h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00005c18 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00005c1c mov r7, r0 | r7 = r0;
0x00005c1e mov r5, r2 | r5 = r2;
0x00005c20 mov r8, r3 | r8 = r3;
0x00005c22 mov sb, r1 | sb = r1;
0x00005c24 bl 0x29e4 | r0 = fcn_000029e4 (r0, r1);
0x00005c28 cmp r0, 0 |
| if (r0 != 0) {
0x00005c2a bne 0x5c9c | goto label_0;
| }
0x00005c2c cmp.w r8, 0 |
| if (r8 == 0) {
0x00005c30 beq 0x5cac | goto label_1;
| }
0x00005c32 ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x00005c34 mov r6, r0 | r6 = r0;
0x00005c36 add.w r8, r3, 2 | r8 = r3 + 2;
0x00005c3a add r8, r5 | r8 += r5;
0x00005c3c lsl.w r0, r8, 1 | r0 = r8 << 1;
0x00005c40 adds r0, 0x3c | r0 += 0x3c;
0x00005c42 blx 0x21fc | r0 = fcn_000021fc ();
0x00005c46 mov r4, r0 | r4 = r0;
0x00005c48 cmp r0, 0 |
| if (r0 == 0) {
0x00005c4a beq 0x5ce2 | goto label_2;
| }
0x00005c4c movs r2, 0x3c | r2 = 0x3c;
0x00005c4e mov r1, r6 | r1 = r6;
0x00005c50 blx 0x2324 | write (r0, r1, r2);
0x00005c54 mov r0, r7 | r0 = r7;
0x00005c56 blx 0x2418 | fcn_00002418 ();
0x00005c5a mov r3, r4 | r3 = r4;
0x00005c5c mov r2, r8 | r2 = r8;
0x00005c5e str r0, [r3], 0x3c | *(r3) = r0;
| r3 += 0x3c;
0x00005c62 mov r1, sb | r1 = sb;
0x00005c64 mov r0, r3 | r0 = r3;
0x00005c66 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00005c68 blx 0x20c0 | mmap64 ()
0x00005c6c strb r6, [r0, r5] | *((r0 + r5)) = r6;
0x00005c6e adds r5, 1 | r5++;
0x00005c70 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00005c72 mov r1, sb | r1 = sb;
0x00005c74 mov r2, r8 | r2 = r8;
0x00005c76 add r5, r0 | r5 += r0;
0x00005c78 add r0, r8 | r0 += r8;
0x00005c7a str r5, [r4, 0x20] | *((r4 + 0x20)) = r5;
0x00005c7c str r0, [r4, 4] | *((r4 + 4)) = r0;
0x00005c7e blx 0x20c0 | mmap64 ()
0x00005c82 ldr r5, [r4, 4] | r5 = *((r4 + 4));
| do {
0x00005c84 movs r3, 1 | r3 = 1;
0x00005c86 mov r0, r7 | r0 = r7;
0x00005c88 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00005c8a mov r2, r5 | r2 = r5;
0x00005c8c mov r1, r4 | r1 = r4;
0x00005c8e bl 0x29ec | fcn_000029ec (r0, r1, r2);
0x00005c92 ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x00005c94 movs r0, 0 | r0 = 0;
0x00005c96 str r4, [r3] | *(r3) = r4;
0x00005c98 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_0:
0x00005c9c blx 0x22dc | errno_location ();
0x00005ca0 ldr r2, [sp, 0x24] | r2 = *(arg_24h);
0x00005ca2 mov r3, r0 | r3 = r0;
0x00005ca4 movs r0, 0 | r0 = 0;
0x00005ca6 str r3, [r2] | *(r2) = r3;
0x00005ca8 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x00005cac add.w r0, r5, 0x3d | r0 = r5 + 0x3d;
0x00005cb0 adds r6, r5, 1 | r6 = r5 + 1;
0x00005cb2 blx 0x21fc | r0 = fcn_000021fc ();
0x00005cb6 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00005cb8 cbz r0, 0x5ce2 | goto label_2;
| }
0x00005cba movs r2, 0x3c | r2 = 0x3c;
0x00005cbc mov r1, r8 | r1 = r8;
0x00005cbe mov r5, r4 | r5 = r4;
0x00005cc0 blx 0x2324 | write (r0, r1, r2);
0x00005cc4 mov r0, r7 | r0 = r7;
0x00005cc6 blx 0x2418 | fcn_00002418 ();
0x00005cca mov r2, r6 | r2 = r6;
0x00005ccc str r0, [r5], 0x3c | *(r5) = r0;
| r5 += 0x3c;
0x00005cd0 mov r1, sb | r1 = sb;
0x00005cd2 mov r0, r5 | r0 = r5;
0x00005cd4 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00005cd6 blx 0x20c0 | mmap64 ()
0x00005cda str r5, [r4, 4] | *((r4 + 4)) = r5;
0x00005cdc str.w r8, [r4, 0x20] | __asm ("str.w r8, [r4, 0x20]");
0x00005ce0 b 0x5c84 |
| } while (1);
| label_2:
0x00005ce2 mvn r0, 0xb | r0 = ~0xb;
0x00005ce6 pop.w {r3, r4, r5, r6, r7, r8, sb, 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/libkmod.so.2.3.7 @ 0x5e2c */
| #include <stdint.h>
|
; (fcn) fcn.00005e2c () | void fcn_00005e2c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1000h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00005e2c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00005e30 mov r5, r1 | r5 = r1;
0x00005e32 ldr r1, [pc, 0xa4] |
0x00005e34 mov r7, r2 | r7 = r2;
0x00005e36 mov r8, r0 | r8 = r0;
0x00005e38 mov r0, r2 | r0 = r2;
0x00005e3a ldr r2, [pc, 0xa0] | r2 = *(0x5ede);
0x00005e3c sub.w sp, sp, 0x1000 |
0x00005e40 add r1, pc | r1 = 0xbd1e;
0x00005e42 sub sp, 0x10 |
0x00005e44 add.w r4, sp, 0x1000 | r4 += var_1000h;
0x00005e48 mov sb, r3 | sb = r3;
0x00005e4a ldr r2, [r1, r2] |
0x00005e4c adds r4, 0xc | r4 += 0xc;
0x00005e4e ldr r2, [r2] | r2 = *(0xbd1e);
0x00005e50 str r2, [r4] | *(r4) = r2;
0x00005e52 mov.w r2, 0 | r2 = 0;
0x00005e56 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00005e5a mov r4, r0 | r4 = r0;
0x00005e5c mov r0, r5 | r0 = r5;
0x00005e5e blx 0x22a8 | r0 = fcn_000022a8 ();
0x00005e62 adds r2, r4, r0 | r2 = r4 + r0;
0x00005e64 adds r2, 2 | r2 += 2;
0x00005e66 cmp.w r2, 0x1000 |
| if (r2 > 0x1000) {
0x00005e6a bhi 0x5ece | goto label_0;
| }
0x00005e6c add.w sl, sp, 0xc | sl += var_ch;
0x00005e70 mov r6, r0 | r6 = r0;
0x00005e72 mov r1, r7 | r1 = r7;
0x00005e74 mov.w r3, 0x1000 | r3 = 0x1000;
0x00005e78 mov r2, r4 | r2 = r4;
0x00005e7a mov r0, sl | r0 = sl;
0x00005e7c blx 0x2154 | fcn_00002154 ();
0x00005e80 adds r0, r4, 1 | r0 = r4 + 1;
0x00005e82 adds r2, r6, 1 | r2 = r6 + 1;
0x00005e84 mov r1, r5 | r1 = r5;
0x00005e86 add r7, sp, 0x10 | r7 += var_10h;
0x00005e88 add r0, sl | r0 += sl;
0x00005e8a add r7, r4 | r7 += r4;
0x00005e8c blx 0x20c0 | mmap64 ()
0x00005e90 mov r2, r4 | r2 = r4;
0x00005e92 movs r4, 0x5c | r4 = 0x5c;
0x00005e94 strd r6, sb, [sp] | __asm ("strd r6, sb, [sp]");
0x00005e98 mov r3, r5 | r3 = r5;
0x00005e9a mov r1, sl | r1 = sl;
0x00005e9c mov r0, r8 | r0 = r8;
0x00005e9e strb r4, [r7, -0x4] | *((r7 - 0x4)) = r4;
0x00005ea2 bl 0x5c18 | r0 = fcn_00005c18 (r0, r1, r2, r3, r4, r5);
0x00005ea6 and.w r0, r0, r0, asr 31 | r0 &= (r0 >> 31);
| do {
0x00005eaa ldr r2, [pc, 0x34] |
0x00005eac add.w r1, sp, 0x1000 | r1 += var_1000h;
0x00005eb0 ldr r3, [pc, 0x28] | r3 = *(0x5edc);
0x00005eb2 adds r1, 0xc | r1 += 0xc;
0x00005eb4 add r2, pc | r2 = 0xbd9a;
0x00005eb6 ldr r3, [r2, r3] | r3 = *(0xbd9a);
0x00005eb8 ldr r2, [r3] | r2 = *(0xbd9a);
0x00005eba ldr r3, [r1] | r3 = *(r1);
0x00005ebc eors r2, r3 | r2 ^= r3;
0x00005ebe mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00005ec2 bne 0x5ed4 | goto label_1;
| }
0x00005ec4 add.w sp, sp, 0x1000 |
0x00005ec8 add sp, 0x10 |
0x00005eca pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x00005ece mvn r0, 0x23 | r0 = ~0x23;
0x00005ed2 b 0x5eaa |
| } while (1);
| label_1:
0x00005ed4 blx 0x2108 | fcn_00002108 ();
0x00005ed8 str r0, [r1] | *(r1) = r0;
0x00005eda movs r1, r0 | r1 = r0;
0x00005edc lsls r4, r4, 6 | r4 <<= 6;
0x00005ede movs r0, r0 |
0x00005ee0 ldrsh r4, [r2, r6] | r4 = *((r2 + r6));
0x00005ee2 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/libkmod.so.2.3.7 @ 0x5f98 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00005f98 () | void fcn_00005f98 (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_ch_2;
| int32_t var_8h_2;
| int16_t var_4h_2;
| int16_t var_20h;
| int16_t var_1000h;
| int32_t var_0h_2;
| int16_t var_1020h;
| r0 = arg1;
| r1 = arg2;
0x00005f98 blmi 0x1cd8968 | __asm ("blmi 0x1cd8968");
0x00005f9c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00005fa0 sub.w sp, sp, 0x1020 |
0x00005fa4 add r2, pc | r2 += pc;
0x00005fa6 sub sp, 4 |
0x00005fa8 mov r6, r0 | r6 = r0;
0x00005faa add.w r0, sp, 0x1000 | r0 += var_1000h;
0x00005fae ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00005fb0 adds r0, 0x1c | r0 += 0x1c;
0x00005fb2 ldr r3, [r3] | r3 = *(r3);
0x00005fb4 str r3, [r0] | *(r0) = r3;
0x00005fb6 mov.w r3, 0 | r3 = 0;
0x00005fba ldrb.w r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x00005fbe lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
0x00005fc0 it mi |
| if (r2 >= r3) {
0x00005fc2 ldrmi r4, [r6, 0x28] | r4 = *((r6 + 0x28));
| }
| if (r2 < r3) {
0x00005fc4 bmi.w 0x60d2 | goto label_2;
| }
0x00005fc8 ldr r5, [r6, 0x10] | r5 = *((r6 + 0x10));
0x00005fca ldr.w sb, [r6] | sb = *(r6);
0x00005fce cmp r5, 0 |
| if (r5 != 0) {
0x00005fd0 bne.w 0x6150 | goto label_6;
| }
0x00005fd4 mov r4, r1 | r4 = r1;
0x00005fd6 orr r3, r3, 1 | r3 |= 1;
0x00005fda movs r1, 0x3a | r1 = 0x3a;
0x00005fdc mov r0, r4 | r0 = r4;
0x00005fde strb.w r3, [r6, 0x30] | *((r6 + 0x30)) = r3;
0x00005fe2 blx 0x22b4 | r0 = fcn_000022b4 ();
0x00005fe6 mov r8, r0 | r8 = r0;
0x00005fe8 cmp r0, 0 |
| if (r0 == 0) {
0x00005fea beq.w 0x610e | goto label_4;
| }
0x00005fee strb r5, [r0] | *(r0) = r5;
0x00005ff0 ldr r0, [r6] | r0 = *(r6);
0x00005ff2 blx 0x2384 | r0 = uflow ();
0x00005ff6 mov r7, r0 | r7 = r0;
0x00005ff8 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00005ffc adds r3, r0, 2 | r3 = r0 + 2;
0x00005ffe mov sl, r0 | sl = r0;
0x00006000 cmp.w r3, 0x1000 |
0x00006004 str r3, [sp] | *(sp) = r3;
| if (r3 >= 0x1000) {
0x00006006 bhs.w 0x610e | goto label_4;
| }
0x0000600a mov r1, r7 | r1 = r7;
0x0000600c add r7, sp, 0x20 | r7 += var_20h;
0x0000600e subs r3, r7, 4 | r3 -= var_4h_2;
0x00006010 mov r2, sl | r2 = sl;
0x00006012 mov r0, r3 | r0 = r3;
0x00006014 str r3, [sp, 4] | var_4h = r3;
0x00006016 mov.w r3, 0x1000 | r3 = 0x1000;
0x0000601a add.w fp, sl, 1 |
0x0000601e blx 0x2154 | fcn_00002154 ();
0x00006022 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00006024 movs r2, 0x2f | r2 = 0x2f;
0x00006026 add sl, r7 | sl += r7;
0x00006028 strb r2, [sl, -0x4] | *((sl - 0x4)) = r2;
0x0000602c add.w r2, r7, fp | r2 = r7 + fp;
0x00006030 strb r5, [r2, -0x4] | *((r2 - 0x4)) = r5;
0x00006032 ldrb r4, [r0, r0] | r4 = *((r0 + r0));
0x00006034 cmp r3, 0 |
| if (r3 == 0) {
0x00006036 beq 0x60f8 | goto label_7;
| }
| label_3:
0x00006038 ldr r1, [pc, 0x130] |
0x0000603a sub.w sl, r7, 0xc | sl -= var_ch_2;
0x0000603e add.w r0, r8, 1 | r0 = r8 + 1;
0x00006042 mov r2, sl | r2 = sl;
0x00006044 add r1, pc | r1 = 0xc1b4;
0x00006046 blx 0x21a8 | r0 = fcn_000021a8 ();
0x0000604a cmp r0, 0 |
| if (r0 == 0) {
0x0000604c beq 0x6146 | goto label_8;
| }
0x0000604e ldr r3, [sp, 4] | r3 = var_4h;
0x00006050 mov.w r8, 0 | r8 = 0;
0x00006054 str r6, [sp, 0xc] | var_ch = r6;
0x00006056 mov r4, r8 | r4 = r8;
0x00006058 mov r6, r0 | r6 = r0;
0x0000605a add r3, fp | r3 += fp;
0x0000605c ldr.w fp, [pc, 0x110] |
0x00006060 str r3, [sp, 8] | var_8h = r3;
0x00006062 add fp, pc | fp = 0xc1d6;
0x00006064 b 0x60a2 | goto label_9;
| label_0:
0x00006066 mov r1, r6 | r1 = r6;
0x00006068 adds r2, r0, 1 | r2 = r0 + 1;
0x0000606a ldr r0, [sp, 8] | r0 = var_8h;
0x0000606c blx 0x20c0 | mmap64 ()
0x00006070 ldr r6, [sp, 4] | r6 = var_4h;
| do {
0x00006072 mov r1, r6 | r1 = r6;
0x00006074 sub.w r2, r7, 8 | r2 -= var_8h_2;
0x00006078 mov r0, sb | r0 = sb;
0x0000607a blx 0x2378 | r0 = munmap (r0, r1);
0x0000607e subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x00006080 blt 0x6112 | goto label_10;
| }
0x00006082 ldr r1, [r7, -0x8] | r1 = *((r7 - 0x8));
0x00006086 mov r0, r5 | r0 = r5;
0x00006088 bl 0x3838 | fcn_00003838 (r0, r1);
0x0000608c mov r2, sl | r2 = sl;
0x0000608e mov r5, r0 | r5 = r0;
0x00006090 mov r1, fp | r1 = fp;
0x00006092 movs r0, 0 | r0 = 0;
0x00006094 blx 0x21a8 | fcn_000021a8 ();
0x00006098 add.w r8, r8, 1 | r8++;
0x0000609c mov r6, r0 | r6 = r0;
0x0000609e cmp r0, 0 |
| if (r0 == 0) {
0x000060a0 beq 0x611c | goto label_11;
| }
| label_9:
0x000060a2 movs r3, 0 | r3 = 0;
0x000060a4 str r3, [r7, -0x8] | *((r7 - 0x8)) = r3;
0x000060a8 ldrb r3, [r6] | r3 = *(r6);
0x000060aa cmp r3, 0x2f |
0x000060ac beq 0x6072 |
| } while (r3 == 0x2f);
0x000060ae mov r0, r6 | r0 = r6;
0x000060b0 blx 0x22a8 | fcn_000022a8 ();
0x000060b4 ldr r3, [sp] | r3 = *(sp);
0x000060b6 add r3, r0 | r3 += r0;
0x000060b8 cmp.w r3, 0x1000 |
| if (r3 <= 0x1000) {
0x000060bc blo 0x6066 | goto label_0;
| }
0x000060be ldr r6, [sp, 0xc] | r6 = var_ch;
| label_1:
0x000060c0 mov r0, r5 | r0 = r5;
0x000060c2 blx 0x2088 | fcn_00002088 ();
0x000060c6 ldrb.w r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000060ca bfc r3, 0, 1 | value_0 = BIT_MASK (1, );
| value_0 = ~value_0;
| r3 &= value_0;
0x000060ce strb.w r3, [r6, 0x30] | *((r6 + 0x30)) = r3;
| do {
| label_2:
0x000060d2 ldr r2, [pc, 0xa0] |
0x000060d4 add.w r1, sp, 0x1000 | r1 += var_1000h;
0x000060d8 ldr r3, [pc, 0x8c] | r3 = *(0x6168);
0x000060da adds r1, 0x1c | r1 += 0x1c;
0x000060dc add r2, pc | r2 = 0xc256;
0x000060de ldr r3, [r2, r3] | r3 = *(0xc256);
0x000060e0 ldr r2, [r3] | r2 = *(0xc256);
0x000060e2 ldr r3, [r1] | r3 = *(r1);
0x000060e4 eors r2, r3 | r2 ^= r3;
0x000060e6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000060ea bne 0x614c | goto label_12;
| }
0x000060ec mov r0, r4 | r0 = r4;
0x000060ee add.w sp, sp, 0x1020 |
0x000060f2 add sp, 4 |
0x000060f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x000060f8 ldrb r3, [r4] | r3 = *(r4);
0x000060fa cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x000060fc beq 0x6136 | goto label_13;
| }
0x000060fe mov r0, r4 | r0 = r4;
0x00006100 blx 0x22a8 | fcn_000022a8 ();
0x00006104 ldr r3, [sp] | r3 = *(sp);
0x00006106 add r3, r0 | r3 += r0;
0x00006108 cmp.w r3, 0x1000 |
| if (r3 <= 0x1000) {
0x0000610c blo 0x6128 | goto label_14;
| }
| label_4:
0x0000610e movs r4, 0 | r4 = 0;
0x00006110 b 0x60d2 |
| } while (1);
| label_10:
0x00006112 rsbs r0, r4, 0 | r0 = r4 - ;
0x00006114 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00006116 blx 0x2208 | fcn_00002208 ();
0x0000611a b 0x60c0 | goto label_1;
| label_11:
0x0000611c ldr r6, [sp, 0xc] | r6 = var_ch;
| label_5:
0x0000611e mov r4, r8 | r4 = r8;
0x00006120 str r5, [r6, 0x10] | *((r6 + 0x10)) = r5;
0x00006122 str.w r8, [r6, 0x28] | __asm ("str.w r8, [r6, 0x28]");
0x00006126 b 0x60d2 | goto label_2;
| label_14:
0x00006128 mov r1, r4 | r1 = r4;
0x0000612a ldr r4, [sp, 4] | r4 = var_4h;
0x0000612c adds r2, r0, 1 | r2 = r0 + 1;
0x0000612e add.w r0, r4, fp | r0 = r4 + fp;
0x00006132 blx 0x20c0 | mmap64 ()
| label_13:
0x00006136 mov r0, r4 | r0 = r4;
0x00006138 blx 0x20fc | stack_chk_fail ();
0x0000613c str r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
0x0000613e cmp r0, 0 |
| if (r0 != 0) {
0x00006140 bne.w 0x6038 | goto label_3;
| }
0x00006144 b 0x610e | goto label_4;
| label_8:
0x00006146 mov r5, r0 | r5 = r0;
0x00006148 mov r8, r0 | r8 = r0;
0x0000614a b 0x611e | goto label_5;
| label_12:
0x0000614c blx 0x2108 | fcn_00002108 ();
| label_6:
0x00006150 ldr r3, [pc, 0x24] |
0x00006152 movs r2, 0x95 | r2 = 0x95;
0x00006154 ldr r1, [pc, 0x24] |
0x00006156 ldr r0, [pc, 0x28] |
0x00006158 add r3, pc | r3 = 0xc2d4;
0x0000615a add r1, pc | r1 = 0xc2da;
0x0000615c add r0, pc | r0 = 0xc2e2;
0x0000615e blx 0x246c | fcn_0000246c ();
0x00006162 nop |
0x00006164 ldrsh r4, [r4, r2] | r4 = *((r4 + r2));
0x00006166 movs r1, r0 | r1 = r0;
0x00006168 lsls r4, r4, 6 | r4 <<= 6;
0x0000616a movs r0, r0 |
0x0000616c ldr r7, [pc, 0x390] | r7 = *(0x6500);
0x0000616e movs r0, r0 |
0x00006170 ldr r7, [pc, 0x318] | r7 = *(0x648c);
0x00006172 movs r0, r0 |
0x00006174 ldrb r4, [r5, r5] | r4 = *((r5 + r5));
0x00006176 movs r1, r0 | r1 = r0;
0x00006178 str r4, [r3, r2] | *((r3 + r2)) = r4;
0x0000617a movs r0, r0 |
0x0000617c ldr r6, [pc, 0x268] | r6 = *(0x63e8);
0x0000617e movs r0, r0 |
0x00006180 ldr r6, [pc, 0x2e0] | r6 = *(0x6464);
0x00006182 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/libkmod.so.2.3.7 @ 0x85b4 */
| #include <stdint.h>
|
; (fcn) fcn.000085b4 () | void fcn_000085b4 (int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_14h;
| r2 = arg3;
| if (? >= ?) {
0x000085b4 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x000085b8 mov r8, r2 | r8 = r2;
0x000085ba ldr r2, [pc, 0x17c] |
0x000085bc sub sp, 0x18 |
0x000085be movs r4, 0 | r4 = 0;
0x000085c0 ldr r3, [pc, 0x178] | r3 = *(0x873c);
0x000085c2 add r2, pc | r2 = 0x10d00;
0x000085c4 ldr r3, [r2, r3] |
0x000085c6 add r2, sp, 4 | r2 += var_4h;
0x000085c8 ldr r3, [r3] | r3 = *(0x10d00);
0x000085ca str r3, [sp, 0x14] | var_14h = r3;
0x000085cc mov.w r3, 0 | r3 = 0;
0x000085d0 add r3, sp, 8 | r3 += var_8h;
0x000085d2 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x000085d6 bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x000085da cmp r0, 0 |
| if (r0 < 0) {
0x000085dc blt 0x860e | goto label_2;
| }
0x000085de ldr r6, [sp, 4] | r6 = var_4h;
| if (r6 == 0) {
0x000085e0 cbz r6, 0x860c | goto label_4;
| }
0x000085e2 ldrd r4, r5, [sp, 8] | __asm ("ldrd r4, r5, [var_8h]");
0x000085e6 orrs.w r3, r4, r5 | r3 = r4 | r5;
| if (r3 == r4) {
0x000085ea beq 0x860c | goto label_4;
| }
0x000085ec ldrb r3, [r6] | r3 = *(r6);
| if (r3 != 0) {
0x000085ee cbnz r3, 0x862e | goto label_5;
| }
0x000085f0 adds r3, r6, 1 | r3 = r6 + 1;
0x000085f2 b 0x8604 |
| while (r1 != r2) {
0x000085f4 subs r4, 1 | r4--;
0x000085f6 mov r6, r3 | r6 = r3;
0x000085f8 mov r4, r2 | r4 = r2;
0x000085fa ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x000085fe sbc r5, r5, 0 | __asm ("sbc r5, r5, 0");
| if (r2 != 0) {
0x00008602 cbnz r2, 0x862a | goto label_6;
| }
0x00008604 subs r2, r4, 1 | r2 = r4 - 1;
0x00008606 orrs.w r1, r2, r5 | r1 = r2 | r5;
0x0000860a bne 0x85f4 |
| }
| do {
| label_4:
0x0000860c movs r0, 0 | r0 = 0;
| label_2:
0x0000860e ldr r2, [pc, 0x130] |
0x00008610 ldr r3, [pc, 0x128] | r3 = *(0x873c);
0x00008612 add r2, pc | r2 = 0x10d58;
0x00008614 ldr r3, [r2, r3] | r3 = *(0x10d58);
0x00008616 ldr r2, [r3] | r2 = *(0x10d58);
0x00008618 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000861a eors r2, r3 | r2 ^= r3;
0x0000861c mov.w r3, 0 | r3 = 0;
0x0000861e lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x00008620 bne.w 0x872a | goto label_7;
| }
0x00008624 add sp, 0x18 |
0x00008626 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x0000862a strd r4, r5, [sp, 8] | __asm ("strd r4, r5, [var_8h]");
| label_5:
0x0000862e subs r3, r4, 1 | r3 = r4 - 1;
0x00008630 orrs r3, r5 | r3 |= r5;
0x00008632 beq 0x860c |
| } while (r3 == r5);
0x00008634 movs r7, 0 | r7 = 0;
0x00008636 mov r3, r6 | r3 = r6;
0x00008638 mov r2, r7 | r2 = r7;
0x0000863a mov lr, r7 | lr = r7;
0x0000863c rsb.w ip, r6, 1 |
0x00008640 b 0x8650 |
| while (r1 != 0) {
0x00008642 adds r2, 1 | r2++;
0x00008644 movs r1, 0 | r1 = 0;
0x00008646 cmp r2, r4 |
0x00008648 add.w r3, r6, r2 | r3 = r6 + r2;
0x0000864c sbcs r1, r5 | __asm ("sbcs r1, r5");
| if (r2 >= r4) {
0x0000864e bhs 0x8682 | goto label_8;
| }
| label_0:
0x00008650 ldrb r1, [r3] | r1 = *(r3);
0x00008652 cmp r1, 0 |
0x00008654 bne 0x8642 |
| }
0x00008656 cmp r2, r4 |
0x00008658 sbcs.w r0, r1, r5 | __asm ("sbcs.w r0, r1, r5");
| if (r2 <= r4) {
0x0000865c blo 0x8668 | goto label_9;
| }
0x0000865e b 0x8678 | goto label_10;
| do {
0x00008660 cmp r2, r4 |
0x00008662 sbcs.w r0, lr, r5 | __asm ("sbcs.w r0, lr, r5");
| if (r2 >= r4) {
0x00008666 bhs 0x8676 | goto label_11;
| }
| label_9:
0x00008668 add.w r2, ip, r3 | r2 = ip + r3;
0x0000866c ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x00008670 movs r1, 0 | r1 = 0;
0x00008672 cmp r0, 0 |
0x00008674 beq 0x8660 |
| } while (r0 == 0);
| label_11:
0x00008676 adds r3, r6, r2 | r3 = r6 + r2;
| label_10:
0x00008678 cmp r2, r4 |
0x0000867a add.w r7, r7, 1 | r7++;
0x0000867e sbcs r1, r5 | __asm ("sbcs r1, r5");
| if (r2 <= r4) {
0x00008680 blo 0x8650 | goto label_0;
| }
| label_8:
0x00008682 ldrb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x00008686 cmp r3, 0 |
| if (r3 != 0) {
0x00008688 bne 0x8726 | goto label_12;
| }
| label_3:
0x0000868a add.w sl, r7, 1 | sl = r7 + 1;
0x0000868e adds r0, r4, 1 | r0 = r4 + 1;
0x00008690 lsl.w sl, sl, 2 | sl <<= 2;
0x00008694 add r0, sl | r0 += sl;
0x00008696 blx 0x21fc | r0 = fcn_000021fc ();
0x0000869a mov sb, r0 | sb = r0;
0x0000869c str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x000086a0 cmp r0, 0 |
| if (r0 == 0) {
0x000086a2 beq 0x872e | goto label_13;
| }
0x000086a4 add.w r8, r0, sl | r8 = r0 + sl;
0x000086a8 mov r2, r4 | r2 = r4;
0x000086aa mov r1, r6 | r1 = r6;
0x000086ac mov r0, r8 | r0 = r8;
0x000086ae blx 0x20c0 | mmap64 ()
0x000086b2 cmp r7, 1 |
0x000086b4 mov.w r2, 0 | r2 = 0;
0x000086b8 it hi |
| if (r7 <= 1) {
0x000086ba movhi ip, 1 |
| }
0x000086be strb.w r2, [r8, r4] | *((r8 + r4)) = r2;
0x000086c2 it hi |
| if (r7 <= 1) {
0x000086c4 subhi r0, ip, r6 | r0 = ip - r6;
| }
0x000086c8 str r2, [r8, -0x4] | *((r8 - 0x4)) = r2;
0x000086cc it hi |
| if (r7 <= 1) {
0x000086ce movhi lr, r2 | lr = r2;
| }
0x000086d0 str.w r8, [sb] | __asm ("str.w r8, [sb]");
| if (r7 > 1) {
0x000086d4 bhi 0x86e8 | goto label_14;
| }
0x000086d6 b 0x8722 | goto label_15;
| do {
0x000086d8 cmp ip, r7 |
0x000086da add.w r2, r2, 1 | r2++;
| if (ip >= r7) {
0x000086de bhs 0x8722 | goto label_15;
| }
| label_1:
0x000086e0 cmp r2, r4 |
0x000086e2 sbcs.w r3, lr, r5 | __asm ("sbcs.w r3, lr, r5");
| if (r2 >= r4) {
0x000086e6 bhs 0x8722 | goto label_15;
| }
| label_14:
0x000086e8 ldrb.w r3, [r8, r2] | r3 = *((r8 + r2));
0x000086ec add.w sl, r8, r2 | sl = r8 + r2;
0x000086f0 cmp r3, 0 |
0x000086f2 bne 0x86d8 |
| } while (r3 != 0);
0x000086f4 ldrb r3, [r6, r2] | r3 = *((r6 + r2));
0x000086f6 adds r1, r6, r2 | r1 = r6 + r2;
| if (r3 != 0) {
0x000086f8 cbnz r3, 0x8716 | goto label_16;
| }
0x000086fa cmp r2, r4 |
0x000086fc sbcs r3, r5 | __asm ("sbcs r3, r5");
| if (r2 <= r4) {
0x000086fe blo 0x8708 | goto label_17;
| }
0x00008700 b 0x8716 | goto label_16;
| do {
0x00008702 cmp r2, r4 |
0x00008704 sbcs r3, r5 | __asm ("sbcs r3, r5");
| if (r2 >= r4) {
0x00008706 bhs 0x8712 | goto label_18;
| }
| label_17:
0x00008708 adds r2, r0, r1 | r2 = r0 + r1;
0x0000870a ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x0000870e cmp r3, 0 |
0x00008710 beq 0x8702 |
| } while (r3 == 0);
| label_18:
0x00008712 add.w sl, r8, r2 | sl = r8 + r2;
| label_16:
0x00008716 str.w sl, [sb, ip, lsl 2] | __asm ("str.w sl, [sb, ip, lsl 2]");
0x0000871a add.w ip, ip, 1 |
0x0000871e cmp ip, r7 |
| if (ip <= r7) {
0x00008720 blo 0x86e0 | goto label_1;
| }
| label_15:
0x00008722 mov r0, r7 | r0 = r7;
0x00008724 b 0x860e | goto label_2;
| label_12:
0x00008726 adds r7, 1 | r7++;
0x00008728 b 0x868a | goto label_3;
| label_7:
0x0000872a blx 0x2108 | fcn_00002108 ();
| label_13:
0x0000872e blx 0x22f4 | r0 = gzerror ();
0x00008732 ldr r0, [r0] | r0 = *(r0);
0x00008734 rsbs r0, r0, 0 | r0 -= ;
0x00008736 b 0x860e | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libkmod.so.2.3.7 @ 0x8744 */
| #include <stdint.h>
|
; (fcn) fcn.00008744 () | void fcn_00008744 (int16_t arg_1h, int16_t arg1, int16_t arg2) {
| int16_t var_1h;
| 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_1ch;
| int16_t var_20h;
| int32_t var_20h_2;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x00008744 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00008746 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000874a sub sp, 0x34 |
0x0000874c ldr r2, [pc, 0x214] |
0x0000874e movs r5, 0 | r5 = 0;
0x00008750 mov r4, r3 | r4 = r3;
0x00008752 mov r7, r0 | r7 = r0;
0x00008754 str r3, [sp, 8] | var_8h = r3;
0x00008756 tst.w r4, 2 |
0x0000875a ldr r3, [pc, 0x20c] | r3 = *(0x896a);
0x0000875c add r2, pc | r2 = 0x110c4;
0x0000875e str r1, [sp, 4] | var_4h = r1;
0x00008760 ite ne |
| if ((r4 & 2) == 0) {
0x00008762 movne r6, 4 | r6 = 4;
| }
| if ((r4 & 2) != 0) {
0x00008764 moveq r6, 8 | r6 = 8;
| }
0x00008766 ldr r3, [r2, r3] |
0x00008768 add r2, sp, 0x1c | r2 += var_1ch;
0x0000876a ldr r3, [r3] | r3 = *(0x110c4);
0x0000876c str r3, [sp, 0x2c] | var_2ch = r3;
0x0000876e mov.w r3, 0 | r3 = 0;
0x00008772 str r5, [r1] | *(r1) = r5;
0x00008774 ldr r1, [pc, 0x1f4] |
0x00008776 add r3, sp, 0x20 | r3 += var_20h;
0x00008778 str r6, [sp] | *(sp) = r6;
0x0000877a add r1, pc | r1 = 0x110ea;
0x0000877c bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x00008780 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 < r0) {
0x00008782 blt.w 0x88dc | goto label_2;
| }
0x00008786 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00008788 cmp r4, 0 |
| if (r4 == 0) {
0x0000878a beq.w 0x8916 | goto label_3;
| }
0x0000878e ldrd r3, r2, [sp, 0x20] | __asm ("ldrd r3, r2, [var_20h]");
0x00008792 orrs.w r1, r3, r2 | r1 = r3 | r2;
0x00008794 lsls r2, r0, 4 | r2 = r0 << 4;
| if (r2 == r0) {
0x00008796 beq.w 0x88f8 | goto label_4;
| }
0x0000879a ands r0, r3, 0x3f | r0 = r3 & 0x3f;
0x0000879e str r0, [sp, 0xc] | var_ch = r0;
| if (r0 != r3) {
0x000087a0 bne.w 0x8950 | goto label_5;
| }
0x000087a4 lsr.w r8, r3, 6 | r8 = r3 >> 6;
0x000087a8 ldr.w sb, [r7] | sb = *(r7);
0x000087ac orr.w r8, r8, r2, lsl 26 | r8 |= (r2 << 26);
0x000087b0 sub.w r5, r4, sb | r5 = r4 - sb;
0x000087b4 cmp.w r8, 0 |
| if (r8 <= 0) {
0x000087b8 ble.w 0x891a | goto label_6;
| }
0x000087bc adds r1, r5, 1 | r1 = r5 + 1;
0x000087be strd r4, r5, [sp, 0x10] | __asm ("strd r4, r5, [var_10h]");
0x000087c2 add r1, r6 | r1 += r6;
0x000087c4 mov r4, r8 | r4 = r8;
0x000087c6 add.w sl, sb, r1 | sl = sb + r1;
0x000087ca ldrd r6, r7, [r7, 8] | __asm ("ldrd r6, r7, [r7, 8]");
0x000087ce mov fp, sl |
0x000087d0 mov r5, r0 | r5 = r0;
0x000087d2 mov sl, r0 | sl = r0;
0x000087d4 mov r8, r0 | r8 = r0;
0x000087d6 b 0x87da |
| while (r4 != r3) {
0x000087d8 mov r8, r3 | r8 = r3;
0x000087da sub.w r3, fp, sb | r3 = fp - sb;
0x000087de subs r3, 1 | r3--;
0x000087e0 cmp r3, r6 |
0x000087e2 sbcs.w r3, sl, r7 | __asm ("sbcs.w r3, sl, r7");
| if (r3 >= r6) {
0x000087e6 bhs.w 0x892c | goto label_7;
| }
0x000087ea ldrb r3, [fp, -0x1] | r3 = *((fp - 0x1));
0x000087ee cmp r3, 0x2e |
0x000087f0 ite eq |
| if (r3 != 0x2e) {
0x000087f2 moveq r0, fp | r0 = fp;
| }
| if (r3 == 0x2e) {
0x000087f4 subne r0, fp, 1 | r0 = fp - 1;
| }
0x000087f8 add.w fp, fp, 0x40 |
0x000087fc blx 0x22a8 | fcn_000022a8 ();
0x00008800 add.w r3, r8, 1 | r3 = r8 + 1;
0x00008804 adds r0, 1 | r0++;
0x00008806 cmp r4, r3 |
0x00008808 add r5, r0 | r5 += r0;
0x0000880a bne 0x87d8 |
| }
0x0000880c ldr r4, [sp, 0x10] | r4 = var_10h;
0x0000880e mov fp, r5 |
0x00008810 str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h]");
0x00008814 lsl.w r8, r3, 4 | r8 = r3 << 4;
0x00008818 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0000881a add.w r0, r8, fp | r0 = r8 + fp;
0x0000881e str r3, [sp, 0x14] | var_14h = r3;
0x00008820 blx 0x21fc | fcn_000021fc ();
0x00008824 ldr r3, [sp, 4] | r3 = var_4h;
0x00008826 str r0, [r3] | *(r3) = r0;
0x00008828 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000882a cmp r0, 0 |
| if (r0 == 0) {
0x0000882c beq.w 0x895a | goto label_8;
| }
0x00008830 ldr r2, [sp, 8] | r2 = var_8h;
0x00008832 add.w sl, r0, r8 | sl = r0 + r8;
0x00008836 str r3, [sp, 0x14] | var_14h = r3;
0x00008838 mov r3, r7 | r3 = r7;
0x0000883a mov r8, r0 | r8 = r0;
0x0000883c mov r7, r6 | r7 = r6;
0x0000883e and r2, r2, 0x10 | r2 &= 0x10;
0x00008842 mov r6, sl | r6 = sl;
0x00008844 str r2, [sp, 8] | var_8h = r2;
0x00008846 mov.w fp, 0 |
0x0000884a ldr r2, [sp] | r2 = *(sp);
0x0000884c mov sl, r3 | sl = r3;
0x0000884e add r2, r5 | r2 += r5;
0x00008850 add sb, r2 | sb += r2;
| label_0:
0x00008852 ldr r3, [sp] | r3 = *(sp);
0x00008854 adds r1, r5, r3 | r1 = r5 + r3;
0x00008856 mov.w r3, 0 | r3 = 0;
0x0000885a adc r2, r3, 0 | __asm ("adc r2, r3, 0");
0x0000885e cmp r7, r1 |
0x00008860 sbcs.w r2, sl, r2 | __asm ("sbcs.w r2, sl, r2");
| if (r7 <= r1) {
0x00008864 blo 0x893e | goto label_9;
| }
0x00008866 ldr r3, [sp, 8] | r3 = var_8h;
0x00008868 cmp r3, 0 |
| if (r3 == 0) {
0x0000886a beq 0x88fc | goto label_10;
| }
0x0000886c ldr r0, [sp, 0xc] | r0 = var_ch;
0x0000886e mov ip, r4 |
0x00008870 movs r2, 0 | r2 = 0;
| do {
0x00008872 ldrb r3, [ip], 1 | r3 = *(ip);
| ip++;
0x00008876 lsls r2, r2, 8 | r2 <<= 8;
0x00008878 orr.w r2, r2, r0, lsr 24 | r2 |= (r0 >> 24);
0x0000887c cmp sb, ip |
0x0000887e orr.w r0, r3, r0, lsl 8 | r0 = r3 | (r0 << 8);
0x00008882 bne 0x8872 |
| } while (sb != ip);
| label_1:
0x00008884 cmp r1, r7 |
0x00008886 mov.w r3, 0 | r3 = 0;
0x0000888a sbcs.w r1, r3, sl | __asm ("sbcs.w r1, r3, sl");
| if (r1 >= r7) {
0x0000888e bhs 0x892c | goto label_7;
| }
0x00008890 ldr r3, [sp] | r3 = *(sp);
0x00008892 adds r5, 0x40 | r5 += 0x40;
0x00008894 ldrb r1, [r4, r3] | r1 = *((r4 + r3));
0x00008896 adds r4, 0x40 | r4 += 0x40;
0x00008898 strd r0, r2, [r8] | __asm ("strd r0, r2, [r8]");
0x0000889c movs r2, 0x55 | r2 = 0x55;
0x0000889e str.w r6, [r8, 0xc] | __asm ("str.w r6, [r8, 0xc]");
0x000088a2 add.w r8, r8, 0x10 | r8 += 0x10;
0x000088a6 cmp r1, 0x2e |
0x000088a8 str r2, [r8, -0x8] | *((r8 - 0x8)) = r2;
0x000088ac ite eq |
| if (r1 != 0x2e) {
0x000088ae addeq r1, sb, 1 | r1 = sb + 1;
| }
| if (r1 != 0x2e) {
0x000088b2 mov r1, sb | r1 = sb;
| }
0x000088b4 mov r0, r1 | r0 = r1;
0x000088b6 str r1, [sp, 4] | var_4h = r1;
0x000088b8 blx 0x22a8 | fcn_000022a8 ();
0x000088bc ldr r1, [sp, 4] | r1 = var_4h;
0x000088be adds r2, r0, 1 | r2 = r0 + 1;
0x000088c0 mov r0, r6 | r0 = r6;
0x000088c2 add r6, r2 | r6 += r2;
0x000088c4 blx 0x20c0 | mmap64 ()
0x000088c8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000088ca add.w sb, sb, 0x40 | sb += 0x40;
0x000088ce add.w r2, fp, 1 | r2 += arg_1h;
0x000088d2 cmp fp, r3 |
| if (fp != r3) {
0x000088d4 beq 0x88da |
0x000088d6 mov fp, r2 |
0x000088d8 b 0x8852 | goto label_0;
| }
0x000088da ldr r3, [sp, 0x14] | r3 = var_14h;
| do {
| label_2:
0x000088dc ldr r1, [pc, 0x90] |
0x000088de ldr r2, [pc, 0x88] | r2 = *(0x896a);
0x000088e0 add r1, pc | r1 = 0x11254;
0x000088e2 ldr r2, [r1, r2] | r2 = *(0x11254);
0x000088e4 ldr r1, [r2] | r1 = *(0x11254);
0x000088e6 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000088e8 eors r1, r2 | r1 ^= r2;
0x000088ea mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x000088ee bne 0x8956 | goto label_11;
| }
0x000088f0 mov r0, r3 | r0 = r3;
0x000088f2 add sp, 0x34 |
0x000088f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x000088f8 mov r3, r5 | r3 = r5;
0x000088fa b 0x88dc |
| } while (1);
| label_10:
0x000088fc ldrd r2, r0, [sp, 8] | __asm ("ldrd r2, r0, [var_8h]");
0x00008900 mov ip, sb |
| do {
0x00008902 ldrb r3, [ip, -0x1]! | r3 = *((ip -= 0x1));
0x00008906 lsls r2, r2, 8 | r2 <<= 8;
0x00008908 orr.w r2, r2, r0, lsr 24 | r2 |= (r0 >> 24);
0x0000890c cmp r4, ip |
0x0000890e orr.w r0, r3, r0, lsl 8 | r0 = r3 | (r0 << 8);
0x00008912 bne 0x8902 |
| } while (r4 != ip);
0x00008914 b 0x8884 | goto label_1;
| label_3:
0x00008916 mov r3, r4 | r3 = r4;
0x00008918 b 0x88dc | goto label_2;
| label_6:
0x0000891a lsl.w r0, r8, 4 | r0 = r8 << 4;
0x0000891e blx 0x21fc | fcn_000021fc ();
0x00008922 ldr r3, [sp, 4] | r3 = var_4h;
0x00008924 str r0, [r3] | *(r3) = r0;
| if (r0 != 0) {
0x00008926 cbz r0, 0x895a |
0x00008928 mov r3, r8 | r3 = r8;
0x0000892a b 0x88dc | goto label_2;
| label_7:
0x0000892c ldr r3, [pc, 0x44] |
0x0000892e movs r2, 0xca | r2 = 0xca;
0x00008930 ldr r1, [pc, 0x44] |
0x00008932 ldr r0, [pc, 0x48] |
0x00008934 add r3, pc | r3 = 0x112ac;
0x00008936 add r1, pc | r1 = 0x112b2;
0x00008938 add r0, pc | r0 = 0x112ba;
0x0000893a blx 0x246c | fcn_0000246c ();
| label_9:
0x0000893e ldr r3, [pc, 0x40] |
0x00008940 movs r2, 0x89 | r2 = 0x89;
0x00008942 ldr r1, [pc, 0x40] |
0x00008944 ldr r0, [pc, 0x40] |
0x00008946 add r3, pc | r3 = 0x112cc;
0x00008948 add r1, pc | r1 = 0x112d2;
0x0000894a add r0, pc | r0 = 0x112d6;
0x0000894c blx 0x246c | fcn_0000246c ();
| label_5:
0x00008950 mvn r3, 0x15 | r3 = ~0x15;
0x00008954 b 0x88dc | goto label_2;
| label_11:
0x00008956 blx 0x2108 | fcn_00002108 ();
| }
| label_8:
0x0000895a blx 0x22f4 | r0 = gzerror ();
0x0000895e ldr r3, [r0] | r3 = *(r0);
0x00008960 rsbs r3, r3, 0 | r3 -= ;
0x00008962 b 0x88dc | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libkmod.so.2.3.7 @ 0x898c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000898c () | void fcn_0000898c (int16_t arg1, int16_t arg2) {
| 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_24h;
| int16_t var_28h;
| int16_t var_30h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x0000898c ldr r2, [pc, 0x1ec] |
0x0000898e ldr r3, [pc, 0x1f0] | r3 = *(0x8b82);
0x00008990 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00008994 sub sp, 0x44 |
0x00008996 add r2, pc | r2 = 0x11516;
0x00008998 ldr.w r8, [r0, 0x38] | r8 = *((r0 + 0x38));
0x0000899c mov r7, r1 | r7 = r1;
0x0000899e ldr r3, [r2, r3] |
0x000089a0 ldr r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x000089a2 ldr.w fp, [r0, 8] | fp = *((r0 + 8));
0x000089a6 ldr r3, [r3] | r3 = *(0x11516);
0x000089a8 str r3, [sp, 0x3c] | var_3ch = r3;
0x000089aa mov.w r3, 0 | r3 = 0;
0x000089ae ldr r3, [r0, 0x3c] | r3 = *((r0 + 0x3c));
0x000089b0 str r2, [sp, 0x14] | var_14h = r2;
0x000089b2 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x000089b4 cmp r8, fp |
0x000089b6 ldr r1, [r0, 0x34] | r1 = *((r0 + 0x34));
0x000089b8 sbcs r3, r2 | __asm ("sbcs r3, r2");
0x000089ba str r2, [sp, 0x1c] | var_1ch = r2;
0x000089bc str r1, [sp, 0x18] | var_18h = r1;
| if (r8 >= fp) {
0x000089be bhs.w 0x8b60 | goto label_5;
| }
0x000089c2 ldrh r6, [r0, 0x20] | r6 = *((r0 + 0x20));
0x000089c4 mov r4, r0 | r4 = r0;
0x000089c6 ldr r3, [r0] | r3 = *(r0);
0x000089c8 cmp r6, 1 |
0x000089ca str r3, [sp, 0x10] | var_10h = r3;
| if (r6 < 1) {
0x000089cc bls 0x8ac4 | goto label_6;
| }
0x000089ce movs r5, 1 | r5 = 1;
0x000089d0 add.w sl, sp, 0x30 | sl += var_30h;
0x000089d4 add.w sb, sp, 0x28 | sb += var_28h;
0x000089d8 add r3, sp, 0x24 | r3 += var_24h;
0x000089da str r3, [sp, 0xc] | var_ch = r3;
| label_0:
0x000089dc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000089de mov r2, sb | r2 = sb;
0x000089e0 mov r1, r5 | r1 = r5;
0x000089e2 mov r0, r4 | r0 = r4;
0x000089e4 str r3, [sp] | *(sp) = r3;
0x000089e6 mov r3, sl | r3 = sl;
0x000089e8 bl 0x7f38 | r0 = fcn_00007f38 (r0, r1, r2, r3);
0x000089ec cmp r0, 0 |
| if (r0 < 0) {
0x000089ee blt 0x8abc | goto label_7;
| }
0x000089f0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000089f2 movs r2, 0 | r2 = 0;
0x000089f4 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000089f6 cmp r1, r3 |
0x000089f8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000089fa sbcs.w r3, r2, r3 | __asm ("sbcs.w r3, r2, r3");
| if (r1 >= r3) {
0x000089fe bhs 0x8abc | goto label_7;
| }
0x00008a00 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00008a02 add r1, r8 | r1 += r8;
0x00008a04 mov r0, r7 | r0 = r7;
0x00008a06 add r1, r3 | r1 += r3;
0x00008a08 blx 0x201c | r0 = fcn_0000201c ();
0x00008a0c mov r3, r0 | r3 = r0;
0x00008a0e cmp r0, 0 |
| if (r0 != 0) {
0x00008a10 bne 0x8abc | goto label_7;
| }
0x00008a12 cmp r5, r6 |
| if (r5 >= r6) {
0x00008a14 bhs.w 0x8b6c | goto label_8;
| }
0x00008a16 strh r2, [r5, 4] | *((r5 + 4)) = r2;
0x00008a18 ldrh r2, [r4, 0x22] | r2 = *((r4 + 0x22));
0x00008a1a ldr r7, [r4, 0x18] | r7 = *((r4 + 0x18));
0x00008a1c ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00008a1e mul r2, r5, r2 | r2 = r5 * r2;
0x00008a22 adds r7, r2, r7 | r7 = r2 + r7;
0x00008a24 adc.w r1, r1, r2, asr 31 | __asm ("adc.w r1, r1, r2, asr 31");
0x00008a28 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00008a2a cmp r7, fp |
0x00008a2c sbcs r1, r2 | __asm ("sbcs r1, r2");
| if (r7 >= fp) {
0x00008a2e bhs.w 0x8b60 | goto label_5;
| }
0x00008a32 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00008a34 asrs r2, r7, 0x1f | r2 = r7 >> 0x1f;
0x00008a36 adds r7, 8 | r7 += 8;
0x00008a38 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00008a3c lsls r0, r1, 0x1e | r0 = r1 << 0x1e;
0x00008a3e itt pl |
| if (r0 < r1) {
0x00008a40 movpl r5, 8 | r5 = 8;
| }
| if (r0 < r1) {
0x00008a42 movpl r6, r5 | r6 = r5;
| }
| if (r0 < r1) {
0x00008a44 bmi 0x8aca | goto label_9;
| }
| label_2:
0x00008a46 adds r0, r7, r6 | r0 = r7 + r6;
0x00008a48 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00008a4c cmp fp, r0 |
0x00008a4e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00008a50 sbcs r0, r2 | __asm ("sbcs r0, r2");
| if (fp <= r0) {
0x00008a52 blo.w 0x8b64 | goto label_10;
| }
0x00008a56 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00008a58 ands r1, r1, 0x10 | r1 &= 0x10;
0x00008a5c add.w r0, r2, r7 | r0 = r2 + r7;
| if (r1 == r1) {
0x00008a60 beq 0x8ad0 | goto label_11;
| }
0x00008a62 subs r0, 1 | r0--;
0x00008a64 movs r1, 0 | r1 = 0;
0x00008a66 add r5, r0 | r5 += r0;
0x00008a68 mov r2, r1 | r2 = r1;
| do {
0x00008a6a ldrb ip, [r0, 1]! | ip = *((r0 += 1));
0x00008a6e lsls r2, r2, 8 | r2 <<= 8;
0x00008a70 orr.w r2, r2, r1, lsr 24 | r2 |= (r1 >> 24);
0x00008a74 cmp r0, r5 |
0x00008a76 orr.w r1, ip, r1, lsl 8 | r1 = ip | (r1 << 8);
0x00008a7a bne 0x8a6a |
| } while (r0 != r5);
0x00008a7c bic r8, r1, 2 | r8 = BIT_MASK (r1, 2);
0x00008a80 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00008a82 mov r5, r2 | r5 = r2;
0x00008a84 cmp r1, 0 |
| if (r1 == 0) {
0x00008a86 beq 0x8b3a | goto label_12;
| }
0x00008a88 add r1, r7 | r1 += r7;
| label_4:
0x00008a8a add r6, r1 | r6 += r1;
| do {
0x00008a8c strb r8, [r6, -0x1]! | *((r6 -= 0x1)) = r8;
0x00008a90 lsr.w r2, r8, 8 | r2 = r8 >> 8;
0x00008a94 cmp r1, r6 |
0x00008a96 orr.w r8, r2, r5, lsl 24 | r8 = r2 | (r5 << 24);
0x00008a9a lsr.w r5, r5, 8 | r5 >>= 8;
0x00008a9e bne 0x8a8c |
| } while (r1 != r6);
| label_1:
0x00008aa0 ldr r1, [pc, 0xe0] |
0x00008aa2 ldr r2, [pc, 0xdc] | r2 = *(0x8b82);
0x00008aa4 add r1, pc | r1 = 0x1162c;
0x00008aa6 ldr r2, [r1, r2] | r2 = *(0x1162c);
0x00008aa8 ldr r1, [r2] | r1 = *(0x1162c);
0x00008aaa ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00008aac eors r1, r2 | r1 ^= r2;
0x00008aae mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x00008ab2 bne 0x8b68 | goto label_13;
| }
0x00008ab4 mov r0, r3 | r0 = r3;
0x00008ab6 add sp, 0x44 |
0x00008ab8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x00008abc adds r5, 1 | r5++;
0x00008abe uxth r5, r5 | r5 = (int16_t) r5;
0x00008ac0 cmp r5, r6 |
| if (r5 != r6) {
0x00008ac2 bne 0x89dc | goto label_0;
| }
| label_6:
0x00008ac4 mvn r3, 1 | r3 = ~1;
0x00008ac8 b 0x8aa0 | goto label_1;
| label_9:
0x00008aca movs r5, 4 | r5 = 4;
0x00008acc mov r6, r5 | r6 = r5;
0x00008ace b 0x8a46 | goto label_2;
| label_11:
0x00008ad0 add.w ip, r0, r5 |
0x00008ad4 mov lr, r1 | lr = r1;
| do {
0x00008ad6 ldrb r2, [ip, -0x1]! | r2 = *((ip -= 0x1));
0x00008ada lsl.w lr, lr, 8 | lr <<= 8;
0x00008ade orr.w lr, lr, r1, lsr 24 | lr |= (r1 >> 24);
0x00008ae2 orr.w r1, r2, r1, lsl 8 | r1 = r2 | (r1 << 8);
0x00008ae6 rsb.w r2, ip, 1 | r2 = 1 - ip;
0x00008aea add r2, r0 | r2 += r0;
0x00008aec add r2, r5 | r2 += r5;
0x00008aee cmp r2, r5 |
0x00008af0 bls 0x8ad6 |
| } while (r2 < r5);
0x00008af2 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00008af4 bic r5, r1, 2 | r5 = BIT_MASK (r1, 2);
0x00008af8 mov r8, lr | r8 = lr;
| if (r2 == 0) {
0x00008afa cbz r2, 0x8b14 | goto label_14;
| }
0x00008afc add r2, r7 | r2 += r7;
| label_3:
0x00008afe add r6, r2 | r6 += r2;
| do {
0x00008b00 strb r5, [r2], 1 | *(r2) = r5;
| r2++;
0x00008b04 lsrs r1, r5, 8 | r1 = r5 >> 8;
0x00008b06 cmp r6, r2 |
0x00008b08 orr.w r5, r1, r8, lsl 24 | r5 = r1 | (r8 << 24);
0x00008b0c lsr.w r8, r8, 8 | r8 >>= 8;
0x00008b10 bne 0x8b00 |
| } while (r6 != r2);
0x00008b12 b 0x8aa0 | goto label_1;
| label_14:
0x00008b14 mov r0, fp | r0 = fp;
0x00008b16 str r3, [sp, 0xc] | var_ch = r3;
0x00008b18 blx 0x21fc | fcn_000021fc ();
0x00008b1c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00008b1e mov sb, r0 | sb = r0;
0x00008b20 str r0, [r4, 4] | *((r4 + 4)) = r0;
| if (r0 != 0) {
0x00008b22 cbz r0, 0x8b70 |
0x00008b24 mov r2, fp | r2 = fp;
0x00008b26 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00008b28 str r3, [sp, 0xc] | var_ch = r3;
0x00008b2a blx 0x20c0 | mmap64 ()
0x00008b2e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00008b30 add.w r2, sb, r7 | r2 = sb + r7;
0x00008b34 str.w sb, [r4] | __asm ("str.w sb, [r4]");
0x00008b38 b 0x8afe | goto label_3;
| label_12:
0x00008b3a mov r0, fp | r0 = fp;
0x00008b3c str r3, [sp, 0xc] | var_ch = r3;
0x00008b3e blx 0x21fc | fcn_000021fc ();
0x00008b42 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00008b44 mov sb, r0 | sb = r0;
0x00008b46 str r0, [r4, 4] | *((r4 + 4)) = r0;
| if (r0 == 0) {
0x00008b48 cbz r0, 0x8b70 | goto label_15;
| }
0x00008b4a ldr r1, [sp, 0x10] | r1 = var_10h;
0x00008b4c mov r2, fp | r2 = fp;
0x00008b4e str r3, [sp, 0xc] | var_ch = r3;
0x00008b50 blx 0x20c0 | mmap64 ()
0x00008b54 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00008b56 add.w r1, sb, r7 | r1 = sb + r7;
0x00008b5a str.w sb, [r4] | __asm ("str.w sb, [r4]");
0x00008b5e b 0x8a8a | goto label_4;
| label_5:
0x00008b60 bl 0x7ed8 | fcn_00007ed8 ();
| label_10:
0x00008b64 bl 0x7ef8 | fcn_00007ef8 ();
| label_13:
0x00008b68 blx 0x2108 | fcn_00002108 ();
| label_8:
0x00008b6c bl 0x7f18 | fcn_00007f18 ();
| }
| label_15:
0x00008b70 blx 0x22f4 | r0 = gzerror ();
0x00008b74 ldr r3, [r0] | r3 = *(r0);
0x00008b76 rsbs r3, r3, 0 | r3 -= ;
0x00008b78 b 0x8aa0 | 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/libkmod.so.2.3.7 @ 0x8b88 */
| #include <stdint.h>
|
; (fcn) fcn.00008b88 () | void fcn_00008b88 (int16_t arg1) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_1ch;
| r0 = arg1;
0x00008b88 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00008b8c sub sp, 0x24 |
0x00008b8e ldr r5, [pc, 0x130] |
0x00008b90 add r3, sp, 0x10 | r3 += var_10h;
0x00008b92 add r2, sp, 0xc | r2 += var_ch;
0x00008b94 mov r7, r0 | r7 = r0;
0x00008b96 ldr r4, [pc, 0x12c] | r4 = *(0x8cc6);
0x00008b98 add r5, pc | r5 = 0x1185e;
0x00008b9a ldr r1, [pc, 0x12c] |
0x00008b9c ldr r4, [r5, r4] |
0x00008b9e add r1, pc | r1 = 0x1186c;
0x00008ba0 ldr r4, [r4] | r4 = *(0x1185e);
0x00008ba2 str r4, [sp, 0x1c] | var_1ch = r4;
0x00008ba4 mov.w r4, 0 | r4 = 0;
0x00008ba8 bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x00008bac subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 < r0) {
0x00008bae blt 0x8be0 | goto label_0;
| }
0x00008bb0 ldr r6, [sp, 0xc] | r6 = var_ch;
| if (r6 == 0) {
0x00008bb2 cbz r6, 0x8bde | goto label_4;
| }
0x00008bb4 ldrd r4, r5, [sp, 0x10] | __asm ("ldrd r4, r5, [var_10h]");
0x00008bb8 orrs.w r3, r4, r5 | r3 = r4 | r5;
| if (r3 == r4) {
0x00008bbc beq 0x8bde | goto label_4;
| }
0x00008bbe ldrb r3, [r6] | r3 = *(r6);
| if (r3 != 0) {
0x00008bc0 cbnz r3, 0x8c00 | goto label_5;
| }
0x00008bc2 adds r3, r6, 1 | r3 = r6 + 1;
0x00008bc4 b 0x8bd6 |
| while (r1 != r2) {
0x00008bc6 subs r4, 1 | r4--;
0x00008bc8 mov r6, r3 | r6 = r3;
0x00008bca mov r4, r2 | r4 = r2;
0x00008bcc ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x00008bd0 sbc r5, r5, 0 | __asm ("sbc r5, r5, 0");
| if (r2 != 0) {
0x00008bd4 cbnz r2, 0x8bfc | goto label_6;
| }
0x00008bd6 subs r2, r4, 1 | r2 = r4 - 1;
0x00008bd8 orrs.w r1, r2, r5 | r1 = r2 | r5;
0x00008bdc bne 0x8bc6 |
| }
| do {
| label_4:
0x00008bde movs r3, 0 | r3 = 0;
| label_0:
0x00008be0 ldr r1, [pc, 0xe8] |
0x00008be2 ldr r2, [pc, 0xe0] | r2 = *(0x8cc6);
0x00008be4 add r1, pc | r1 = 0x118b4;
0x00008be6 ldr r2, [r1, r2] | r2 = *(0x118b4);
0x00008be8 ldr r1, [r2] | r1 = *(0x118b4);
0x00008bea ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00008bec eors r1, r2 | r1 ^= r2;
0x00008bee mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x00008bf2 bne 0x8cb0 | goto label_7;
| }
0x00008bf4 mov r0, r3 | r0 = r3;
0x00008bf6 add sp, 0x24 |
0x00008bf8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00008bfc strd r4, r5, [sp, 0x10] | __asm ("strd r4, r5, [var_10h]");
| label_5:
0x00008c00 subs r3, r4, 1 | r3 = r4 - 1;
0x00008c02 orrs r3, r5 | r3 |= r5;
0x00008c04 beq 0x8bde |
| } while (r3 == r5);
0x00008c06 ldr.w fp, [pc, 0xc8] |
0x00008c0a movs r3, 0 | r3 = 0;
0x00008c0c mov r2, r3 | r2 = r3;
0x00008c0e add fp, pc | fp = 0x118e4;
| do {
| label_2:
0x00008c10 ldrb r1, [r6, r3] | r1 = *((r6 + r3));
0x00008c12 adds.w r8, r3, 1 | r8 = r3 + 1;
0x00008c16 add.w sl, r6, r3 | sl = r6 + r3;
0x00008c1a adc sb, r2, 0 | __asm ("adc sb, r2, 0");
| if (r1 != 0) {
0x00008c1e cbz r1, 0x8c62 |
0x00008c20 cmp r8, r4 |
0x00008c22 sbcs.w r1, sb, r5 | __asm ("sbcs.w r1, sb, r5");
| if (r8 >= r4) {
0x00008c26 bhs 0x8c6e | goto label_8;
| }
0x00008c28 adds r3, 9 | r3 += 9;
0x00008c2a adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00008c2e cmp r3, r4 |
0x00008c30 sbcs r2, r5 | __asm ("sbcs r2, r5");
| if (r3 >= r4) {
0x00008c32 bhs 0x8c9a | goto label_9;
| }
0x00008c34 movs r2, 9 | r2 = 9;
0x00008c36 mov r1, fp | r1 = fp;
0x00008c38 mov r0, sl | r0 = sl;
0x00008c3a blx 0x243c | r0 = fcn_0000243c ();
0x00008c3e mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00008c40 cbnz r0, 0x8ca0 | goto label_10;
| }
0x00008c42 ldr r4, [r7, 4] | r4 = *((r7 + 4));
0x00008c44 ldr r5, [r7] | r5 = *(r7);
0x00008c46 sub.w r6, sl, r5 | r6 = sl - r5;
| if (r4 == 0) {
0x00008c4a cbz r4, 0x8c74 | goto label_11;
| }
| label_1:
0x00008c4c mov r0, sl | r0 = sl;
0x00008c4e str r3, [sp, 4] | var_4h = r3;
0x00008c50 blx 0x22a8 | fcn_000022a8 ();
0x00008c54 movs r1, 0 | r1 = 0;
0x00008c56 mov r2, r0 | r2 = r0;
0x00008c58 adds r0, r4, r6 | r0 = r4 + r6;
0x00008c5a blx 0x2324 | write (r0, r1, r2);
0x00008c5e ldr r3, [sp, 4] | r3 = var_4h;
0x00008c60 b 0x8be0 | goto label_0;
| }
0x00008c62 mov r3, r8 | r3 = r8;
0x00008c64 mov r2, sb | r2 = sb;
| label_3:
0x00008c66 cmp r3, r4 |
0x00008c68 sbcs.w r1, r2, r5 | __asm ("sbcs.w r1, r2, r5");
0x00008c6c blo 0x8c10 |
| } while (r3 <= r4);
| label_8:
0x00008c6e mvn r3, 1 | r3 = ~1;
0x00008c72 b 0x8be0 | goto label_0;
| label_11:
0x00008c74 ldr.w r8, [r7, 8] | r8 = *((r7 + 8));
0x00008c78 str r0, [sp, 4] | var_4h = r0;
0x00008c7a mov r0, r8 | r0 = r8;
0x00008c7c blx 0x21fc | fcn_000021fc ();
0x00008c80 ldr r3, [sp, 4] | r3 = var_4h;
0x00008c82 mov r4, r0 | r4 = r0;
0x00008c84 str r0, [r7, 4] | *((r7 + 4)) = r0;
| if (r0 != 0) {
0x00008c86 cbz r0, 0x8cb4 |
0x00008c88 mov r2, r8 | r2 = r8;
0x00008c8a mov r1, r5 | r1 = r5;
0x00008c8c str r3, [sp, 4] | var_4h = r3;
0x00008c8e blx 0x20c0 | mmap64 ()
0x00008c92 str r4, [r7] | *(r7) = r4;
0x00008c94 ldr r3, [sp, 4] | r3 = var_4h;
0x00008c96 ldr r4, [r7, 4] | r4 = *((r7 + 4));
0x00008c98 b 0x8c4c | goto label_1;
| label_9:
0x00008c9a mov r3, r8 | r3 = r8;
0x00008c9c mov r2, sb | r2 = sb;
0x00008c9e b 0x8c10 | goto label_2;
| label_10:
0x00008ca0 mov r0, sl | r0 = sl;
0x00008ca2 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00008ca6 adds.w r3, r0, r8 | r3 = r0 + r8;
0x00008caa adc r2, sb, 0 | __asm ("adc r2, sb, 0");
0x00008cae b 0x8c66 | goto label_3;
| label_7:
0x00008cb0 blx 0x2108 | fcn_00002108 ();
| }
0x00008cb4 blx 0x22f4 | r0 = gzerror ();
0x00008cb8 ldr r3, [r0] | r3 = *(r0);
0x00008cba rsbs r3, r3, 0 | r3 -= ;
0x00008cbc b 0x8be0 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libkmod.so.2.3.7 @ 0x8cd4 */
| #include <stdint.h>
|
; (fcn) fcn.00008cd4 () | void fcn_00008cd4 (int16_t arg_1h, int16_t arg_4h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int32_t var_80h_2;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_9ch;
| r0 = arg1;
| r1 = arg2;
0x00008cd4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00008cd8 mov r5, r0 | r5 = r0;
0x00008cda vpush {d8} | __asm ("vpush {d8}");
0x00008cde sub sp, 0xa4 |
0x00008ce0 add r3, sp, 0x78 | r3 += var_78h;
0x00008ce2 add r2, sp, 0x6c | r2 += var_6ch;
0x00008ce4 ldr.w r4, [pc, 0x758] | r4 = *(0x00009440);
0x00008ce8 strd r0, r1, [sp, 0x38] | __asm ("strd r0, r1, [var_38h]");
0x00008cec ldr.w r1, [pc, 0x754] |
0x00008cf0 add r4, pc | r4 += pc;
0x00008cf2 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x00008cf4 ldr r1, [r1] | r1 = *(0x9444);
0x00008cf6 str r1, [sp, 0x9c] | var_9ch = r1;
0x00008cf8 mov.w r1, 0 | r1 = 0;
0x00008cfc ldr.w r1, [pc, 0x748] |
0x00008d00 add r1, pc | r1 = 0x1214c;
0x00008d02 bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x00008d06 cmp r0, 0 |
| if (r0 < 0) {
0x00008d08 blt.w 0x8e8c | goto label_7;
| }
0x00008d0c ldr.w r1, [pc, 0x73c] |
0x00008d10 add r3, sp, 0x80 | r3 += var_80h;
0x00008d12 add r2, sp, 0x70 | r2 += var_70h;
0x00008d14 mov r0, r5 | r0 = r5;
0x00008d16 add r1, pc | r1 = 0x12166;
0x00008d18 bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x00008d1c cmp r0, 0 |
| if (r0 < 0) {
0x00008d1e blt.w 0x8e8c | goto label_7;
| }
0x00008d22 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x00008d24 ldrd r0, r1, [sp, 0x80] | __asm ("ldrd r0, r1, [var_80h]");
0x00008d28 ands r3, r4, 2 | r3 = r4 & 2;
0x00008d2c str r3, [sp, 0x18] | var_18h = r3;
0x00008d2e ite eq |
| if (r3 != r4) {
0x00008d30 moveq r3, 0x18 | r3 = 0x18;
| }
| if (r3 == r4) {
0x00008d32 movne r3, 0x10 | r3 = 0x10;
| }
0x00008d34 str r3, [sp, 0x10] | var_10h = r3;
0x00008d36 mov r5, r3 | r5 = r3;
0x00008d38 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00008d3a movs r3, 0 | r3 = 0;
0x00008d3c bl 0xac00 | fcn_0000ac00 (r0, r1, r2, r3);
0x00008d40 str r3, [sp, 0x4c] | var_4ch = r3;
0x00008d42 orrs r3, r2 | r3 |= r2;
0x00008d44 str r0, [sp, 0x2c] | var_2ch = r0;
0x00008d46 str r2, [sp, 0xc] | var_ch = r2;
| if (r3 != r2) {
0x00008d48 bne.w 0x8e8c | goto label_7;
| }
0x00008d4c ldr r1, [sp, 0x38] | r1 = var_38h;
0x00008d4e cmp r0, 1 |
0x00008d50 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00008d52 ldr.w r8, [r1] | r8 = *(r1);
0x00008d56 sub.w r3, r3, r8 | r3 -= r8;
0x00008d5a add.w r2, r3, r5 | r2 = r3 + r5;
0x00008d5e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00008d60 str r2, [sp, 0x54] | var_54h = r2;
0x00008d62 str r2, [sp, 0x58] | var_58h = r2;
0x00008d64 sub.w r3, r3, r8 | r3 -= r8;
0x00008d68 str r3, [sp, 0x20] | var_20h = r3;
0x00008d6a asr.w r3, r3, 0x1f | r3 >>= 0x1f;
0x00008d6e str r3, [sp, 0x24] | var_24h = r3;
0x00008d70 mov r3, r2 | r3 = r2;
0x00008d72 mov.w r2, 0 | r2 = 0;
0x00008d76 str r2, [sp, 0x28] | var_28h = r2;
| if (r0 <= 1) {
0x00008d78 ble.w 0x8e8c | goto label_7;
| }
0x00008d7c mov sb, r3 | sb = r3;
0x00008d7e ldr.w fp, [pc, 0x6d0] |
0x00008d82 movs r3, 1 | r3 = 1;
0x00008d84 and r2, r4, 0x10 | r2 = r4 & 0x10;
0x00008d88 str r3, [sp, 8] | var_8h = r3;
0x00008d8a add.w r3, r8, 4 | r3 = r8 + 4;
0x00008d8e str r3, [sp, 0x40] | var_40h = r3;
0x00008d90 add.w r3, r8, -1 | r3 = r8 + -1;
0x00008d94 add fp, pc | fp = 0x121ea;
0x00008d96 str r2, [sp, 0x14] | var_14h = r2;
0x00008d98 str r3, [sp, 0x44] | var_44h = r3;
0x00008d9a add.w r3, r8, 3 | r3 = r8 + 3;
0x00008d9e ldr r2, [sp, 0x78] | r2 = var_78h;
0x00008da0 movs r5, 0 | r5 = 0;
0x00008da2 str r3, [sp, 0x48] | var_48h = r3;
0x00008da4 mov r3, fp | r3 = fp;
0x00008da6 mov fp, sb |
0x00008da8 mov sb, r3 | sb = r3;
0x00008daa ldr r3, [sp, 0x18] | r3 = var_18h;
0x00008dac mov r6, r5 | r6 = r5;
0x00008dae str r2, [sp, 0x30] | var_30h = r2;
0x00008db0 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x00008db2 ldrd r7, sl, [r1, 8] | __asm ("ldrd r7, sl, [r1, 8]");
0x00008db6 adds.w r1, fp, 4 | r1 += arg_4h;
0x00008dba str r5, [sp, 0x1c] | var_1ch = r5;
0x00008dbc str r2, [sp, 0x34] | var_34h = r2;
0x00008dbe adc r2, r5, 0 | __asm ("adc r2, r5, 0");
0x00008dc2 cmp r3, 0 |
| if (r3 == 0) {
0x00008dc4 beq 0x8e5c | goto label_11;
| }
| label_0:
0x00008dc6 cmp r7, r1 |
0x00008dc8 sbcs.w r2, sl, r2 | __asm ("sbcs.w r2, sl, r2");
| if (r7 <= r1) {
0x00008dcc blo.w 0x9414 | goto label_12;
| }
0x00008dd0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00008dd2 add.w r0, r8, fp | r0 = r8 + fp;
0x00008dd6 cmp r3, 0 |
| if (r3 == 0) {
0x00008dd8 beq.w 0x8f02 | goto label_13;
| }
0x00008ddc ldr r3, [sp, 0x44] | r3 = var_44h;
0x00008dde ldr r4, [sp, 0xc] | r4 = var_ch;
0x00008de0 add.w r2, r3, fp | r2 = r3 + fp;
0x00008de4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00008de6 add.w r0, r3, fp | r0 = r3 + fp;
| do {
0x00008dea ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00008dee cmp r2, r0 |
0x00008df0 orr.w r4, r3, r4, lsl 8 | r4 = r3 | (r4 << 8);
0x00008df4 bne 0x8dea |
| } while (r2 != r0);
| label_1:
0x00008df6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00008df8 movs r2, 0 | r2 = 0;
0x00008dfa cmp r4, r3 |
0x00008dfc ldr r3, [sp, 0x34] | r3 = var_34h;
0x00008dfe sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r4 >= r3) {
0x00008e00 bhs 0x8e8c | goto label_7;
| }
0x00008e02 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00008e04 adds r4, r4, r3 | r4 += r3;
0x00008e06 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00008e08 adc r2, r3, 0 | __asm ("adc r2, r3, 0");
0x00008e0c cmp r4, r7 |
0x00008e0e sbcs.w r2, r2, sl | __asm ("sbcs.w r2, r2, sl");
| if (r4 >= r7) {
0x00008e12 bhs.w 0x9418 | goto label_14;
| }
0x00008e16 add r4, r8 | r4 += r8;
0x00008e18 movs r2, 6 | r2 = 6;
0x00008e1a mov r1, sb | r1 = sb;
0x00008e1c mov r0, r4 | r0 = r4;
0x00008e1e blx 0x243c | r0 = fcn_0000243c ();
| if (r0 == 0) {
0x00008e22 cbnz r0, 0x8e34 |
0x00008e24 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00008e26 adds r0, r4, 6 | r0 = r4 + 6;
0x00008e28 adds r6, 1 | r6++;
0x00008e2a adds r3, 1 | r3++;
0x00008e2c str r3, [sp, 0x1c] | var_1ch = r3;
0x00008e2e blx 0x22a8 | r0 = fcn_000022a8 ();
0x00008e32 add r6, r0 | r6 += r0;
| }
0x00008e34 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00008e36 adds.w r3, r3, fp | r3 += fp;
0x00008e3a mov fp, r3 |
0x00008e3c ldr r3, [sp, 8] | r3 = var_8h;
0x00008e3e adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x00008e42 adds r2, r3, 1 | r2 = r3 + 1;
0x00008e44 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00008e46 cmp r3, r2 |
| if (r3 == r2) {
0x00008e48 beq.w 0x905a | goto label_15;
| }
0x00008e4c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00008e4e adds.w r1, fp, 4 | r1 += arg_4h;
0x00008e52 str r2, [sp, 8] | var_8h = r2;
0x00008e54 adc r2, r5, 0 | __asm ("adc r2, r5, 0");
0x00008e58 cmp r3, 0 |
| if (r3 != 0) {
0x00008e5a bne 0x8dc6 | goto label_0;
| }
| label_11:
0x00008e5c cmp r7, r1 |
0x00008e5e sbcs.w r2, sl, r2 | __asm ("sbcs.w r2, sl, r2");
| if (r7 <= r1) {
0x00008e62 blo.w 0x9414 | goto label_12;
| }
0x00008e66 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00008e68 add.w r0, r8, fp | r0 = r8 + fp;
0x00008e6c cmp r3, 0 |
| if (r3 == 0) {
0x00008e6e beq 0x8f18 | goto label_16;
| }
0x00008e70 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00008e72 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00008e74 add.w r2, r3, fp | r2 = r3 + fp;
0x00008e78 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00008e7a add.w r0, r3, fp | r0 = r3 + fp;
| do {
0x00008e7e ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00008e82 cmp r2, r0 |
0x00008e84 orr.w r4, r3, r4, lsl 8 | r4 = r3 | (r4 << 8);
0x00008e88 bne 0x8e7e |
| } while (r2 != r0);
0x00008e8a b 0x8df6 | goto label_1;
| label_7:
0x00008e8c ldrd r0, r4, [sp, 0x38] | __asm ("ldrd r0, r4, [var_38h]");
0x00008e90 movs r2, 0 | r2 = 0;
0x00008e92 ldr.w r1, [pc, 0x5c0] |
0x00008e96 add r3, sp, 0x90 | r3 += var_90h;
0x00008e98 str r2, [r4] | *(r4) = r2;
0x00008e9a add r2, sp, 0x88 | r2 += var_88h;
0x00008e9c add r1, pc | r1 = 0x122f6;
0x00008e9e bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x00008ea2 subs.w sb, r0, 0 | sb = r0 - 0;
| if (sb < r0) {
0x00008ea6 blt 0x8edc | goto label_5;
| }
0x00008ea8 ldr r6, [sp, 0x88] | r6 = var_88h;
| if (r6 == 0) {
0x00008eaa cbz r6, 0x8ed8 | goto label_2;
| }
0x00008eac ldrd r4, r5, [sp, 0x90] | __asm ("ldrd r4, r5, [var_90h]");
0x00008eb0 orrs.w r3, r4, r5 | r3 = r4 | r5;
| if (r3 == r4) {
0x00008eb4 beq 0x8ed8 | goto label_2;
| }
0x00008eb6 ldrb r3, [r6] | r3 = *(r6);
0x00008eb8 cmp r3, 0 |
| if (r3 != 0) {
0x00008eba bne 0x8f32 | goto label_17;
| }
0x00008ebc adds r3, r6, 1 | r3 = r6 + 1;
0x00008ebe b 0x8ed0 |
| while (r1 != r2) {
0x00008ec0 subs r4, 1 | r4--;
0x00008ec2 mov r6, r3 | r6 = r3;
0x00008ec4 mov r4, r2 | r4 = r2;
0x00008ec6 ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x00008eca sbc r5, r5, 0 | __asm ("sbc r5, r5, 0");
| if (r2 != 0) {
0x00008ece cbnz r2, 0x8f2e | goto label_18;
| }
0x00008ed0 subs r2, r4, 1 | r2 = r4 - 1;
0x00008ed2 orrs.w r1, r2, r5 | r1 = r2 | r5;
0x00008ed6 bne 0x8ec0 |
| }
| label_2:
0x00008ed8 mov.w sb, 0 | sb = 0;
| label_5:
0x00008edc ldr.w r2, [pc, 0x578] | r2 = *(0x00009458);
0x00008ee0 ldr.w r3, [pc, 0x560] | r3 = *(0x9444);
0x00008ee4 add r2, pc | r2 += pc;
0x00008ee6 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00008ee8 ldr r2, [r3] | r2 = *(0x9444);
0x00008eea ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x00008eec eors r2, r3 | r2 ^= r3;
0x00008eee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00008ef2 bne.w 0x942e | goto label_19;
| }
0x00008ef6 mov r0, sb | r0 = sb;
0x00008ef8 add sp, 0xa4 |
0x00008efa vpop {d8} | __asm ("vpop {d8}");
0x00008efe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00008f02 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00008f04 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00008f06 add.w r2, r3, fp | r2 = r3 + fp;
| do {
0x00008f0a ldrb r3, [r2, -0x1]! | r3 = *((r2 -= 0x1));
0x00008f0e cmp r2, r0 |
0x00008f10 orr.w r4, r3, r4, lsl 8 | r4 = r3 | (r4 << 8);
0x00008f14 bne 0x8f0a |
| } while (r2 != r0);
0x00008f16 b 0x8df6 | goto label_1;
| label_16:
0x00008f18 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00008f1a ldr r4, [sp, 0xc] | r4 = var_ch;
0x00008f1c add.w r2, r3, fp | r2 = r3 + fp;
| do {
0x00008f20 ldrb r3, [r2, -0x1]! | r3 = *((r2 -= 0x1));
0x00008f24 cmp r2, r0 |
0x00008f26 orr.w r4, r3, r4, lsl 8 | r4 = r3 | (r4 << 8);
0x00008f2a bne 0x8f20 |
| } while (r2 != r0);
0x00008f2c b 0x8df6 | goto label_1;
| label_18:
0x00008f2e strd r4, r5, [sp, 0x90] | __asm ("strd r4, r5, [var_90h]");
| label_17:
0x00008f32 add.w fp, r4, -1 |
0x00008f36 orrs.w r3, fp, r5 | r3 = fp | r5;
| if (r3 == fp) {
0x00008f3a beq 0x8ed8 | goto label_2;
| }
0x00008f3c movs r3, 0 | r3 = 0;
0x00008f3e add.w r8, r6, r4 | r8 = r6 + r4;
0x00008f42 add.w r8, r8, -1 | r8 += -1;
0x00008f46 subs r0, r6, 1 | r0 = r6 - 1;
0x00008f48 mov sl, r3 | sl = r3;
0x00008f4a mov sb, r3 | sb = r3;
0x00008f4c mov r2, r3 | r2 = r3;
0x00008f4e mov r1, r3 | r1 = r3;
| do {
0x00008f50 ldrb r7, [r0, 1]! | r7 = *((r0 += 1));
0x00008f54 adds.w ip, r2, 1 |
0x00008f58 mov lr, r2 | lr = r2;
0x00008f5a mov r2, ip | r2 = ip;
0x00008f5c mov ip, r1 |
0x00008f5e adc r1, r1, 0 | __asm ("adc r1, r1, 0");
| if (r7 == 0) {
0x00008f62 cbnz r7, 0x8f72 |
0x00008f64 cmp ip, sb |
0x00008f66 it eq |
| if (ip == sb) {
0x00008f68 cmpeq lr, sl | __asm ("cmpeq lr, sl");
| }
0x00008f6a mov sl, r2 | sl = r2;
0x00008f6c it ne |
| if (ip == sb) {
0x00008f6e addne r3, 1 | r3++;
| }
0x00008f70 mov sb, r1 | sb = r1;
| }
0x00008f72 cmp r8, r0 |
0x00008f74 bne 0x8f50 |
| } while (r8 != r0);
0x00008f76 ldrb.w r2, [r6, fp] | r2 = *((r6 + fp));
0x00008f7a add.w r1, r6, fp | r1 = r6 + fp;
0x00008f7e str r1, [sp, 0x18] | var_18h = r1;
0x00008f80 cmp r2, 0 |
| if (r2 != 0) {
0x00008f82 bne 0x9056 | goto label_20;
| }
| label_6:
0x00008f84 lsls r7, r3, 4 | r7 = r3 << 4;
0x00008f86 adds r0, r4, 1 | r0 = r4 + 1;
0x00008f88 add r0, r7 | r0 += r7;
0x00008f8a blx 0x21fc | fcn_000021fc ();
0x00008f8e ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00008f90 str r0, [sp, 0x14] | var_14h = r0;
0x00008f92 str r0, [r2] | *(r2) = r0;
0x00008f94 cmp r0, 0 |
| if (r0 == 0) {
0x00008f96 beq.w 0x9432 | goto label_21;
| }
0x00008f9a ldr r3, [sp, 0x14] | r3 = var_14h;
0x00008f9c mov.w sb, 0 | sb = 0;
0x00008fa0 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00008fa4 mov r1, sb | r1 = sb;
0x00008fa6 mov ip, sb |
0x00008fa8 mov sl, sb | sl = sb;
0x00008faa add r3, r7 | r3 += r7;
0x00008fac mov fp, sb |
0x00008fae mov r7, sb | r7 = sb;
0x00008fb0 strd r4, r5, [sp, 8] | __asm ("strd r4, r5, [var_8h]");
0x00008fb4 b 0x8ff0 | goto label_4;
| label_3:
0x00008fb6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00008fb8 movs r4, 0x47 | r4 = 0x47;
0x00008fba subs r2, r2, r1 | r2 -= r1;
0x00008fbc add r1, r6 | r1 += r6;
0x00008fbe str r2, [sp, 0x10] | var_10h = r2;
0x00008fc0 add.w r0, r0, fp, lsl 4 | r0 += (fp << 4);
0x00008fc4 add.w fp, fp, 1 |
0x00008fc8 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00008fca vstr d8, [r0] | __asm ("vstr d8, [r0]");
0x00008fce str r4, [r0, 8] | *((r0 + 8)) = r4;
0x00008fd0 mov r0, r3 | r0 = r3;
0x00008fd2 blx 0x20c0 | mmap64 ()
0x00008fd6 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00008fd8 mov r3, r0 | r3 = r0;
0x00008fda mov r1, sb | r1 = sb;
0x00008fdc mov ip, r8 |
0x00008fde strb r5, [r0, r2] | *((r0 + r2)) = r5;
0x00008fe0 adds r2, 1 | r2++;
0x00008fe2 add r3, r2 | r3 += r2;
| do {
0x00008fe4 ldrd r0, r2, [sp, 8] | __asm ("ldrd r0, r2, [var_8h]");
0x00008fe8 cmp r8, r2 |
0x00008fea it eq |
| if (r8 == r2) {
0x00008fec cmpeq sb, r0 | __asm ("cmpeq sb, r0");
| }
| if (r8 == r2) {
0x00008fee beq 0x9020 | goto label_22;
| }
| label_4:
0x00008ff0 ldrb.w r5, [r6, sl] | r5 = *((r6 + sl));
0x00008ff4 adds.w sb, sl, 1 | sb = sl + 1;
0x00008ff8 adc r8, r7, 0 | __asm ("adc r8, r7, 0");
0x00008ffc mov r2, sl | r2 = sl;
0x00008ffe mov r0, r7 | r0 = r7;
0x00009000 mov sl, sb | sl = sb;
0x00009002 mov r7, r8 | r7 = r8;
0x00009004 cmp r5, 0 |
0x00009006 bne 0x8fe4 |
| } while (r5 != 0);
0x00009008 cmp r0, ip |
0x0000900a it eq |
| if (r0 != ip) {
0x0000900c cmpeq r2, r1 | __asm ("cmpeq r2, r1");
| goto label_23;
| }
| if (r0 != ip) {
| label_23:
0x0000900e bne 0x8fb6 | goto label_3;
| }
0x00009010 ldrd r0, r2, [sp, 8] | __asm ("ldrd r0, r2, [var_8h]");
0x00009014 mov r1, sb | r1 = sb;
0x00009016 mov ip, r8 |
0x00009018 cmp r8, r2 |
0x0000901a it eq |
| if (r8 != r2) {
0x0000901c cmpeq sb, r0 | __asm ("cmpeq sb, r0");
| goto label_24;
| }
| if (r8 != r2) {
| label_24:
0x0000901e bne 0x8ff0 | goto label_4;
| }
| label_22:
0x00009020 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00009022 mov sb, fp | sb = fp;
0x00009024 ldrb r2, [r2] | r2 = *(r2);
0x00009026 cmp r2, 0 |
| if (r2 == 0) {
0x00009028 beq.w 0x8edc | goto label_5;
| }
0x0000902c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000902e subs r4, r0, r1 | r4 = r0 - r1;
0x00009030 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00009034 movs r0, 0x47 | r0 = 0x47;
0x00009036 add r1, r6 | r1 += r6;
0x00009038 add.w sb, fp, 1 | sb += arg_1h;
0x0000903c add.w r2, r2, fp, lsl 4 | r2 += (fp << 4);
0x00009040 str r0, [r2, 8] | *((r2 + 8)) = r0;
0x00009042 mov r0, r3 | r0 = r3;
0x00009044 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x00009046 vstr d16, [r2] | __asm ("vstr d16, [r2]");
0x0000904a mov r2, r4 | r2 = r4;
0x0000904c blx 0x20c0 | mmap64 ()
0x00009050 movs r2, 0 | r2 = 0;
0x00009052 strb r2, [r0, r4] | *((r0 + r4)) = r2;
0x00009054 b 0x8edc | goto label_5;
| label_20:
0x00009056 adds r3, 1 | r3++;
0x00009058 b 0x8f84 | goto label_6;
| label_15:
0x0000905a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0000905c cmp r3, 0 |
| if (r3 == 0) {
0x0000905e beq.w 0x8e8c | goto label_7;
| }
0x00009062 lsls r4, r3, 4 | r4 = r3 << 4;
0x00009064 adds r0, r4, r6 | r0 = r4 + r6;
0x00009066 blx 0x21fc | fcn_000021fc ();
0x0000906a ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0000906c str r0, [sp, 0x48] | var_48h = r0;
0x0000906e str r0, [r2] | *(r2) = r0;
0x00009070 cmp r0, 0 |
| if (r0 == 0) {
0x00009072 beq.w 0x9432 | goto label_21;
| }
0x00009076 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00009078 movs r1, 0 | r1 = 0;
0x0000907a mov sb, sl | sb = sl;
0x0000907c str r1, [sp, 0x34] | var_34h = r1;
0x0000907e add r3, r4 | r3 += r4;
0x00009080 str r3, [sp, 0x50] | var_50h = r3;
0x00009082 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00009084 adds.w r2, r3, 8 | r2 = r3 + 8;
0x00009088 str r2, [sp, 0x1c] | var_1ch = r2;
0x0000908a adc r2, r1, 0 | __asm ("adc r2, r1, 0");
0x0000908e adds.w fp, r3, 4 |
0x00009092 str r2, [sp, 0x30] | var_30h = r2;
0x00009094 adc r3, r1, 0 | __asm ("adc r3, r1, 0");
0x00009098 mov sl, fp | sl = fp;
0x0000909a str r3, [sp, 0x2c] | var_2ch = r3;
0x0000909c mov fp, r7 |
0x0000909e ldr r3, [pc, 0x3bc] |
0x000090a0 ldr r7, [sp, 0x58] | r7 = var_58h;
0x000090a2 add r3, pc | r3 = 0x12504;
0x000090a4 str r3, [sp, 0x5c] | var_5ch = r3;
0x000090a6 ldr r3, [pc, 0x3b8] |
0x000090a8 add r3, pc | r3 = 0x1250e;
0x000090aa str r3, [sp, 0x64] | var_64h = r3;
0x000090ac movs r3, 1 | r3 = 1;
0x000090ae str r3, [sp, 0x40] | var_40h = r3;
0x000090b0 add.w r3, r8, 4 | r3 = r8 + 4;
0x000090b4 str r3, [sp, 0x60] | var_60h = r3;
0x000090b6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000090b8 cmp r3, 0 |
| if (r3 == 0) {
0x000090ba beq.w 0x9282 | goto label_25;
| }
| label_8:
0x000090be ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000090c0 cmp fp, sl |
0x000090c2 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= sl) {
0x000090c6 blo.w 0x9414 | goto label_12;
| }
0x000090ca ldr r3, [sp, 0x14] | r3 = var_14h;
0x000090cc add.w r2, r7, r8 | r2 = r7 + r8;
0x000090d0 cmp r3, 0 |
| if (r3 == 0) {
0x000090d2 beq.w 0x9380 | goto label_26;
| }
0x000090d6 ldr r6, [sp, 0xc] | r6 = var_ch;
0x000090d8 add.w r3, r8, -1 | r3 = r8 + -1;
0x000090dc add.w r1, r8, 3 | r1 = r8 + 3;
0x000090e0 add r3, r7 | r3 += r7;
0x000090e2 add r1, r7 | r1 += r7;
| do {
0x000090e4 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x000090e8 cmp r1, r3 |
0x000090ea orr.w r6, r0, r6, lsl 8 | r6 = r0 | (r6 << 8);
0x000090ee bne 0x90e4 |
| } while (r1 != r3);
0x000090f0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000090f2 cmp fp, r3 |
0x000090f4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000090f6 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r3) {
0x000090fa blo.w 0x9414 | goto label_12;
| }
0x000090fe ldr r1, [sp, 0x60] | r1 = var_60h;
0x00009100 add.w r3, r8, sl | r3 = r8 + sl;
0x00009104 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00009106 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x00009108 add.w r0, r1, sl | r0 = r1 + sl;
| do {
0x0000910c ldrb r1, [r3], 1 | r1 = *(r3);
| r3++;
0x00009110 lsls r4, r4, 8 | r4 <<= 8;
0x00009112 orr.w r4, r4, r5, lsr 24 | r4 |= (r5 >> 24);
0x00009116 cmp r0, r3 |
0x00009118 orr.w r5, r1, r5, lsl 8 | r5 = r1 | (r5 << 8);
0x0000911c bne 0x910c |
| } while (r0 != r3);
0x0000911e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009120 adds.w r1, r7, 0xd | r1 = r7 + 0xd;
0x00009124 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00009128 cmp fp, r1 |
0x0000912a sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x0000912e blo.w 0x9414 | goto label_12;
| }
0x00009132 add.w r3, r8, 0xc | r3 = r8 + 0xc;
0x00009136 adds.w r1, r7, 0x10 | r1 = r7 + 0x10;
0x0000913a ldrb r3, [r3, r7] | r3 = *((r3 + r7));
0x0000913c str r3, [sp, 0x3c] | var_3ch = r3;
0x0000913e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009140 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00009144 cmp fp, r1 |
0x00009146 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x0000914a blo.w 0x9414 | goto label_12;
| }
0x0000914e ldrh r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x00009150 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00009152 uxth r3, r3 | r3 = (int16_t) r3;
| label_9:
0x00009154 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00009156 adds r6, r6, r2 | r6 += r2;
0x00009158 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0000915a adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0000915e cmp r6, fp |
0x00009160 sbcs.w r2, r2, sb | __asm ("sbcs.w r2, r2, sb");
| if (r6 >= fp) {
0x00009164 bhs.w 0x942a | goto label_27;
| }
0x00009168 add r6, r8 | r6 += r8;
0x0000916a ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0000916c movs r2, 6 | r2 = 6;
0x0000916e mov r0, r6 | r0 = r6;
0x00009170 str r3, [sp, 0x44] | var_44h = r3;
0x00009172 blx 0x243c | r0 = fcn_0000243c ();
0x00009176 cmp r0, 0 |
| if (r0 != 0) {
0x00009178 bne 0x9242 | goto label_28;
| }
0x0000917a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000917c movw r2, 0xfff1 | r2 = 0xfff1;
0x00009180 ldr r1, [sp, 0x48] | r1 = var_48h;
0x00009182 adds r6, 6 | r6 += 6;
0x00009184 lsrs r3, r3, 4 | r3 >>= 4;
0x00009186 str r3, [sp, 0x54] | var_54h = r3;
0x00009188 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0000918a lsls r3, r3, 4 | r3 <<= 4;
0x0000918c str r3, [sp, 0x58] | var_58h = r3;
0x0000918e adds r3, r1, r3 | r3 = r1 + r3;
0x00009190 str r3, [sp, 0x3c] | var_3ch = r3;
0x00009192 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00009194 cmp r3, 0 |
0x00009196 it ne |
| if (r3 != 0) {
0x00009198 cmpne r3, r2 | __asm ("cmpne r3, r2");
| }
| if (r3 == 0) {
0x0000919a beq 0x9202 | goto label_10;
| }
0x0000919c mov r1, r3 | r1 = r3;
0x0000919e add r3, sp, 0x74 | r3 += var_74h;
0x000091a0 str r3, [sp] | *(sp) = r3;
0x000091a2 add r2, sp, 0x88 | r2 += var_88h;
0x000091a4 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000091a6 add r3, sp, 0x90 | r3 += var_90h;
0x000091a8 bl 0x7f38 | r0 = fcn_00007f38 (r0, r1, r2, r3);
0x000091ac cmp r0, 0 |
| if (r0 < 0) {
0x000091ae blt.w 0x93ec | goto label_29;
| }
0x000091b2 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000091b4 ldr r2, [sp, 0x94] | r2 = var_94h;
0x000091b6 subs r3, 4 | r3 -= 4;
0x000091b8 adc r2, r2, -1 | __asm ("adc r2, r2, -1");
0x000091bc cmp r3, r5 |
0x000091be sbcs r2, r4 | __asm ("sbcs r2, r4");
| if (r3 <= r5) {
0x000091c0 blo.w 0x93ec | goto label_29;
| }
0x000091c4 ldr r3, [sp, 0x88] | r3 = var_88h;
0x000091c6 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000091c8 adds r3, r5, r3 | r3 = r5 + r3;
0x000091ca adc.w r2, r4, r2 | __asm ("adc.w r2, r4, r2");
0x000091ce adds r1, r3, 4 | r1 = r3 + 4;
0x000091d0 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000091d4 cmp fp, r1 |
0x000091d6 sbcs.w r2, sb, r2 | __asm ("sbcs.w r2, sb, r2");
| if (fp <= r1) {
0x000091da blo.w 0x9414 | goto label_12;
| }
0x000091de ldr r2, [sp, 0x14] | r2 = var_14h;
0x000091e0 add r3, r8 | r3 += r8;
0x000091e2 cmp r2, 0 |
| if (r2 == 0) {
0x000091e4 beq.w 0x93f4 | goto label_30;
| }
0x000091e8 ldr r5, [sp, 0xc] | r5 = var_ch;
0x000091ea subs r2, r3, 1 | r2 = r3 - 1;
0x000091ec ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x000091ee adds r3, 3 | r3 += 3;
| do {
0x000091f0 ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x000091f4 lsls r4, r4, 8 | r4 <<= 8;
0x000091f6 orr.w r4, r4, r5, lsr 24 | r4 |= (r5 >> 24);
0x000091fa cmp r3, r2 |
0x000091fc orr.w r5, r1, r5, lsl 8 | r5 = r1 | (r5 << 8);
0x00009200 bne 0x91f0 |
| } while (r3 != r2);
| label_10:
0x00009202 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00009204 mov r0, r6 | r0 = r6;
0x00009206 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00009208 str r5, [r3, r2] | *((r3 + r2)) = r5;
0x0000920a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0000920c ldr r5, [sp, 0x50] | r5 = var_50h;
0x0000920e str r4, [r3, 4] | *((r3 + 4)) = r4;
0x00009210 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00009212 cmp r3, 2 |
0x00009214 itet ls |
| if (r3 > 2) {
0x00009216 ldrls r2, [sp, 0x64] | r2 = var_64h;
| }
| if (r3 <= 2) {
0x00009218 movhi r3, 0 | r3 = 0;
| }
| if (r3 > 2) {
0x0000921a ldrbls r3, [r2, r3] | r3 = *((r2 + r3));
| }
0x0000921c ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0000921e str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00009220 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00009222 str r5, [r2, 0xc] | *((r2 + 0xc)) = r5;
0x00009224 adds r3, 1 | r3++;
0x00009226 str r3, [sp, 0x34] | var_34h = r3;
0x00009228 blx 0x22a8 | r0 = fcn_000022a8 ();
0x0000922c mov r4, r0 | r4 = r0;
0x0000922e mov r1, r6 | r1 = r6;
0x00009230 mov r2, r4 | r2 = r4;
0x00009232 mov r0, r5 | r0 = r5;
0x00009234 blx 0x20c0 | mmap64 ()
0x00009238 movs r3, 0 | r3 = 0;
0x0000923a strb r3, [r5, r4] | *((r5 + r4)) = r3;
0x0000923c adds r4, 1 | r4++;
0x0000923e adds r3, r5, r4 | r3 = r5 + r4;
0x00009240 str r3, [sp, 0x50] | var_50h = r3;
| label_28:
0x00009242 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00009244 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00009246 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00009248 adds r7, r3, r7 | r7 = r3 + r7;
0x0000924a adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0000924e str r2, [sp, 0x28] | var_28h = r2;
0x00009250 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00009252 adds r2, r2, r3 | r2 += r3;
0x00009254 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00009258 adds.w r3, sl, r3 | r3 = sl + r3;
0x0000925c mov sl, r3 | sl = r3;
0x0000925e str r1, [sp, 0x30] | var_30h = r1;
0x00009260 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00009262 ldr r1, [sp, 8] | r1 = var_8h;
0x00009264 str r2, [sp, 0x1c] | var_1ch = r2;
0x00009266 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00009268 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0000926c str r3, [sp, 0x2c] | var_2ch = r3;
0x0000926e cmp r2, r1 |
0x00009270 add.w r3, r2, 1 | r3 = r2 + 1;
| if (r2 == r1) {
0x00009274 beq.w 0x940e | goto label_31;
| }
0x00009278 str r3, [sp, 0x40] | var_40h = r3;
0x0000927a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0000927c cmp r3, 0 |
| if (r3 != 0) {
0x0000927e bne.w 0x90be | goto label_8;
| }
| label_25:
0x00009282 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00009284 cmp fp, sl |
0x00009286 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= sl) {
0x0000928a blo.w 0x9414 | goto label_12;
| }
0x0000928e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00009290 add.w r2, r8, r7 | r2 = r8 + r7;
0x00009294 cmp r3, 0 |
| if (r3 == 0) {
0x00009296 beq 0x9314 | goto label_32;
| }
0x00009298 ldr r6, [sp, 0xc] | r6 = var_ch;
0x0000929a add.w r3, r8, -1 | r3 = r8 + -1;
0x0000929e add.w r1, r8, 3 | r1 = r8 + 3;
0x000092a2 add r3, r7 | r3 += r7;
0x000092a4 add r1, r7 | r1 += r7;
| do {
0x000092a6 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x000092aa cmp r3, r1 |
0x000092ac orr.w r6, r0, r6, lsl 8 | r6 = r0 | (r6 << 8);
0x000092b0 bne 0x92a6 |
| } while (r3 != r1);
0x000092b2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000092b4 adds.w r1, r7, 0x10 | r1 = r7 + 0x10;
0x000092b8 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000092bc cmp fp, r1 |
0x000092be sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x000092c2 blo.w 0x9414 | goto label_12;
| }
0x000092c6 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000092c8 add.w r3, r8, 0x10 | r3 = r8 + 0x10;
0x000092cc ldr r5, [sp, 0xc] | r5 = var_ch;
0x000092ce add r3, r7 | r3 += r7;
0x000092d0 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x000092d2 add r1, r8 | r1 += r8;
| do {
0x000092d4 ldrb r0, [r1], 1 | r0 = *(r1);
| r1++;
0x000092d8 lsls r4, r4, 8 | r4 <<= 8;
0x000092da orr.w r4, r4, r5, lsr 24 | r4 |= (r5 >> 24);
0x000092de cmp r1, r3 |
0x000092e0 orr.w r5, r0, r5, lsl 8 | r5 = r0 | (r5 << 8);
0x000092e4 bne 0x92d4 |
| } while (r1 != r3);
0x000092e6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000092e8 adds r1, r7, 5 | r1 = r7 + 5;
0x000092ea adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000092ee cmp fp, r1 |
0x000092f0 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x000092f4 blo.w 0x9414 | goto label_12;
| }
0x000092f8 ldrb.w r3, [r8, sl] | r3 = *((r8 + sl));
0x000092fc str r3, [sp, 0x3c] | var_3ch = r3;
0x000092fe ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00009300 cmp fp, r3 |
0x00009302 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00009304 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r3) {
0x00009308 blo.w 0x9414 | goto label_12;
| }
0x0000930c ldrh r3, [r2, 6] | r3 = *((r2 + 6));
0x0000930e rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00009310 uxth r3, r3 | r3 = (int16_t) r3;
0x00009312 b 0x9154 | goto label_9;
| label_32:
0x00009314 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00009316 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00009318 add r3, r7 | r3 += r7;
| do {
0x0000931a ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x0000931e cmp r3, r2 |
0x00009320 orr.w r6, r1, r6, lsl 8 | r6 = r1 | (r6 << 8);
0x00009324 bne 0x931a |
| } while (r3 != r2);
0x00009326 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009328 adds.w r1, r7, 0x10 | r1 = r7 + 0x10;
0x0000932c adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00009330 cmp fp, r1 |
0x00009332 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x00009336 blo 0x9414 | goto label_12;
| }
0x00009338 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0000933a add.w r3, r8, 0x10 | r3 = r8 + 0x10;
0x0000933e ldr r5, [sp, 0xc] | r5 = var_ch;
0x00009340 add r3, r7 | r3 += r7;
0x00009342 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x00009344 add.w r0, r8, r1 | r0 = r8 + r1;
| do {
0x00009348 ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x0000934c lsls r4, r4, 8 | r4 <<= 8;
0x0000934e orr.w r4, r4, r5, lsr 24 | r4 |= (r5 >> 24);
0x00009352 cmp r0, r3 |
0x00009354 orr.w r5, r1, r5, lsl 8 | r5 = r1 | (r5 << 8);
0x00009358 bne 0x9348 |
| } while (r0 != r3);
0x0000935a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0000935c adds r1, r7, 5 | r1 = r7 + 5;
0x0000935e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00009362 cmp fp, r1 |
0x00009364 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x00009368 blo 0x9414 | goto label_12;
| }
0x0000936a ldrb.w r3, [r8, sl] | r3 = *((r8 + sl));
0x0000936e str r3, [sp, 0x3c] | var_3ch = r3;
0x00009370 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00009372 cmp fp, r3 |
0x00009374 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00009376 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r3) {
0x0000937a blo 0x9414 | goto label_12;
| }
0x0000937c ldrh r3, [r2, 6] | r3 = *((r2 + 6));
0x0000937e b 0x9154 | goto label_9;
| label_26:
0x00009380 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00009382 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00009384 add r3, r7 | r3 += r7;
| do {
0x00009386 ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x0000938a cmp r3, r2 |
0x0000938c orr.w r6, r1, r6, lsl 8 | r6 = r1 | (r6 << 8);
0x00009390 bne 0x9386 |
| } while (r3 != r2);
0x00009392 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00009394 cmp fp, r3 |
0x00009396 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00009398 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r3) {
0x0000939c blo 0x9414 | goto label_12;
| }
0x0000939e ldr r3, [sp, 0x60] | r3 = var_60h;
0x000093a0 add.w r0, r8, sl | r0 = r8 + sl;
0x000093a4 ldr r5, [sp, 0xc] | r5 = var_ch;
0x000093a6 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x000093a8 add r3, sl | r3 += sl;
| do {
0x000093aa ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x000093ae lsls r4, r4, 8 | r4 <<= 8;
0x000093b0 orr.w r4, r4, r5, lsr 24 | r4 |= (r5 >> 24);
0x000093b4 cmp r0, r3 |
0x000093b6 orr.w r5, r1, r5, lsl 8 | r5 = r1 | (r5 << 8);
0x000093ba bne 0x93aa |
| } while (r0 != r3);
0x000093bc ldr r3, [sp, 0x28] | r3 = var_28h;
0x000093be adds.w r1, r7, 0xd | r1 = r7 + 0xd;
0x000093c2 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000093c6 cmp fp, r1 |
0x000093c8 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x000093cc blo 0x9414 | goto label_12;
| }
0x000093ce add.w r3, r8, 0xc | r3 = r8 + 0xc;
0x000093d2 adds.w r1, r7, 0x10 | r1 = r7 + 0x10;
0x000093d6 ldrb r3, [r3, r7] | r3 = *((r3 + r7));
0x000093d8 str r3, [sp, 0x3c] | var_3ch = r3;
0x000093da ldr r3, [sp, 0x28] | r3 = var_28h;
0x000093dc adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000093e0 cmp fp, r1 |
0x000093e2 sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp <= r1) {
0x000093e6 blo 0x9414 | goto label_12;
| }
0x000093e8 ldrh r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x000093ea b 0x9154 | goto label_9;
| label_29:
0x000093ec mov.w r5, -1 | r5 = -1;
0x000093f0 mov r4, r5 | r4 = r5;
0x000093f2 b 0x9202 | goto label_10;
| label_30:
0x000093f4 ldr r5, [sp, 0xc] | r5 = var_ch;
0x000093f6 adds r2, r3, 4 | r2 = r3 + 4;
0x000093f8 ldr r4, [sp, 0x4c] | r4 = var_4ch;
| do {
0x000093fa ldrb r1, [r2, -0x1]! | r1 = *((r2 -= 0x1));
0x000093fe lsls r4, r4, 8 | r4 <<= 8;
0x00009400 orr.w r4, r4, r5, lsr 24 | r4 |= (r5 >> 24);
0x00009404 cmp r3, r2 |
0x00009406 orr.w r5, r1, r5, lsl 8 | r5 = r1 | (r5 << 8);
0x0000940a bne 0x93fa |
| } while (r3 != r2);
0x0000940c b 0x9202 | goto label_10;
| label_31:
0x0000940e ldr.w sb, [sp, 0x34] | sb = var_34h;
0x00009412 b 0x8edc | goto label_5;
| label_12:
0x00009414 bl 0x7ef8 | fcn_00007ef8 ();
| label_14:
0x00009418 ldr r3, [pc, 0x48] |
0x0000941a movs r2, 0xca | r2 = 0xca;
0x0000941c ldr r1, [pc, 0x48] |
0x0000941e ldr r0, [pc, 0x4c] |
0x00009420 add r3, pc | r3 = 0x12888;
0x00009422 add r1, pc | r1 = 0x1288e;
0x00009424 add r0, pc | r0 = 0x12896;
0x00009426 blx 0x246c | fcn_0000246c ();
| label_27:
0x0000942a bl 0x7ed8 | fcn_00007ed8 ();
| label_19:
0x0000942e blx 0x2108 | fcn_00002108 ();
| label_21:
0x00009432 blx 0x22f4 | r0 = gzerror ();
0x00009436 ldr r3, [r0] | r3 = *(r0);
0x00009438 rsb.w sb, r3, 0 | sb = r3 - ;
0x0000943c b 0x8edc | 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/libkmod.so.2.3.7 @ 0x9470 */
| #include <stdint.h>
|
; (fcn) fcn.00009470 () | void fcn_00009470 (int16_t arg_0h, int16_t arg_3h, int16_t arg_4h, int16_t arg_ch, int16_t arg_1h, 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_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int32_t var_c8h_2;
| int16_t var_d4h;
| r0 = arg1;
| r1 = arg2;
0x00009470 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00009474 sub sp, 0xdc |
0x00009476 ldr.w r4, [pc, 0x8dc] | r4 = *(0x00009d54);
0x0000947a add r3, sp, 0xb8 | r3 += var_b8h;
0x0000947c add r2, sp, 0xac | r2 += var_ach;
0x0000947e str r1, [sp, 0x9c] | var_9ch = r1;
0x00009480 ldr.w r1, [pc, 0x8d4] |
0x00009484 add r4, pc | r4 += pc;
0x00009486 str r0, [sp, 0x2c] | var_2ch = r0;
0x00009488 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x0000948a ldr r1, [r1] | r1 = *(0x9d58);
0x0000948c str r1, [sp, 0xd4] | var_d4h = r1;
0x0000948e mov.w r1, 0 | r1 = 0;
0x00009492 ldr.w r1, [pc, 0x8c8] |
0x00009496 add r1, pc | r1 = 0x131f8;
0x00009498 bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x0000949c cmp r0, 0 |
| if (r0 < 0) {
0x0000949e blt.w 0x9c94 | goto label_20;
| }
0x000094a2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000094a4 movs r1, 0 | r1 = 0;
0x000094a6 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000094a8 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x000094aa tst.w r2, 2 |
0x000094ae ite ne |
| if ((r2 & 2) == 0) {
0x000094b0 movne r2, 4 | r2 = 4;
| }
| if ((r2 & 2) != 0) {
0x000094b2 moveq r2, 8 | r2 = 8;
| }
0x000094b4 lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x000094b6 str r2, [sp, 0x20] | var_20h = r2;
0x000094b8 itt eq |
| if (r3 != r3) {
0x000094ba moveq r3, 0x40 | r3 = 0x40;
| }
| if (r3 != r3) {
0x000094bc streq r3, [sp, 0x3c] | var_3ch = r3;
| }
| if (r3 != r3) {
0x000094be bne.w 0x975c | goto label_21;
| }
| label_1:
0x000094c2 ldr.w r1, [pc, 0x89c] |
0x000094c6 add r3, sp, 0xc0 | r3 += var_c0h;
0x000094c8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000094ca add r2, sp, 0xb0 | r2 += var_b0h;
0x000094cc add r1, pc | r1 = 0x13232;
0x000094ce bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x000094d2 cmp r0, 0 |
| if (r0 < 0) {
0x000094d4 blt.w 0x9d08 | goto label_22;
| }
0x000094d8 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x000094da add r3, sp, 0xc8 | r3 += var_c8h;
0x000094dc ldr.w r1, [pc, 0x884] |
0x000094e0 add r2, sp, 0xb4 | r2 += var_b4h;
0x000094e2 mov r0, r4 | r0 = r4;
0x000094e4 add r1, pc | r1 = 0x1324c;
0x000094e6 bl 0x84c4 | r0 = fcn_000084c4 (r0, r1, r2, r3);
0x000094ea cmp r0, 0 |
| if (r0 < 0) {
0x000094ec blt.w 0x9d08 | goto label_22;
| }
0x000094f0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000094f2 ldrd r0, r1, [sp, 0xc8] | __asm ("ldrd r0, r1, [var_c8h]");
0x000094f6 str r3, [sp, 0x8c] | var_8ch = r3;
0x000094f8 ands r3, r3, 2 | r3 &= 2;
0x000094fc str r3, [sp, 0x10] | var_10h = r3;
0x000094fe ite eq |
| if (r3 != r3) {
0x00009500 moveq r3, 0x18 | r3 = 0x18;
| }
| if (r3 == r3) {
0x00009502 movne r3, 0x10 | r3 = 0x10;
| }
0x00009504 str r3, [sp, 0x14] | var_14h = r3;
0x00009506 mov r4, r3 | r4 = r3;
0x00009508 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0000950a movs r3, 0 | r3 = 0;
0x0000950c bl 0xac00 | fcn_0000ac00 (r0, r1, r2, r3);
0x00009510 str r3, [sp, 0x44] | var_44h = r3;
0x00009512 orrs r3, r2 | r3 |= r2;
0x00009514 str r0, [sp, 0x90] | var_90h = r0;
0x00009516 str r2, [sp, 8] | var_8h = r2;
| if (r3 != r2) {
0x00009518 bne.w 0x9d08 | goto label_22;
| }
0x0000951c ldr r0, [sp, 0xb8] | r0 = var_b8h;
0x0000951e ldr r1, [sp, 0xbc] | r1 = var_bch;
0x00009520 str r0, [sp, 0x5c] | var_5ch = r0;
0x00009522 orrs.w r3, r0, r1 | r3 = r0 | r1;
0x00009526 str r1, [sp, 0x60] | var_60h = r1;
| if (r3 == r0) {
0x00009528 beq.w 0x9754 | goto label_23;
| }
0x0000952c ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0000952e movs r3, 0 | r3 = 0;
0x00009530 bl 0xac00 | fcn_0000ac00 (r0, r1, r2, r3);
0x00009534 movs r1, 1 | r1 = 1;
0x00009536 str r0, [sp, 0x98] | var_98h = r0;
0x00009538 blx 0x1fd0 | calloc (r0, r1);
0x0000953c str r0, [sp, 0x64] | var_64h = r0;
0x0000953e cmp r0, 0 |
| if (r0 == 0) {
0x00009540 beq.w 0x9d4a | goto label_24;
| }
| label_0:
0x00009544 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00009546 movs r1, 8 | r1 = 8;
0x00009548 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x0000954a ldr r6, [sp, 0x90] | r6 = var_90h;
0x0000954c ldr.w fp, [r2] | fp = *(r2);
0x00009550 mov r0, r6 | r0 = r6;
0x00009552 sub.w r3, r3, fp | r3 -= fp;
0x00009556 adds r4, r3, r4 | r4 = r3 + r4;
0x00009558 ldrh.w r3, [r2, 0x48] | r3 = *((r2 + 0x48));
0x0000955c str r4, [sp, 0x94] | var_94h = r4;
0x0000955e cmp r3, 0x2b |
0x00009560 it ne |
| if (r3 != 0x2b) {
0x00009562 cmpne r3, 2 | __asm ("cmpne r3, 2");
| }
0x00009564 ite eq |
| if (r3 != 0x2b) {
0x00009566 moveq r3, 1 | r3 = 1;
| }
| if (r3 == 0x2b) {
0x00009568 movne r3, 0 | r3 = 0;
| }
0x0000956a str r3, [sp, 0x30] | var_30h = r3;
0x0000956c ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0000956e sub.w r3, r3, fp | r3 -= fp;
0x00009572 mov r5, r3 | r5 = r3;
0x00009574 str r3, [sp, 0x34] | var_34h = r3;
0x00009576 blx 0x1fd0 | calloc (r0, r1);
0x0000957a asrs r2, r5, 0x1f | r2 = r5 >> 0x1f;
0x0000957c str r6, [sp, 0x18] | var_18h = r6;
0x0000957e str r4, [sp, 0xa0] | var_a0h = r4;
0x00009580 str r2, [sp, 0x38] | var_38h = r2;
0x00009582 movs r2, 0 | r2 = 0;
0x00009584 str r2, [sp, 0xa4] | var_a4h = r2;
0x00009586 str r0, [sp, 0x88] | var_88h = r0;
0x00009588 cmp r0, 0 |
| if (r0 == 0) {
0x0000958a beq.w 0x9d26 | goto label_25;
| }
0x0000958e cmp r6, 1 |
| if (r6 <= 1) {
0x00009590 ble.w 0x9cb8 | goto label_26;
| }
0x00009594 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00009596 movs r2, 0 | r2 = 0;
0x00009598 ldr r5, [sp, 0x94] | r5 = var_94h;
0x0000959a str r2, [sp, 0x4c] | var_4ch = r2;
0x0000959c cmp r3, 0 |
0x0000959e ldr r3, [sp, 0xac] | r3 = var_ach;
0x000095a0 ite ne |
| if (r3 == 0) {
0x000095a2 movne sb, 4 | sb = 4;
| }
| if (r3 == 0) {
0x000095a6 mov.w sb, 8 | sb = 8;
| }
0x000095aa sub.w r3, r3, fp | r3 -= fp;
0x000095ae str r3, [sp, 0x84] | var_84h = r3;
0x000095b0 adds.w r3, sb, r3 | r3 = sb + r3;
0x000095b4 str r3, [sp, 0x40] | var_40h = r3;
0x000095b6 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x000095b8 str r3, [sp, 0x54] | var_54h = r3;
0x000095ba ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x000095bc str r3, [sp, 0x58] | var_58h = r3;
0x000095be ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000095c0 ldrd r8, r7, [r3, 8] | __asm ("ldrd r8, r7, [r3, 8]");
0x000095c4 adc.w r3, r2, r2 | __asm ("adc.w r3, r2, r2");
0x000095c8 str r3, [sp, 0x68] | var_68h = r3;
0x000095ca adds.w sl, r5, 4 | sl = r5 + 4;
0x000095ce ldr r3, [sp, 0x88] | r3 = var_88h;
0x000095d0 add.w r3, r3, 8 | r3 += 8;
0x000095d4 str r3, [sp, 4] | var_4h = r3;
0x000095d6 adc r3, r2, 0 | __asm ("adc r3, r2, 0");
0x000095da str r3, [sp] | *(sp) = r3;
0x000095dc mov r3, r2 | r3 = r2;
0x000095de movs r2, 1 | r2 = 1;
0x000095e0 str r3, [sp, 0x50] | var_50h = r3;
0x000095e2 str r2, [sp, 0xc] | var_ch = r2;
0x000095e4 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000095e6 and r2, r2, 0x10 | r2 &= 0x10;
0x000095ea str r2, [sp, 0x1c] | var_1ch = r2;
0x000095ec add.w r2, fp, 4 | r2 += arg_4h;
0x000095f0 str r2, [sp, 0x6c] | var_6ch = r2;
0x000095f2 add.w r2, fp, -1 | r2 = fp + -1;
0x000095f6 str r2, [sp, 0x70] | var_70h = r2;
0x000095f8 add.w r2, fp, 3 | r2 += arg_3h;
0x000095fc str r2, [sp, 0x74] | var_74h = r2;
0x000095fe add.w r2, fp, 0xc | r2 += arg_ch;
0x00009602 str r2, [sp, 0x78] | var_78h = r2;
0x00009604 mov r2, sl | r2 = sl;
0x00009606 mov sl, sb | sl = sb;
0x00009608 mov sb, r2 | sb = r2;
| label_2:
0x0000960a ldr r2, [sp, 0x10] | r2 = var_10h;
0x0000960c cmp r2, 0 |
| if (r2 == 0) {
0x0000960e beq.w 0x9afc | goto label_27;
| }
0x00009612 ldr r2, [sp] | r2 = *(sp);
0x00009614 cmp r8, sb |
0x00009616 sbcs.w r2, r7, r2 | __asm ("sbcs.w r2, r7, r2");
| if (r8 <= sb) {
0x0000961a blo.w 0x9d0e | goto label_28;
| }
0x0000961e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00009620 add.w r1, r5, fp | r1 = r5 + fp;
0x00009624 cmp r2, 0 |
| if (r2 == 0) {
0x00009626 beq.w 0x9b54 | goto label_29;
| }
0x0000962a ldr r2, [sp, 0x70] | r2 = var_70h;
0x0000962c ldr r0, [sp, 0x74] | r0 = var_74h;
0x0000962e ldr r4, [sp, 8] | r4 = var_8h;
0x00009630 add r2, r5 | r2 += r5;
0x00009632 adds r6, r0, r5 | r6 = r0 + r5;
| do {
0x00009634 ldrb r0, [r2, 1]! | r0 = *((r2 += 1));
0x00009638 cmp r6, r2 |
0x0000963a orr.w r4, r0, r4, lsl 8 | r4 = r0 | (r4 << 8);
0x0000963e bne 0x9634 |
| } while (r6 != r2);
0x00009640 adds.w r0, r5, 0x10 | r0 = r5 + 0x10;
0x00009644 adc r2, r3, 0 | __asm ("adc r2, r3, 0");
0x00009648 cmp r8, r0 |
0x0000964a sbcs.w r2, r7, r2 | __asm ("sbcs.w r2, r7, r2");
| if (r8 <= r0) {
0x0000964e blo.w 0x9d0e | goto label_28;
| }
0x00009652 ldrh r2, [r1, 0xe] | r2 = *((r1 + 0xe));
0x00009654 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00009656 uxth r2, r2 | r2 = (int16_t) r2;
| label_8:
0x00009658 adds.w r0, r5, 0xd | r0 = r5 + 0xd;
0x0000965c adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x00009660 cmp r8, r0 |
0x00009662 sbcs.w r1, r7, r1 | __asm ("sbcs.w r1, r7, r1");
| if (r8 <= r0) {
0x00009666 blo.w 0x9d0e | goto label_28;
| }
0x0000966a ldr r1, [sp, 0x78] | r1 = var_78h;
0x0000966c ldrb r1, [r1, r5] | r1 = *((r1 + r5));
| label_7:
0x0000966e cmp r2, 0 |
| if (r2 != 0) {
0x00009670 bne.w 0x97c8 | goto label_18;
| }
0x00009674 ldr r2, [sp, 0x30] | r2 = var_30h;
| if (r2 != 0) {
0x00009676 cbz r2, 0x9682 |
0x00009678 and r1, r1, 0xf | r1 &= 0xf;
0x0000967c cmp r1, 0xd |
| if (r1 == 0xd) {
0x0000967e beq.w 0x97c8 | goto label_18;
| }
| }
0x00009682 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00009684 movs r1, 0 | r1 = 0;
0x00009686 cmp r4, r2 |
0x00009688 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0000968a sbcs.w r2, r1, r2 | __asm ("sbcs.w r2, r1, r2");
| if (r4 >= r2) {
0x0000968e bhs.w 0x9ca6 | goto label_30;
| }
0x00009692 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00009694 adds r4, r4, r2 | r4 += r2;
0x00009696 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00009698 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0000969c cmp r4, r8 |
0x0000969e sbcs r2, r7 | __asm ("sbcs r2, r7");
| if (r4 >= r8) {
0x000096a0 bhs 0x973c | goto label_3;
| }
0x000096a2 ldrb.w r2, [fp, r4] | r2 = *((fp + r4));
0x000096a6 add r4, fp | r4 += fp;
0x000096a8 cmp r2, 0 |
| if (r2 == 0) {
0x000096aa beq.w 0x97c8 | goto label_18;
| }
0x000096ae str r3, [sp, 0x24] | var_24h = r3;
0x000096b0 mov r0, r4 | r0 = r4;
0x000096b2 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000096b4 adds r3, 1 | r3++;
0x000096b6 str r3, [sp, 0x4c] | var_4ch = r3;
0x000096b8 blx 0x22a8 | fcn_000022a8 ();
0x000096bc ldr r2, [sp, 0x50] | r2 = var_50h;
0x000096be adds r2, 1 | r2++;
0x000096c0 adds r3, r0, r2 | r3 = r0 + r2;
0x000096c2 str r3, [sp, 0x50] | var_50h = r3;
0x000096c4 ldrd r3, r2, [sp, 0x5c] | __asm ("ldrd r3, r2, [var_5ch]");
0x000096c8 orrs r2, r3 | r2 |= r3;
0x000096ca ldr r3, [sp, 0x24] | r3 = var_24h;
0x000096cc it eq |
| if (r2 == r3) {
0x000096ce ldrdeq r0, r1, [sp, 0x5c] | __asm ("ldrdeq r0, r1, [var_5ch]");
| }
| if (r2 == r3) {
0x000096d2 beq 0x97c2 | goto label_31;
| }
0x000096d4 ldr r2, [sp, 0x40] | r2 = var_40h;
0x000096d6 cmp r2, r8 |
0x000096d8 ldr r2, [sp, 0x68] | r2 = var_68h;
0x000096da sbcs r2, r7 | __asm ("sbcs r2, r7");
| if (r2 >= r8) {
0x000096dc bhs 0x973c | goto label_3;
| }
0x000096de ldr r1, [sp, 0x44] | r1 = var_44h;
0x000096e0 movs r2, 0 | r2 = 0;
0x000096e2 str r2, [sp, 0x28] | var_28h = r2;
0x000096e4 ldr r2, [sp, 8] | r2 = var_8h;
0x000096e6 str r1, [sp, 0x24] | var_24h = r1;
0x000096e8 ldr r6, [sp, 0x84] | r6 = var_84h;
0x000096ea ldr r1, [sp, 0x40] | r1 = var_40h;
0x000096ec strd r5, r3, [sp, 0x7c] | __asm ("strd r5, r3, [var_80h]");
0x000096f0 mov r5, r2 | r5 = r2;
0x000096f2 add r1, fp | r1 += fp;
0x000096f4 str r1, [sp, 0x48] | var_48h = r1;
| do {
0x000096f6 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000096f8 mov r0, r4 | r0 = r4;
0x000096fa adds r1, r3, r5 | r1 = r3 + r5;
0x000096fc blx 0x201c | r0 = fcn_0000201c ();
0x00009700 cmp r0, 0 |
| if (r0 == 0) {
0x00009702 beq 0x976c | goto label_32;
| }
0x00009704 adds.w r2, r5, 0x40 | r2 = r5 + 0x40;
0x00009708 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0000970a mov r5, r2 | r5 = r2;
0x0000970c ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0000970e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00009712 cmp r5, r2 |
0x00009714 ldr r2, [sp, 0x60] | r2 = var_60h;
0x00009716 str r3, [sp, 0x24] | var_24h = r3;
0x00009718 sbcs.w r1, r3, r2 | __asm ("sbcs.w r1, r3, r2");
| if (r5 >= r2) {
0x0000971c bhs.w 0x9cf8 | goto label_33;
| }
0x00009720 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009722 adds r6, 0x40 | r6 += 0x40;
0x00009724 ldr r2, [sp, 0x68] | r2 = var_68h;
0x00009726 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0000972a str r3, [sp, 0x28] | var_28h = r3;
0x0000972c ldr r3, [sp, 0x40] | r3 = var_40h;
0x0000972e adds r0, r5, r3 | r0 = r5 + r3;
0x00009730 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00009732 adc.w r1, r3, r2 | __asm ("adc.w r1, r3, r2");
0x00009736 cmp r0, r8 |
0x00009738 sbcs r1, r7 | __asm ("sbcs r1, r7");
0x0000973a blo 0x96f6 |
| } while (r0 <= r8);
| label_3:
0x0000973c ldr.w r3, [pc, 0x628] |
0x00009740 movs r2, 0xca | r2 = 0xca;
0x00009742 ldr.w r1, [pc, 0x628] | r1 = *(0x00009d6c);
0x00009746 ldr.w r0, [pc, 0x628] |
0x0000974a add r3, pc | r3 = 0x134b6;
0x0000974c add r1, pc | r1 += pc;
0x0000974e add r0, pc | r0 = 0x134c4;
0x00009750 blx 0x246c | fcn_0000246c ();
| label_23:
0x00009754 movs r3, 0 | r3 = 0;
0x00009756 str r3, [sp, 0x64] | var_64h = r3;
0x00009758 str r3, [sp, 0x98] | var_98h = r3;
0x0000975a b 0x9544 | goto label_0;
| label_21:
0x0000975c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00009760 movs r3, 0x40 | r3 = 0x40;
0x00009762 str r3, [sp, 0x3c] | var_3ch = r3;
0x00009764 str r1, [sp, 0xac] | var_ach = r1;
0x00009766 vstr d16, [sp, 0xb8] | __asm ("vstr d16, [sp, 0xb8]");
0x0000976a b 0x94c2 | goto label_1;
| label_32:
0x0000976c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0000976e adds.w r1, sl, r6 | r1 = sl + r6;
0x00009772 mov r2, r5 | r2 = r5;
0x00009774 ldr r3, [sp, 0x80] | r3 = var_80h;
0x00009776 ldr r5, [sp, 0x7c] | r5 = var_7ch;
0x00009778 adc r0, r0, 0 | __asm ("adc r0, r0, 0");
0x0000977c cmp r8, r1 |
0x0000977e sbcs.w r1, r7, r0 | __asm ("sbcs.w r1, r7, r0");
| if (r8 <= r1) {
0x00009782 blo.w 0x9d0e | goto label_28;
| }
0x00009786 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00009788 add r6, fp | r6 += fp;
0x0000978a cmp r1, 0 |
| if (r1 == 0) {
0x0000978c beq.w 0x9c02 | goto label_34;
| }
0x00009790 ldr r0, [sp, 8] | r0 = var_8h;
0x00009792 add.w ip, r6, -1 |
0x00009796 ldr r1, [sp, 0x44] | r1 = var_44h;
| do {
0x00009798 mov r4, ip | r4 = ip;
0x0000979a ldrb lr, [ip, 1]! |
0x0000979e adds r4, 2 | r4 += 2;
0x000097a0 lsls r1, r1, 8 | r1 <<= 8;
0x000097a2 subs r4, r4, r6 | r4 -= r6;
0x000097a4 cmp r4, sl |
0x000097a6 orr.w r1, r1, r0, lsr 24 | r1 |= (r0 >> 24);
0x000097aa orr.w r0, lr, r0, lsl 8 | r0 = lr | (r0 << 8);
0x000097ae blo 0x9798 |
| } while (r4 <= sl);
| label_11:
0x000097b0 ldr r4, [sp, 0x64] | r4 = var_64h;
| if (r4 != 0) {
0x000097b2 cbz r4, 0x97c2 |
0x000097b4 lsrs r4, r2, 6 | r4 = r2 >> 6;
0x000097b6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000097b8 ldr r6, [sp, 0x64] | r6 = var_64h;
0x000097ba orr.w r4, r4, r2, lsl 26 | r4 |= (r2 << 26);
0x000097be movs r2, 1 | r2 = 1;
0x000097c0 strb r2, [r6, r4] | *((r6 + r4)) = r2;
| }
| label_31:
0x000097c2 ldr r2, [sp, 4] | r2 = var_4h;
0x000097c4 strd r0, r1, [r2] | __asm ("strd r0, r1, [r2]");
| label_18:
0x000097c8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000097ca ldr r1, [sp, 0xc] | r1 = var_ch;
0x000097cc ldr r0, [sp, 4] | r0 = var_4h;
0x000097ce adds r5, r5, r2 | r5 += r2;
0x000097d0 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000097d4 adds.w r2, r2, sb | r2 += sb;
0x000097d8 mov sb, r2 | sb = r2;
0x000097da ldr r2, [sp] | r2 = *(sp);
0x000097dc add.w r1, r1, 1 | r1++;
0x000097e0 add.w r0, r0, 8 | r0 += 8;
0x000097e4 str r1, [sp, 0xc] | var_ch = r1;
0x000097e6 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000097ea str r0, [sp, 4] | var_4h = r0;
0x000097ec str r2, [sp] | *(sp) = r2;
0x000097ee ldr r2, [sp, 0x18] | r2 = var_18h;
0x000097f0 cmp r2, r1 |
| if (r2 != r1) {
0x000097f2 bne.w 0x960a | goto label_2;
| }
0x000097f6 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000097f8 cmp r3, 0 |
| if (r3 == 0) {
0x000097fa beq 0x9874 | goto label_35;
| }
0x000097fc ldr r3, [sp, 0x98] | r3 = var_98h;
0x000097fe ldr r5, [sp, 0x84] | r5 = var_84h;
0x00009800 cmp r3, 0 |
0x00009802 asr.w r6, r5, 0x1f | r6 = r5 >> 0x1f;
| if (r3 <= 0) {
0x00009806 ble 0x9874 | goto label_35;
| }
| label_16:
0x00009808 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0000980a movs r7, 0 | r7 = 0;
0x0000980c str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00009810 str r5, [sp, 4] | var_4h = r5;
0x00009812 str r6, [sp, 0xc] | var_ch = r6;
0x00009814 add.w r8, r3, -1 | r8 = r3 + -1;
0x00009818 ldr.w fp, [sp, 0x4c] | fp = var_4ch;
0x0000981c mov sl, r3 | sl = r3;
0x0000981e ldr.w sb, [sp, 0x98] | sb = var_98h;
0x00009822 ldr r5, [sp, 0x50] | r5 = var_50h;
0x00009824 ldr r6, [sp, 0x2c] | r6 = var_2ch;
| label_4:
0x00009826 mov r4, r8 | r4 = r8;
0x00009828 ldrb r3, [r8, 1]! | r3 = *((r8 += 1));
| if (r3 != 0) {
0x0000982c cbnz r3, 0x985e | goto label_36;
| }
0x0000982e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00009830 ldr r1, [sp, 4] | r1 = var_4h;
0x00009832 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00009834 adds r0, r3, r1 | r0 = r3 + r1;
0x00009836 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00009838 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0000983a adc ip, r1, 0 | __asm ("adc ip, r1, 0");
0x0000983e adds r0, r0, r7 | r0 += r7;
0x00009840 adc ip, ip, 0 | __asm ("adc ip, ip, 0");
0x00009844 cmp r0, r2 |
0x00009846 sbcs.w ip, ip, r3 | __asm ("sbcs.w ip, ip, r3");
| if (r0 >= r2) {
0x0000984a bhs.w 0x973c | goto label_3;
| }
0x0000984e ldr r3, [sp] | r3 = *(sp);
0x00009850 adds r5, 1 | r5++;
0x00009852 add.w fp, fp, 1 |
0x00009856 add r0, r3 | r0 += r3;
0x00009858 blx 0x22a8 | r0 = fcn_000022a8 ();
0x0000985c add r5, r0 | r5 += r0;
| label_36:
0x0000985e adds r4, 2 | r4 += 2;
0x00009860 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00009862 sub.w r4, r4, sl | r4 -= sl;
0x00009866 cmp sb, r4 |
0x00009868 add r7, r3 | r7 += r3;
| if (sb > r4) {
0x0000986a bgt 0x9826 | goto label_4;
| }
0x0000986c strd fp, r5, [sp, 0x4c] | __asm ("strd fp, r5, [var_4ch]");
0x00009870 ldr.w fp, [sp] | fp = *(sp);
| label_35:
0x00009874 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00009876 cmp r3, 0 |
| if (r3 == 0) {
0x00009878 beq.w 0x9cd8 | goto label_37;
| }
0x0000987c ldr r0, [sp, 0x50] | r0 = var_50h;
0x0000987e lsls r4, r3, 4 | r4 = r3 << 4;
0x00009880 add r0, r4 | r0 += r4;
0x00009882 blx 0x21fc | fcn_000021fc ();
0x00009886 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x00009888 str r0, [sp, 0x1c] | var_1ch = r0;
0x0000988a str r0, [r2] | *(r2) = r0;
0x0000988c cmp r0, 0 |
| if (r0 == 0) {
0x0000988e beq.w 0x9d32 | goto label_38;
| }
0x00009892 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00009894 add r4, r3 | r4 += r3;
0x00009896 ldr r3, [sp, 0x90] | r3 = var_90h;
0x00009898 cmp r3, 1 |
| if (r3 <= 1) {
0x0000989a ble.w 0x9d20 | goto label_39;
| }
0x0000989e ldr r3, [sp, 0x94] | r3 = var_94h;
0x000098a0 movs r6, 1 | r6 = 1;
0x000098a2 str r4, [sp] | *(sp) = r4;
0x000098a4 mov.w sl, 0 | sl = 0;
0x000098a8 ldrd r4, sb, [sp, 0xa0] | __asm ("ldrd r4, sb, [var_a0h]");
0x000098ac adds r5, r3, 4 | r5 = r3 + 4;
0x000098ae mov.w r3, 0 | r3 = 0;
0x000098b2 adc r7, r3, 0 | __asm ("adc r7, r3, 0");
0x000098b6 ldr r3, [sp, 0x88] | r3 = var_88h;
0x000098b8 str.w sl, [sp, 0xc] | __asm ("str.w sl, [var_ch]");
0x000098bc add.w r8, r3, 8 | r8 = r3 + 8;
0x000098c0 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x000098c2 and r3, r3, 0x10 | r3 &= 0x10;
0x000098c6 str r3, [sp, 4] | var_4h = r3;
0x000098c8 add.w r3, fp, 4 | r3 += arg_4h;
0x000098cc str r3, [sp, 0x28] | var_28h = r3;
| label_5:
0x000098ce ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000098d0 ldrd ip, r0, [r3, 8] | __asm ("ldrd ip, r0, [r3, 8]");
0x000098d4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000098d6 cmp r3, 0 |
| if (r3 == 0) {
0x000098d8 beq.w 0x9ba4 | goto label_40;
| }
0x000098dc cmp ip, r5 |
0x000098de sbcs.w r3, r0, r7 | __asm ("sbcs.w r3, r0, r7");
| if (ip <= r5) {
0x000098e2 blo.w 0x9d0e | goto label_28;
| }
0x000098e6 ldr r3, [sp, 4] | r3 = var_4h;
0x000098e8 add.w r1, fp, r4 | r1 = fp + r4;
0x000098ec cmp r3, 0 |
| if (r3 == 0) {
0x000098ee beq.w 0x9c6e | goto label_41;
| }
0x000098f2 ldr r3, [sp, 8] | r3 = var_8h;
0x000098f4 add.w r2, fp, -1 | r2 = fp + -1;
0x000098f8 add.w lr, fp, 3 | lr += arg_3h;
0x000098fc add r2, r4 | r2 += r4;
0x000098fe add lr, r4 | lr += r4;
| do {
0x00009900 ldrb sl, [r2, 1]! | sl = *((r2 += 1));
0x00009904 cmp lr, r2 |
0x00009906 orr.w r3, sl, r3, lsl 8 | r3 = sl | (r3 << 8);
0x0000990a bne 0x9900 |
| } while (lr != r2);
0x0000990c adds.w lr, r4, 0x10 | lr = r4 + 0x10;
0x00009910 adc r2, sb, 0 | __asm ("adc r2, sb, 0");
0x00009914 cmp ip, lr |
0x00009916 sbcs.w r2, r0, r2 | __asm ("sbcs.w r2, r0, r2");
| if (ip <= lr) {
0x0000991a blo.w 0x9d0e | goto label_28;
| }
0x0000991e ldrh r2, [r1, 0xe] | r2 = *((r1 + 0xe));
0x00009920 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00009922 uxth r2, r2 | r2 = (int16_t) r2;
| label_14:
0x00009924 adds.w lr, r4, 0xd | lr = r4 + 0xd;
0x00009928 adc r1, sb, 0 | __asm ("adc r1, sb, 0");
0x0000992c cmp ip, lr |
0x0000992e sbcs.w r1, r0, r1 | __asm ("sbcs.w r1, r0, r1");
| if (ip <= lr) {
0x00009932 blo.w 0x9d0e | goto label_28;
| }
0x00009936 add.w r1, fp, 0xc | r1 += arg_ch;
0x0000993a ldrb.w lr, [r1, r4] |
| label_10:
0x0000993e cmp r2, 0 |
| if (r2 != 0) {
0x00009940 bne 0x99be | goto label_42;
| }
0x00009942 ldr r2, [sp, 0x30] | r2 = var_30h;
| if (r2 != 0) {
0x00009944 cbz r2, 0x994e |
0x00009946 and r2, lr, 0xf | r2 = lr & 0xf;
0x0000994a cmp r2, 0xd |
| if (r2 == 0xd) {
0x0000994c beq 0x99be | goto label_42;
| }
| }
0x0000994e ldr r2, [sp, 0x34] | r2 = var_34h;
0x00009950 adds r3, r3, r2 | r3 += r2;
0x00009952 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00009954 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00009958 cmp r3, ip |
0x0000995a sbcs r2, r0 | __asm ("sbcs r2, r0");
| if (r3 >= ip) {
0x0000995c bhs.w 0x973c | goto label_3;
| }
0x00009960 ldrb.w r2, [fp, r3] | r2 = *((fp + r3));
0x00009964 add.w sl, fp, r3 | sl = fp + r3;
| if (r2 != 0) {
0x00009968 cbz r2, 0x99be |
0x0000996a lsr.w lr, lr, 4 | lr >>= 4;
0x0000996e mov r0, sl | r0 = sl;
0x00009970 cmp.w lr, 2 |
0x00009974 ite eq |
| if (lr != 2) {
0x00009976 moveq r3, 0x57 | r3 = 0x57;
| }
| if (lr == 2) {
0x00009978 movne r3, 0x55 | r3 = 0x55;
| }
0x0000997a str r3, [sp, 0x24] | var_24h = r3;
0x0000997c blx 0x22a8 | fcn_000022a8 ();
0x00009980 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00009982 mov r1, sl | r1 = sl;
0x00009984 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00009986 mov sl, r0 | sl = r0;
0x00009988 vldr d16, [r8] | __asm ("vldr d16, [r8]");
0x0000998c add.w ip, r3, r2, lsl 4 |
0x00009990 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00009992 adds r2, 1 | r2++;
0x00009994 str r2, [sp, 0xc] | var_ch = r2;
0x00009996 mov r2, sl | r2 = sl;
0x00009998 str.w r3, [ip, 8] | __asm ("str.w r3, [ip, 8]");
0x0000999c ldr r3, [sp] | r3 = *(sp);
0x0000999e vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x000099a2 mov r0, r3 | r0 = r3;
0x000099a4 str.w r3, [ip, 0xc] | __asm ("str.w r3, [ip, 0xc]");
0x000099a8 blx 0x20c0 | mmap64 ()
0x000099ac ldr r2, [sp] | r2 = *(sp);
0x000099ae movs r3, 0 | r3 = 0;
0x000099b0 strb.w r3, [r2, sl] | *((r2 + sl)) = r3;
0x000099b4 add.w sl, sl, 1 | sl++;
0x000099b8 add.w r3, r2, sl | r3 = r2 + sl;
0x000099bc str r3, [sp] | *(sp) = r3;
| }
| label_42:
0x000099be ldr r3, [sp, 0x14] | r3 = var_14h;
0x000099c0 adds r6, 1 | r6++;
0x000099c2 add.w r8, r8, 8 | r8 += 8;
0x000099c6 adds r4, r4, r3 | r4 += r3;
0x000099c8 adc sb, sb, 0 | __asm ("adc sb, sb, 0");
0x000099cc adds r5, r3, r5 | r5 = r3 + r5;
0x000099ce ldr r3, [sp, 0x18] | r3 = var_18h;
0x000099d0 adc r7, r7, 0 | __asm ("adc r7, r7, 0");
0x000099d4 cmp r3, r6 |
| if (r3 != r6) {
0x000099d6 bne.w 0x98ce | goto label_5;
| }
0x000099da ldr r4, [sp] | r4 = *(sp);
0x000099dc ldr.w sl, [sp, 0xc] | sl = var_ch;
| label_19:
0x000099e0 ldr r0, [sp, 0x88] | r0 = var_88h;
0x000099e2 blx 0x20a4 | fcn_000020a4 ();
0x000099e6 ldr r2, [sp, 0x64] | r2 = var_64h;
0x000099e8 cmp r2, 0 |
| if (r2 == 0) {
0x000099ea beq 0x9ade | goto label_15;
| }
0x000099ec ldr r3, [sp, 0xac] | r3 = var_ach;
0x000099ee sub.w r3, r3, fp | r3 -= fp;
0x000099f2 str r3, [sp, 0x18] | var_18h = r3;
0x000099f4 asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000099f6 str r3, [sp, 0x24] | var_24h = r3;
0x000099f8 ldr r3, [sp, 0x98] | r3 = var_98h;
0x000099fa cmp r3, 0 |
| if (r3 <= 0) {
0x000099fc ble 0x9ad8 | goto label_43;
| }
0x000099fe add r3, r2 | r3 += r2;
0x00009a00 ldr r1, [sp, 0x8c] | r1 = var_8ch;
0x00009a02 subs r3, 1 | r3--;
0x00009a04 add.w sb, r2, -1 | sb = r2 + -1;
0x00009a08 str r3, [sp, 0x14] | var_14h = r3;
0x00009a0a movs r3, 0 | r3 = 0;
0x00009a0c mov r8, r3 | r8 = r3;
0x00009a0e and r1, r1, 0x10 | r1 &= 0x10;
0x00009a12 str r1, [sp, 0x28] | var_28h = r1;
0x00009a14 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x00009a18 str.w sl, [sp] | __asm ("str.w sl, [sp]");
| label_6:
0x00009a1c ldrb r3, [sb, 1]! | r3 = *((sb += 1));
0x00009a20 cmp r3, 0 |
| if (r3 != 0) {
0x00009a22 bne 0x9aca | goto label_44;
| }
0x00009a24 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00009a26 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00009a28 ldr r6, [sp, 0x20] | r6 = var_20h;
0x00009a2a adds.w r5, r8, r1 | r5 = r8 + r1;
0x00009a2e ldr r1, [sp, 0x24] | r1 = var_24h;
0x00009a30 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00009a32 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00009a34 adc sl, r1, 0 | __asm ("adc sl, r1, 0");
0x00009a38 adds.w fp, r6, r5 |
0x00009a3c adc r1, sl, 0 | __asm ("adc r1, sl, 0");
0x00009a40 cmp fp, r2 |
0x00009a42 sbcs r1, r3 | __asm ("sbcs r1, r3");
0x00009a44 str r2, [sp, 0x10] | var_10h = r2;
0x00009a46 str r3, [sp, 0xc] | var_ch = r3;
| if (fp >= r2) {
0x00009a48 bhs.w 0x973c | goto label_3;
| }
0x00009a4c ldr r7, [sp, 0x30] | r7 = var_30h;
0x00009a4e add.w r1, r7, fp | r1 = r7 + fp;
0x00009a52 mov r0, r1 | r0 = r1;
0x00009a54 str r1, [sp, 4] | var_4h = r1;
0x00009a56 blx 0x22a8 | fcn_000022a8 ();
0x00009a5a mov r3, r6 | r3 = r6;
0x00009a5c ldr r2, [sp, 0x10] | r2 = var_10h;
0x00009a5e adds r6, r3, r5 | r6 = r3 + r5;
0x00009a60 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00009a62 adc sl, sl, 0 | __asm ("adc sl, sl, 0");
0x00009a66 mov r6, r0 | r6 = r0;
0x00009a68 cmp r2, fp |
0x00009a6a sbcs.w sl, r3, sl | __asm ("sbcs.w sl, r3, sl");
| if (r2 <= fp) {
0x00009a6e blo.w 0x9d0e | goto label_28;
| }
0x00009a72 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009a74 add r5, r7 | r5 += r7;
0x00009a76 ldr r1, [sp, 4] | r1 = var_4h;
0x00009a78 cmp r3, 0 |
| if (r3 != 0) {
0x00009a7a bne.w 0x9c26 | goto label_45;
| }
0x00009a7e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00009a80 cmp r3, 0 |
| if (r3 == 0) {
0x00009a82 beq.w 0x9cee | goto label_46;
| }
0x00009a86 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00009a88 ldr r2, [sp, 8] | r2 = var_8h;
0x00009a8a ldr r3, [sp, 0x44] | r3 = var_44h;
0x00009a8c adds r0, r5, r7 | r0 = r5 + r7;
| do {
0x00009a8e ldrb ip, [r0, -0x1]! | ip = *((r0 -= 0x1));
0x00009a92 lsls r3, r3, 8 | r3 <<= 8;
0x00009a94 orr.w r3, r3, r2, lsr 24 | r3 |= (r2 >> 24);
0x00009a98 cmp r0, r5 |
0x00009a9a orr.w r2, ip, r2, lsl 8 | r2 = ip | (r2 << 8);
0x00009a9e bne 0x9a8e |
| } while (r0 != r5);
| label_12:
0x00009aa0 str r7, [sp, 0x20] | var_20h = r7;
| label_17:
0x00009aa2 ldr r5, [sp] | r5 = *(sp);
0x00009aa4 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x00009aa6 lsls r0, r5, 4 | r0 = r5 << 4;
0x00009aa8 str r2, [r7, r0] | *((r7 + r0)) = r2;
0x00009aaa adds r2, r7, r0 | r2 = r7 + r0;
0x00009aac str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00009aae movs r3, 0x55 | r3 = 0x55;
0x00009ab0 str r4, [r2, 0xc] | *((r2 + 0xc)) = r4;
0x00009ab2 mov r0, r4 | r0 = r4;
0x00009ab4 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00009ab6 adds r3, r5, 1 | r3 = r5 + 1;
0x00009ab8 mov r2, r6 | r2 = r6;
0x00009aba str r3, [sp] | *(sp) = r3;
0x00009abc blx 0x20c0 | mmap64 ()
0x00009ac0 mov.w r3, 0 | r3 = 0;
0x00009ac4 strb r3, [r4, r6] | *((r4 + r6)) = r3;
0x00009ac6 adds r6, 1 | r6++;
0x00009ac8 add r4, r6 | r4 += r6;
| label_44:
0x00009aca ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00009acc add r8, r3 | r8 += r3;
0x00009ace ldr r3, [sp, 0x14] | r3 = var_14h;
0x00009ad0 cmp sb, r3 |
| if (sb != r3) {
0x00009ad2 bne 0x9a1c | goto label_6;
| }
0x00009ad4 ldr.w sl, [sp] | sl = *(sp);
| label_43:
0x00009ad8 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00009ada blx 0x20a4 | fcn_000020a4 ();
| label_15:
0x00009ade ldr r2, [pc, 0x294] |
0x00009ae0 ldr r3, [pc, 0x274] | r3 = *(0x9d58);
0x00009ae2 add r2, pc | r2 = 0x1385c;
0x00009ae4 ldr r3, [r2, r3] | r3 = *(0x1385c);
0x00009ae6 ldr r2, [r3] | r2 = *(0x1385c);
0x00009ae8 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x00009aea eors r2, r3 | r2 ^= r3;
0x00009aec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00009af0 bne.w 0x9d50 | goto label_47;
| }
0x00009af4 mov r0, sl | r0 = sl;
0x00009af6 add sp, 0xdc |
0x00009af8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x00009afc ldr r2, [sp] | r2 = *(sp);
0x00009afe cmp r8, sb |
0x00009b00 sbcs.w r2, r7, r2 | __asm ("sbcs.w r2, r7, r2");
| if (r8 <= sb) {
0x00009b04 blo.w 0x9d0e | goto label_28;
| }
0x00009b08 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00009b0a add.w r1, r5, fp | r1 = r5 + fp;
| if (r2 == 0) {
0x00009b0e cbz r2, 0x9b7c | goto label_48;
| }
0x00009b10 ldr r2, [sp, 0x70] | r2 = var_70h;
0x00009b12 ldr r0, [sp, 0x74] | r0 = var_74h;
0x00009b14 ldr r4, [sp, 8] | r4 = var_8h;
0x00009b16 add r2, r5 | r2 += r5;
0x00009b18 adds r6, r0, r5 | r6 = r0 + r5;
| do {
0x00009b1a ldrb r0, [r2, 1]! | r0 = *((r2 += 1));
0x00009b1e cmp r6, r2 |
0x00009b20 orr.w r4, r0, r4, lsl 8 | r4 = r0 | (r4 << 8);
0x00009b24 bne 0x9b1a |
| } while (r6 != r2);
0x00009b26 adds.w r0, r5, 8 | r0 = r5 + 8;
0x00009b2a adc r2, r3, 0 | __asm ("adc r2, r3, 0");
0x00009b2e cmp r8, r0 |
0x00009b30 sbcs.w r2, r7, r2 | __asm ("sbcs.w r2, r7, r2");
| if (r8 <= r0) {
0x00009b34 blo.w 0x9d0e | goto label_28;
| }
0x00009b38 ldrh r2, [r1, 6] | r2 = *((r1 + 6));
0x00009b3a rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00009b3c uxth r2, r2 | r2 = (int16_t) r2;
| label_9:
0x00009b3e adds r0, r5, 5 | r0 = r5 + 5;
0x00009b40 adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x00009b44 cmp r8, r0 |
0x00009b46 sbcs.w r1, r7, r1 | __asm ("sbcs.w r1, r7, r1");
| if (r8 <= r0) {
0x00009b4a blo.w 0x9d0e | goto label_28;
| }
0x00009b4e ldrb.w r1, [fp, sb] | r1 = *((fp + sb));
0x00009b52 b 0x966e | goto label_7;
| label_29:
0x00009b54 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x00009b56 ldr r4, [sp, 8] | r4 = var_8h;
0x00009b58 add r2, r5 | r2 += r5;
| do {
0x00009b5a ldrb r0, [r2, -0x1]! | r0 = *((r2 -= 0x1));
0x00009b5e cmp r1, r2 |
0x00009b60 orr.w r4, r0, r4, lsl 8 | r4 = r0 | (r4 << 8);
0x00009b64 bne 0x9b5a |
| } while (r1 != r2);
0x00009b66 adds.w r0, r5, 0x10 | r0 = r5 + 0x10;
0x00009b6a adc r2, r3, 0 | __asm ("adc r2, r3, 0");
0x00009b6e cmp r8, r0 |
0x00009b70 sbcs.w r2, r7, r2 | __asm ("sbcs.w r2, r7, r2");
| if (r8 <= r0) {
0x00009b74 blo.w 0x9d0e | goto label_28;
| }
0x00009b78 ldrh r2, [r1, 0xe] | r2 = *((r1 + 0xe));
0x00009b7a b 0x9658 | goto label_8;
| label_48:
0x00009b7c ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x00009b7e ldr r4, [sp, 8] | r4 = var_8h;
0x00009b80 add r2, r5 | r2 += r5;
| do {
0x00009b82 ldrb r0, [r2, -0x1]! | r0 = *((r2 -= 0x1));
0x00009b86 cmp r2, r1 |
0x00009b88 orr.w r4, r0, r4, lsl 8 | r4 = r0 | (r4 << 8);
0x00009b8c bne 0x9b82 |
| } while (r2 != r1);
0x00009b8e adds.w r0, r5, 8 | r0 = r5 + 8;
0x00009b92 adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x00009b96 cmp r8, r0 |
0x00009b98 sbcs.w r1, r7, r1 | __asm ("sbcs.w r1, r7, r1");
| if (r8 <= r0) {
0x00009b9c blo.w 0x9d0e | goto label_28;
| }
0x00009ba0 ldrh r2, [r2, 6] | r2 = *((r2 + 6));
0x00009ba2 b 0x9b3e | goto label_9;
| label_40:
0x00009ba4 cmp ip, r5 |
0x00009ba6 sbcs.w r3, r0, r7 | __asm ("sbcs.w r3, r0, r7");
| if (ip <= r5) {
0x00009baa blo.w 0x9d0e | goto label_28;
| }
0x00009bae ldr r3, [sp, 4] | r3 = var_4h;
0x00009bb0 add.w r1, r4, fp | r1 = r4 + fp;
0x00009bb4 cmp r3, 0 |
| if (r3 == 0) {
0x00009bb6 beq 0x9c48 | goto label_49;
| }
0x00009bb8 ldr r3, [sp, 8] | r3 = var_8h;
0x00009bba add.w r2, fp, -1 | r2 = fp + -1;
0x00009bbe add.w lr, fp, 3 | lr += arg_3h;
0x00009bc2 add r2, r4 | r2 += r4;
0x00009bc4 add lr, r4 | lr += r4;
| do {
0x00009bc6 ldrb sl, [r2, 1]! | sl = *((r2 += 1));
0x00009bca cmp lr, r2 |
0x00009bcc orr.w r3, sl, r3, lsl 8 | r3 = sl | (r3 << 8);
0x00009bd0 bne 0x9bc6 |
| } while (lr != r2);
0x00009bd2 adds.w lr, r4, 8 | lr = r4 + 8;
0x00009bd6 adc r2, sb, 0 | __asm ("adc r2, sb, 0");
0x00009bda cmp ip, lr |
0x00009bdc sbcs.w r2, r0, r2 | __asm ("sbcs.w r2, r0, r2");
| if (ip <= lr) {
0x00009be0 blo.w 0x9d0e | goto label_28;
| }
0x00009be4 ldrh r2, [r1, 6] | r2 = *((r1 + 6));
0x00009be6 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00009be8 uxth r2, r2 | r2 = (int16_t) r2;
| label_13:
0x00009bea adds.w lr, r4, 5 | lr = r4 + 5;
0x00009bee adc r1, sb, 0 | __asm ("adc r1, sb, 0");
0x00009bf2 cmp ip, lr |
0x00009bf4 sbcs.w r1, r0, r1 | __asm ("sbcs.w r1, r0, r1");
| if (ip <= lr) {
0x00009bf8 blo.w 0x9d0e | goto label_28;
| }
0x00009bfc ldrb.w lr, [fp, r5] |
0x00009c00 b 0x993e | goto label_10;
| label_34:
0x00009c02 ldr r0, [sp, 8] | r0 = var_8h;
0x00009c04 add.w ip, r6, sl |
0x00009c08 ldr r1, [sp, 0x44] | r1 = var_44h;
| do {
0x00009c0a ldrb r4, [ip, -0x1]! | r4 = *((ip -= 0x1));
0x00009c0e lsls r1, r1, 8 | r1 <<= 8;
0x00009c10 orr.w r1, r1, r0, lsr 24 | r1 |= (r0 >> 24);
0x00009c14 orr.w r0, r4, r0, lsl 8 | r0 = r4 | (r0 << 8);
0x00009c18 rsb.w r4, ip, 1 | r4 = 1 - ip;
0x00009c1c add r4, sl | r4 += sl;
0x00009c1e add r4, r6 | r4 += r6;
0x00009c20 cmp r4, sl |
0x00009c22 bls 0x9c0a |
| } while (r4 < sl);
0x00009c24 b 0x97b0 | goto label_11;
| label_45:
0x00009c26 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00009c28 ldr r2, [sp, 8] | r2 = var_8h;
0x00009c2a cmp r7, 0 |
| if (r7 == 0) {
0x00009c2c beq 0x9cf4 | goto label_50;
| }
0x00009c2e ldr r3, [sp, 0x44] | r3 = var_44h;
0x00009c30 add.w ip, r5, r7 |
| do {
0x00009c34 ldrb r0, [r5], 1 | r0 = *(r5);
| r5++;
0x00009c38 lsls r3, r3, 8 | r3 <<= 8;
0x00009c3a orr.w r3, r3, r2, lsr 24 | r3 |= (r2 >> 24);
0x00009c3e cmp ip, r5 |
0x00009c40 orr.w r2, r0, r2, lsl 8 | r2 = r0 | (r2 << 8);
0x00009c44 bne 0x9c34 |
| } while (ip != r5);
0x00009c46 b 0x9aa0 | goto label_12;
| label_49:
0x00009c48 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009c4a adds r2, r3, r4 | r2 = r3 + r4;
0x00009c4c ldr r3, [sp, 8] | r3 = var_8h;
| do {
0x00009c4e ldrb lr, [r2, -0x1]! |
0x00009c52 cmp r1, r2 |
0x00009c54 orr.w r3, lr, r3, lsl 8 | r3 = lr | (r3 << 8);
0x00009c58 bne 0x9c4e |
| } while (r1 != r2);
0x00009c5a adds.w lr, r4, 8 | lr = r4 + 8;
0x00009c5e adc r2, sb, 0 | __asm ("adc r2, sb, 0");
0x00009c62 cmp ip, lr |
0x00009c64 sbcs.w r2, r0, r2 | __asm ("sbcs.w r2, r0, r2");
| if (ip <= lr) {
0x00009c68 blo 0x9d0e | goto label_28;
| }
0x00009c6a ldrh r2, [r1, 6] | r2 = *((r1 + 6));
0x00009c6c b 0x9bea | goto label_13;
| label_41:
0x00009c6e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00009c70 adds r2, r3, r4 | r2 = r3 + r4;
0x00009c72 ldr r3, [sp, 8] | r3 = var_8h;
| do {
0x00009c74 ldrb lr, [r2, -0x1]! |
0x00009c78 cmp r1, r2 |
0x00009c7a orr.w r3, lr, r3, lsl 8 | r3 = lr | (r3 << 8);
0x00009c7e bne 0x9c74 |
| } while (r1 != r2);
0x00009c80 adds.w lr, r4, 0x10 | lr = r4 + 0x10;
0x00009c84 adc r2, sb, 0 | __asm ("adc r2, sb, 0");
0x00009c88 cmp ip, lr |
0x00009c8a sbcs.w r2, r0, r2 | __asm ("sbcs.w r2, r0, r2");
| if (ip <= lr) {
0x00009c8e blo 0x9d0e | goto label_28;
| }
0x00009c90 ldrh r2, [r1, 0xe] | r2 = *((r1 + 0xe));
0x00009c92 b 0x9924 | goto label_14;
| label_20:
0x00009c94 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00009c98 movs r3, 0 | r3 = 0;
0x00009c9a str r3, [sp, 0x20] | var_20h = r3;
0x00009c9c str r3, [sp, 0xac] | var_ach = r3;
0x00009c9e str r3, [sp, 0x3c] | var_3ch = r3;
0x00009ca0 vstr d16, [sp, 0xb8] | __asm ("vstr d16, [sp, 0xb8]");
0x00009ca4 b 0x94c2 | goto label_1;
| label_30:
0x00009ca6 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00009ca8 mvn sl, 0x15 | sl = ~0x15;
0x00009cac blx 0x20a4 | fcn_000020a4 ();
0x00009cb0 ldr r0, [sp, 0x88] | r0 = var_88h;
0x00009cb2 blx 0x20a4 | fcn_000020a4 ();
0x00009cb6 b 0x9ade | goto label_15;
| label_26:
0x00009cb8 ldr r3, [sp, 0x64] | r3 = var_64h;
| if (r3 == 0) {
0x00009cba cbz r3, 0x9cd8 | goto label_37;
| }
0x00009cbc ldr r3, [sp, 0x98] | r3 = var_98h;
0x00009cbe ldr r5, [sp, 0xac] | r5 = var_ach;
0x00009cc0 cmp r3, 0 |
0x00009cc2 sub.w r5, r5, fp | r5 -= fp;
0x00009cc6 it gt |
| if (r3 <= 0) {
0x00009cc8 movgt r3, 0 | r3 = 0;
| }
0x00009cca asr.w r6, r5, 0x1f | r6 = r5 >> 0x1f;
0x00009cce it gt |
| if (r3 <= 0) {
0x00009cd0 strdgt r3, r3, [sp, 0x4c] | __asm ("strdgt r3, r3, [sp, 0x4c]");
| goto label_51;
| }
| if (r3 > 0) {
| label_51:
0x00009cd4 bgt.w 0x9808 | goto label_16;
| }
| label_37:
0x00009cd8 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00009cda blx 0x20a4 | fcn_000020a4 ();
0x00009cde ldr r0, [sp, 0x88] | r0 = var_88h;
0x00009ce0 blx 0x20a4 | fcn_000020a4 ();
0x00009ce4 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x00009ce6 movs r3, 0 | r3 = 0;
0x00009ce8 mov sl, r3 | sl = r3;
0x00009cea str r3, [r2] | *(r2) = r3;
0x00009cec b 0x9ade | goto label_15;
| label_46:
0x00009cee ldr r2, [sp, 8] | r2 = var_8h;
0x00009cf0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00009cf2 b 0x9aa2 | goto label_17;
| label_50:
0x00009cf4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00009cf6 b 0x9aa2 | goto label_17;
| label_33:
0x00009cf8 ldr r0, [sp, 8] | r0 = var_8h;
0x00009cfa ldr r1, [sp, 0x44] | r1 = var_44h;
0x00009cfc ldr r2, [sp, 4] | r2 = var_4h;
0x00009cfe ldrd r5, r3, [sp, 0x7c] | __asm ("ldrd r5, r3, [var_80h]");
0x00009d02 strd r0, r1, [r2] | __asm ("strd r0, r1, [r2]");
0x00009d06 b 0x97c8 | goto label_18;
| label_22:
0x00009d08 mvn sl, 0x15 | sl = ~0x15;
0x00009d0c b 0x9ade | goto label_15;
| label_28:
0x00009d0e ldr r3, [pc, 0x68] |
0x00009d10 movs r2, 0x89 | r2 = 0x89;
0x00009d12 ldr r1, [pc, 0x68] |
0x00009d14 ldr r0, [pc, 0x68] |
0x00009d16 add r3, pc | r3 = 0x13a94;
0x00009d18 add r1, pc | r1 = 0x13a9a;
0x00009d1a add r0, pc | r0 = 0x13a9e;
0x00009d1c blx 0x246c | fcn_0000246c ();
| label_39:
0x00009d20 mov.w sl, 0 | sl = 0;
0x00009d24 b 0x99e0 | goto label_19;
| label_25:
0x00009d26 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00009d28 mvn sl, 0xb | sl = ~0xb;
0x00009d2c blx 0x20a4 | fcn_000020a4 ();
0x00009d30 b 0x9ade | goto label_15;
| label_38:
0x00009d32 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00009d34 blx 0x20a4 | fcn_000020a4 ();
0x00009d38 ldr r0, [sp, 0x88] | r0 = var_88h;
0x00009d3a blx 0x20a4 | fcn_000020a4 ();
0x00009d3e blx 0x22f4 | r0 = gzerror ();
0x00009d42 ldr r3, [r0] | r3 = *(r0);
0x00009d44 rsb.w sl, r3, 0 | sl = r3 - ;
0x00009d48 b 0x9ade | goto label_15;
| label_24:
0x00009d4a mvn sl, 0xb | sl = ~0xb;
0x00009d4e b 0x9ade | goto label_15;
| label_47:
0x00009d50 blx 0x2108 | fcn_00002108 ();
0x00009d54 cmp r1, 0xc4 |
0x00009d56 movs r1, r0 | r1 = r0;
0x00009d58 lsls r4, r4, 6 | r4 <<= 6;
0x00009d5a movs r0, r0 |
0x00009d5c subs r6, r2, r6 | r6 = r2 - r6;
0x00009d5e movs r0, r0 |
0x00009d60 adds r4, r3, 7 | r4 = r3 + 7;
0x00009d62 movs r0, r0 |
0x00009d64 adds r4, r1, 7 | r4 = r1 + 7;
0x00009d66 movs r0, r0 |
0x00009d68 subs r6, r5, r6 | r6 = r5 - r6;
0x00009d6a movs r0, r0 |
0x00009d6c subs r4, r1, r3 | r4 = r1 - r3;
0x00009d6e movs r0, r0 |
0x00009d70 subs r2, r5, r3 | r2 = r5 - r3;
0x00009d72 movs r0, r0 |
0x00009d74 movs r3, 0x66 | r3 = 0x66;
0x00009d76 movs r1, r0 | r1 = r0;
0x00009d78 asrs r2, r2, 0x17 | r2 >>= 0x17;
0x00009d7a movs r0, r0 |
0x00009d7c asrs r0, r0, 0x14 | r0 >>= 0x14;
0x00009d7e movs r0, r0 |
0x00009d80 asrs r2, r6, 0x14 | r2 = r6 >> 0x14;
0x00009d82 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/libkmod.so.2.3.7 @ 0xa44c */
| #include <stdint.h>
|
; (fcn) fcn.0000a44c () | void fcn_0000a44c (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0000a44c stmdbhs r0, {r3, r4, r5, r6, r7, r8, sl, ip, sp, pc} | __asm ("stmdbhs r0, {r3, r4, r5, r6, r7, r8, sl, ip, sp, pc}");
| if (? != ?) {
0x0000a450 beq 0xa4bc |
0x0000a452 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0000a454 cbz r0, 0xa4aa |
0x0000a456 mov r0, r1 | r0 = r1;
0x0000a458 mov r6, r1 | r6 = r1;
0x0000a45a blx 0x22a8 | fcn_000022a8 ();
0x0000a45e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000a460 mov r5, r0 | r5 = r0;
0x0000a462 adds r7, r3, r0 | r7 = r3 + r0;
0x0000a464 ldrd r0, r2, [r4] | __asm ("ldrd r0, r2, [r4]");
0x0000a468 cmp r7, r2 |
| if (r7 >= r2) {
0x0000a46a bls 0xa490 |
0x0000a46c lsls r3, r7, 0x19 | r3 = r7 << 0x19;
0x0000a46e itt ne |
| if (r3 != r7) {
0x0000a470 bicne r7, r7, 0x7f | __asm ("bicne r7, r7, 0x7f");
| }
| if (r3 != r7) {
0x0000a474 adds r7, 0x80 | r7 += 0x80;
| }
0x0000a476 mov r1, r7 | r1 = r7;
0x0000a478 blx 0x2138 | fcn_00002138 ();
0x0000a47c subs r3, r7, 0 | r3 = r7 - 0;
0x0000a47e it ne |
| if (r3 == r7) {
0x0000a480 movne r3, 1 | r3 = 1;
| }
0x0000a482 cmp r0, 0 |
0x0000a484 it ne |
| if (r0 == 0) {
0x0000a486 movne r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0000a488 cbnz r3, 0xa4a4 | goto label_0;
| }
0x0000a48a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000a48c strd r0, r7, [r4] | __asm ("strd r0, r7, [r4]");
| }
0x0000a490 add r0, r3 | r0 += r3;
0x0000a492 mov r1, r6 | r1 = r6;
0x0000a494 mov r2, r5 | r2 = r5;
0x0000a496 blx 0x20c0 | mmap64 ()
0x0000a49a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000a49c mov r0, r5 | r0 = r5;
0x0000a49e add r3, r5 | r3 += r5;
0x0000a4a0 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0000a4a2 pop {r3, r4, r5, r6, r7, pc} |
| label_0:
0x0000a4a4 movs r5, 0 | r5 = 0;
0x0000a4a6 mov r0, r5 | r0 = r5;
0x0000a4a8 pop {r3, r4, r5, r6, r7, pc} |
| }
0x0000a4aa ldr r3, [pc, 0x24] |
0x0000a4ac movs r2, 0x63 | r2 = 0x63;
0x0000a4ae ldr r1, [pc, 0x24] |
0x0000a4b0 ldr r0, [pc, 0x24] |
0x0000a4b2 add r3, pc | r3 = 0x14988;
0x0000a4b4 add r1, pc | r1 = 0x1498e;
0x0000a4b6 add r0, pc | r0 = 0x14992;
0x0000a4b8 blx 0x246c | fcn_0000246c ();
| }
0x0000a4bc ldr r3, [pc, 0x1c] |
0x0000a4be movs r2, 0x62 | r2 = 0x62;
0x0000a4c0 ldr r1, [pc, 0x1c] |
0x0000a4c2 ldr r0, [pc, 0x20] |
0x0000a4c4 add r3, pc | r3 = 0x149a4;
0x0000a4c6 add r1, pc | r1 = 0x149aa;
0x0000a4c8 add r0, pc | r0 = 0x149b2;
0x0000a4ca blx 0x246c | fcn_0000246c ();
0x0000a4ce nop |
0x0000a4d0 lsrs r6, r0, 0x1d | r6 = r0 >> 0x1d;
0x0000a4d2 movs r0, r0 |
0x0000a4d4 lsrs r4, r2, 0x1b | r4 = r2 >> 0x1b;
0x0000a4d6 movs r0, r0 |
0x0000a4d8 lsrs r6, r6, 0x1b | r6 >>= 0x1b;
0x0000a4da movs r0, r0 |
0x0000a4dc lsrs r4, r6, 0x1c | r4 = r6 >> 0x1c;
0x0000a4de movs r0, r0 |
0x0000a4e0 lsrs r2, r0, 0x1b | r2 = r0 >> 0x1b;
0x0000a4e2 movs r0, r0 |
0x0000a4e4 lsrs r0, r3, 0x1b | r0 = r3 >> 0x1b;
0x0000a4e6 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/libkmod.so.2.3.7 @ 0xa8f4 */
| #include <stdint.h>
|
; (fcn) fcn.0000a8f4 () | void fcn_0000a8f4 (int16_t arg1) {
| r0 = arg1;
0x0000a8f4 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x0000a8f8 ldrb r3, [r0] | r3 = *(r0);
0x0000a8fa cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0000a8fc beq 0xa94a |
0x0000a8fe mov r7, r0 | r7 = r0;
0x0000a900 blx 0x2010 | r0 = fcn_00002010 ();
0x0000a904 mov r4, r0 | r4 = r0;
0x0000a906 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0000a908 cbz r0, 0xa93e |
0x0000a90a mov r0, r7 | r0 = r7;
0x0000a90c blx 0x22a8 | r0 = fcn_000022a8 ();
0x0000a910 mov r8, r0 | r8 = r0;
0x0000a912 mov r0, r4 | r0 = r4;
0x0000a914 blx 0x22a8 | r0 = fcn_000022a8 ();
0x0000a918 add.w r1, r8, r0 | r1 = r8 + r0;
0x0000a91c mov r6, r0 | r6 = r0;
0x0000a91e adds r1, 2 | r1 += 2;
0x0000a920 mov r0, r4 | r0 = r4;
0x0000a922 blx 0x2138 | r0 = fcn_00002138 ();
0x0000a926 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0000a928 cbz r0, 0xa93e | goto label_0;
| }
0x0000a92a movs r3, 0x2f | r3 = 0x2f;
0x0000a92c movs r4, 0 | r4 = 0;
0x0000a92e strb r3, [r0, r6] | *((r0 + r6)) = r3;
0x0000a930 adds r0, r6, 1 | r0 = r6 + 1;
0x0000a932 add.w r2, r8, 1 | r2 = r8 + 1;
0x0000a936 mov r1, r7 | r1 = r7;
0x0000a938 add r0, r5 | r0 += r5;
0x0000a93a blx 0x20c0 | mmap64 ()
| }
| label_0:
0x0000a93e mov r0, r4 | r0 = r4;
0x0000a940 blx 0x20a4 | fcn_000020a4 ();
0x0000a944 mov r0, r5 | r0 = r5;
0x0000a946 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x0000a94a movs r4, 0 | r4 = 0;
0x0000a94c blx 0x20fc | r0 = stack_chk_fail ();
0x0000a950 mov r5, r0 | r5 = r0;
0x0000a952 mov r0, r4 | r0 = r4;
0x0000a954 blx 0x20a4 | fcn_000020a4 ();
0x0000a958 mov r0, r5 | r0 = r5;
0x0000a95a 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/libkmod.so.2.3.7 @ 0x7ab4 */
| #include <stdint.h>
|
; (fcn) sym.kmod_module_get_dependency_symbols () | void kmod_module_get_dependency_symbols (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| label_3:
0x00002390 invalid | void (*0x2394)() ();
0x00007ab4 ldr r2, [pc, 0x104] |
0x00007ab6 cmp r1, 0 |
0x00007ab8 it ne |
| if (r1 != 0) {
0x00007aba cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00007abc ldr r3, [pc, 0x100] | r3 = *(0x7bc0);
0x00007abe push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00007ac2 add r2, pc | r2 = 0xf682;
0x00007ac4 vpush {d8} | __asm ("vpush {d8}");
0x00007ac8 sub sp, 8 |
0x00007aca ldr r3, [r2, r3] |
0x00007acc ldr r3, [r3] | r3 = *(0xf682);
0x00007ace str r3, [sp, 4] | var_4h = r3;
0x00007ad0 mov.w r3, 0 | r3 = 0;
| if (r1 == 0) {
0x00007ad4 beq 0x7b9c | goto label_4;
| }
0x00007ad6 ldr r6, [r1] | r6 = *(r1);
0x00007ad8 mov r7, r1 | r7 = r1;
0x00007ada cmp r6, 0 |
| if (r6 != 0) {
0x00007adc bne 0x7ba2 | goto label_5;
| }
0x00007ade bl 0x6420 | r0 = fcn_00006420 (r0);
0x00007ae2 cmp r0, 0 |
| if (r0 == 0) {
0x00007ae4 beq 0x7b7c | goto label_6;
| }
0x00007ae6 mov r1, sp | r1 = sp;
0x00007ae8 bl 0x9470 | r0 = fcn_00009470 (r0, r1, r2, r3, r4, r5, r6);
0x00007aec subs.w r8, r0, 0 | r8 = r0 - 0;
| if (r8 < r0) {
0x00007af0 blt 0x7afa | goto label_2;
| }
| if (r8 != r0) {
0x00007af2 bne 0x7b22 | goto label_7;
| }
| do {
| label_1:
0x00007af4 ldr r0, [sp] | r0 = *(sp);
0x00007af6 blx 0x20a4 | fcn_000020a4 ();
| label_2:
0x00007afa ldr r2, [pc, 0xc8] |
0x00007afc ldr r3, [pc, 0xc0] | r3 = *(0x7bc0);
0x00007afe add r2, pc | r2 = 0xf6c8;
0x00007b00 ldr r3, [r2, r3] | r3 = *(0xf6c8);
0x00007b02 ldr r2, [r3] | r2 = *(0xf6c8);
0x00007b04 ldr r3, [sp, 4] | r3 = var_4h;
0x00007b06 eors r2, r3 | r2 ^= r3;
0x00007b08 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00007b0c bne 0x7bb6 | goto label_8;
| }
0x00007b0e mov r0, r8 | r0 = r8;
0x00007b10 add sp, 8 |
0x00007b12 vpop {d8} | __asm ("vpop {d8}");
0x00007b16 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x00007b1a adds r6, 1 | r6++;
0x00007b1c str r0, [r7] | *(r7) = r0;
0x00007b1e cmp r8, r6 |
0x00007b20 beq 0x7af4 |
| } while (r8 == r6);
| label_7:
0x00007b22 ldr r3, [sp] | r3 = *(sp);
0x00007b24 add.w r3, r3, r6, lsl 4 | r3 += (r6 << 4);
0x00007b28 ldr.w sb, [r3, 0xc] | sb = *((r3 + 0xc));
0x00007b2c vldr d8, [r3] | __asm ("vldr d8, [r3]");
0x00007b30 ldrb.w sl, [r3, 8] | sl = *((r3 + 8));
0x00007b34 mov r0, sb | r0 = sb;
0x00007b36 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00007b3a mov r2, r0 | r2 = r0;
0x00007b3c adds r0, 0x11 | r0 += 0x11;
0x00007b3e adds r5, r2, 1 | r5 = r2 + 1;
0x00007b40 blx 0x21fc | r0 = fcn_000021fc ();
0x00007b44 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00007b46 cbz r0, 0x7b88 | goto label_9;
| }
0x00007b48 mov r2, r5 | r2 = r5;
0x00007b4a mov r1, sb | r1 = sb;
0x00007b4c adds r0, 9 | r0 += 9;
0x00007b4e vstr d8, [r4] | __asm ("vstr d8, [r4]");
0x00007b52 strb.w sl, [r4, 8] | *((r4 + 8)) = sl;
0x00007b54 adr r0, 0x20 | r0 = 0x20;
0x00007b56 blx 0x20c0 | mmap64 ()
0x00007b5a ldr r0, [r7] | r0 = *(r7);
0x00007b5c mov r1, r4 | r1 = r4;
0x00007b5e bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
0x00007b62 mov r5, r0 | r5 = r0;
0x00007b64 cmp r0, 0 |
| if (r0 != 0) {
0x00007b66 bne 0x7b1a | goto label_0;
| }
0x00007b68 mov r0, r4 | r0 = r4;
0x00007b6a mvn r8, 0xb | r8 = ~0xb;
0x00007b6e blx 0x20a4 | fcn_000020a4 ();
0x00007b72 ldr r0, [r7] | r0 = *(r7);
0x00007b74 blx 0x219c | fcn_0000219c ();
0x00007b78 str r5, [r7] | *(r7) = r5;
0x00007b7a b 0x7af4 | goto label_1;
| label_6:
0x00007b7c blx 0x22f4 | r0 = gzerror ();
0x00007b80 ldr r3, [r0] | r3 = *(r0);
0x00007b82 rsb.w r8, r3, 0 | r8 = r3 - ;
0x00007b86 b 0x7afa | goto label_2;
| label_9:
0x00007b88 blx 0x22f4 | r0 = gzerror ();
0x00007b8c ldr r3, [r0] | r3 = *(r0);
0x00007b8e ldr r0, [r7] | r0 = *(r7);
0x00007b90 rsb.w r8, r3, 0 | r8 = r3 - ;
0x00007b94 blx 0x219c | fcn_0000219c ();
0x00007b98 str r4, [r7] | *(r7) = r4;
0x00007b9a b 0x7af4 | goto label_1;
| label_4:
0x00007b9c mvn r8, 1 | r8 = ~1;
0x00007ba0 b 0x7afa | goto label_2;
| label_5:
0x00007ba2 ldr r3, [pc, 0x24] |
0x00007ba4 movw r2, 0xad7 | r2 = 0xad7;
0x00007ba8 ldr r1, [pc, 0x20] |
0x00007baa ldr r0, [pc, 0x24] |
0x00007bac add r3, pc | r3 = 0xf77a;
0x00007bae add r1, pc | r1 = 0xf77e;
0x00007bb0 add r0, pc | r0 = 0xf786;
0x00007bb2 blx 0x246c | fcn_0000246c ();
| label_8:
0x00007bb6 blx 0x2108 | fcn_00002108 ();
0x00007bba nop |
0x00007bbc bics r6, r0 | __asm ("bics r6, r0");
0x00007bbe movs r1, r0 | r1 = r0;
0x00007bc0 lsls r4, r4, 6 | r4 <<= 6;
0x00007bc2 movs r0, r0 |
0x00007bc4 muls r2, r1, r2 | r2 = r1 * r2;
0x00007bc6 movs r1, r0 | r1 = r0;
0x00007bc8 adds r5, 0xa0 | r5 += 0xa0;
0x00007bca movs r0, r0 |
0x00007bcc adds r4, 0x46 | r4 += 0x46;
0x00007bce movs r0, r0 |
0x00007bd0 adds r2, 0x1c | r2 += 0x1c;
0x00007bd2 movs r0, r0 |
0x00007bd4 ldr r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x00007bd6 ldr r0, [r0, 0x18] | r0 = *((r0 + 0x18));
0x00007bd8 b.w 0x2390 | 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/libkmod.so.2.3.7 @ 0x6600 */
| #include <stdint.h>
|
; (fcn) sym.kmod_module_get_options () | void kmod_module_get_options (int16_t arg_0h, uint32_t arg1) {
| r0 = arg1;
0x00006600 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00006604 mov r5, r0 | r5 = r0;
0x00006606 cmp r0, 0 |
| if (arg_0h == ) {
0x00006608 beq 0x66aa | goto label_2;
| }
0x0000660a ldrb.w r6, [r0, 0x30] | r6 = *(arg_0hx30);
0x0000660e ubfx r6, r6, 1, 1 | r6 = (r6 >> 1) & ((1 << 1) - 1);
| if (r6 != 0) {
0x00006612 cbz r6, 0x661e |
0x00006614 ldr.w sb, [r0, 0x14] | sb = *(arg_0hx14);
| label_1:
0x00006618 mov r0, sb | r0 = sb;
0x0000661a pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0000661e ldr r0, [r0] | r0 = *(r0);
0x00006620 mov sb, r6 | sb = r6;
0x00006622 bl 0x31dc | fcn_000031dc (r0);
0x00006626 ldr r4, [r0, 0xc] | r4 = *((r0 + 0xc));
0x00006628 mov r8, r0 | r8 = r0;
| do {
| if (r4 == 0) {
0x0000662a cbz r4, 0x6690 | goto label_3;
| }
0x0000662c mov r0, r4 | r0 = r4;
0x0000662e bl 0x3bfc | fcn_00003bfc (r0);
0x00006632 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x00006634 mov r7, r0 | r7 = r0;
0x00006636 blx 0x201c | fcn_0000201c ();
0x0000663a ldr r1, [r5, 0x20] | r1 = *((r5 + 0x20));
| if (r0 != 0) {
0x0000663c cbz r0, 0x6648 |
| if (r1 == 0) {
0x0000663e cbz r1, 0x6686 | goto label_4;
| }
0x00006640 mov r0, r7 | r0 = r7;
0x00006642 blx 0x201c | r0 = fcn_0000201c ();
| if (r0 != 0) {
0x00006646 cbnz r0, 0x6686 | goto label_4;
| }
| }
0x00006648 mov r0, r4 | r0 = r4;
0x0000664a bl 0x391c | r0 = fcn_0000391c (r0);
0x0000664e mov r7, r0 | r7 = r0;
0x00006650 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00006654 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00006656 cbz r0, 0x6686 |
0x00006658 adds r1, r6, 2 | r1 = r6 + 2;
0x0000665a add r1, r0 | r1 += r0;
0x0000665c mov r0, sb | r0 = sb;
0x0000665e blx 0x2138 | r0 = fcn_00002138 ();
0x00006662 mov fp, r0 |
| if (r0 == 0) {
0x00006664 cbz r0, 0x66ae | goto label_5;
| }
| if (r6 == 0) {
0x00006666 cbz r6, 0x66a6 | goto label_6;
| }
0x00006668 mov.w r3, 0x20 | r3 = 0x20;
0x0000666c strb r3, [r0, r6] | *((r0 + r6)) = r3;
0x0000666e adds r6, 1 | r6++;
0x00006670 add r0, r6 | r0 += r6;
0x00006672 add r6, sl | r6 += sl;
| label_0:
0x00006674 mov r2, sl | r2 = sl;
0x00006676 mov r1, r7 | r1 = r7;
0x00006678 mov sb, fp | sb = fp;
0x0000667a blx 0x20c0 | mmap64 ()
0x0000667e mov.w r3, 0 | r3 = 0;
0x00006682 strb.w r3, [fp, r6] | *((fp + r6)) = r3;
| }
| label_4:
0x00006686 ldr r4, [r4] | r4 = *(r4);
0x00006688 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0000668c cmp r4, r3 |
0x0000668e bne 0x662a |
| } while (r4 != r3);
| label_3:
0x00006690 ldrb.w r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00006694 mov r0, sb | r0 = sb;
0x00006696 str.w sb, [r5, 0x14] | __asm ("str.w sb, [r5, 0x14]");
0x0000669a orr r3, r3, 2 | r3 |= 2;
0x0000669e strb.w r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x000066a2 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x000066a6 mov r6, sl | r6 = sl;
0x000066a8 b 0x6674 | goto label_0;
| label_2:
0x000066aa mov sb, r0 | sb = r0;
0x000066ac b 0x6618 | goto label_1;
| label_5:
0x000066ae mov r0, sb | r0 = sb;
0x000066b0 mov sb, fp | sb = fp;
0x000066b2 blx 0x20a4 | fcn_000020a4 ();
0x000066b6 b 0x6618 | 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/libkmod.so.2.3.7 @ 0x742c */
| #include <stdint.h>
|
; (fcn) sym.kmod_module_get_sections () | void kmod_module_get_sections (uint32_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_10h;
| int16_t var_1000h_2;
| r0 = arg1;
0x0000742c ldr r2, [pc, 0x134] |
0x0000742e ldr r3, [pc, 0x138] | r3 = *(0x756a);
0x00007430 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00007434 sub.w sp, sp, 0x1000 |
0x00007438 add r2, pc | r2 = 0xe9a0;
0x0000743a sub sp, 0x14 |
0x0000743c add.w r1, sp, 0x1000 | r1 += var_1000h_2;
0x00007440 mov r5, r0 | r5 = r0;
0x00007442 ldr r3, [r2, r3] |
0x00007444 adds r1, 0xc | r1 += 0xc;
0x00007446 ldr r3, [r3] | r3 = *(0xe9a0);
0x00007448 str r3, [r1] | *(r1) = r3;
0x0000744a mov.w r3, 0 | r3 = 0;
0x0000744e cmp r0, 0 |
| if (var_0h == ) {
0x00007450 beq 0x7512 | goto label_0;
| }
0x00007452 ldr r1, [pc, 0x118] |
0x00007454 add.w r8, sp, 0x10 | r8 += var_10h;
0x00007458 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0000745a mov.w r3, 0x1000 | r3 = 0x1000;
0x0000745e sub.w r4, r8, 4 | r4 = r8 - 4;
0x00007462 add r1, pc | r1 = 0xe9d4;
0x00007464 mov r0, r4 | r0 = r4;
0x00007466 str r2, [sp, 4] | var_4h = r2;
0x00007468 movs r2, 1 | r2 = 1;
0x0000746a str r1, [sp] | *(sp) = r1;
0x0000746c mov r1, r3 | r1 = r3;
0x0000746e blx 0x2460 | fcn_00002460 ();
0x00007472 mov r0, r4 | r0 = r4;
0x00007474 blx 0x21b4 | r0 = fcn_000021b4 ();
0x00007478 mov r6, r0 | r6 = r0;
0x0000747a cmp r0, 0 |
| if (r0 == 0) {
0x0000747c beq 0x754e | goto label_2;
| }
0x0000747e blx 0x23f4 | r0 = fcn_000023f4 ();
0x00007482 mov r7, r0 | r7 = r0;
0x00007484 mov r0, r6 | r0 = r6;
0x00007486 blx 0x23dc | r0 = fcn_000023dc ();
0x0000748a cmp r0, 0 |
| if (r0 == 0) {
0x0000748c beq 0x755c | goto label_3;
| }
0x0000748e movs r5, 0 | r5 = 0;
0x00007490 sub.w sb, r8, 8 | sb = r8 - 8;
| do {
0x00007494 ldrb r3, [r0, 0x13] | r3 = *((r0 + 0x13));
0x00007496 cmp r3, 0x2e |
| if (r3 == 0x2e) {
0x00007498 bne 0x74a4 |
0x0000749a ldrb r3, [r0, 0x14] | r3 = *((r0 + 0x14));
| if (r3 == 0) {
0x0000749c cbz r3, 0x7502 | goto label_4;
| }
0x0000749e ldrh r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x000074a0 cmp r3, 0x2e |
| if (r3 == 0x2e) {
0x000074a2 beq 0x7502 | goto label_4;
| }
| }
0x000074a4 add.w r4, r0, 0x13 | r4 = r0 + 0x13;
0x000074a8 mov.w r2, 0x80000 | r2 = 0x80000;
0x000074ac mov r1, r4 | r1 = r4;
0x000074ae mov r0, r7 | r0 = r7;
0x000074b0 blx 0x22cc | r0 = fcn_000022cc ();
0x000074b4 subs.w sl, r0, 0 | sl = r0 - 0;
| if (sl < r0) {
0x000074b8 blt 0x753e | goto label_5;
| }
0x000074ba movs r2, 0x10 | r2 = 0x10;
0x000074bc mov r1, sb | r1 = sb;
0x000074be bl 0xa7ac | r0 = fcn_0000a7ac (r0, r1, r2);
0x000074c2 mov fp, r0 |
0x000074c4 mov r0, sl | r0 = sl;
0x000074c6 blx 0x2448 | fcn_00002448 ();
0x000074ca cmp.w fp, 0 |
| if (fp < 0) {
0x000074ce blt 0x753e | goto label_5;
| }
0x000074d0 mov r0, r4 | r0 = r4;
0x000074d2 blx 0x22a8 | r0 = fcn_000022a8 ();
0x000074d6 mov r2, r0 | r2 = r0;
0x000074d8 adds r0, 5 | r0 += 5;
0x000074da add.w sl, r2, 1 | sl = r2 + 1;
0x000074de blx 0x21fc | r0 = fcn_000021fc ();
0x000074e2 mov fp, r0 |
| if (r0 == 0) {
0x000074e4 cbz r0, 0x753e | goto label_5;
| }
0x000074e6 ldr r3, [r8, -0x8] | r3 = *((r8 - 0x8));
0x000074ea mov r1, r4 | r1 = r4;
0x000074ec mov r2, sl | r2 = sl;
0x000074ee str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x000074f2 blx 0x20c0 | mmap64 ()
0x000074f6 mov r1, fp | r1 = fp;
0x000074f8 mov r0, r5 | r0 = r5;
0x000074fa bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
| if (r0 == 0) {
0x000074fe cbz r0, 0x7538 | goto label_6;
| }
0x00007500 mov r5, r0 | r5 = r0;
| label_4:
0x00007502 mov r0, r6 | r0 = r6;
0x00007504 blx 0x23dc | r0 = fcn_000023dc ();
0x00007508 cmp r0, 0 |
0x0000750a bne 0x7494 |
| } while (r0 != 0);
| label_1:
0x0000750c mov r0, r6 | r0 = r6;
0x0000750e blx 0x2454 | fcn_00002454 ();
| do {
| label_0:
0x00007512 ldr r2, [pc, 0x5c] |
0x00007514 add.w r1, sp, 0x1000 | r1 += var_1000h_2;
0x00007518 ldr r3, [pc, 0x4c] | r3 = *(0x7568);
0x0000751a adds r1, 0xc | r1 += 0xc;
0x0000751c add r2, pc | r2 = 0xea92;
0x0000751e ldr r3, [r2, r3] | r3 = *(0xea92);
0x00007520 ldr r2, [r3] | r2 = *(0xea92);
0x00007522 ldr r3, [r1] | r3 = *(r1);
0x00007524 eors r2, r3 | r2 ^= r3;
0x00007526 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000752a bne 0x7560 | goto label_7;
| }
0x0000752c mov r0, r5 | r0 = r5;
0x0000752e add.w sp, sp, 0x1000 |
0x00007532 add sp, 0x14 |
0x00007534 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00007538 mov r0, fp | r0 = fp;
0x0000753a blx 0x20a4 | fcn_000020a4 ();
| label_5:
0x0000753e mov r0, r6 | r0 = r6;
0x00007540 blx 0x2454 | fcn_00002454 ();
0x00007544 mov r0, r5 | r0 = r5;
0x00007546 movs r5, 0 | r5 = 0;
0x00007548 blx 0x2088 | fcn_00002088 ();
0x0000754c b 0x7512 |
| } while (1);
| label_2:
0x0000754e blx 0x22f4 | r0 = gzerror ();
0x00007552 ldr r0, [r0] | r0 = *(r0);
0x00007554 mov r5, r6 | r5 = r6;
0x00007556 blx 0x2208 | fcn_00002208 ();
0x0000755a b 0x7512 | goto label_0;
| label_3:
0x0000755c mov r5, r0 | r5 = r0;
0x0000755e b 0x750c | goto label_1;
| label_7:
0x00007560 blx 0x2108 | fcn_00002108 ();
0x00007564 ldr r2, [pc, 0x40] | r2 = kmod_module_info_get_key;
0x00007566 movs r1, r0 | r1 = r0;
0x00007568 lsls r4, r4, 6 | r4 <<= 6;
0x0000756a movs r0, r0 |
0x0000756c subs r4, 0x92 | r4 -= 0x92;
0x0000756e movs r0, r0 |
0x00007570 ldr r1, [pc, 0xb0] | r1 = *(0x7624);
0x00007572 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/libkmod.so.2.3.7 @ 0x7960 */
| #include <stdint.h>
|
; (fcn) sym.kmod_module_get_symbols () | void kmod_module_get_symbols (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00007960 stmdbhs r0, {r2, r3, r4, r5, sb, fp, lr} | __asm ("stmdbhs r0, {r2, r3, r4, r5, sb, fp, lr}");
0x00007964 it ne |
| if (? != ?) {
0x00007966 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00007968 ldr r3, [pc, 0xec] |
0x0000796a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000796e sub sp, 0xc |
0x00007970 add r2, pc | r2 += pc;
0x00007972 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00007974 ldr r3, [r3] | r3 = *(0x7a58);
0x00007976 str r3, [sp, 4] | var_4h = r3;
0x00007978 mov.w r3, 0 | r3 = 0;
| if (? == ?) {
0x0000797c beq 0x7a36 | goto label_3;
| }
0x0000797e ldr r6, [r1] | r6 = *(r1);
0x00007980 mov r7, r1 | r7 = r1;
0x00007982 cmp r6, 0 |
| if (r6 != 0) {
0x00007984 bne 0x7a3c | goto label_4;
| }
0x00007986 bl 0x6420 | r0 = fcn_00006420 (r0);
0x0000798a cmp r0, 0 |
| if (r0 == 0) {
0x0000798c beq 0x7a16 | goto label_5;
| }
0x0000798e mov r1, sp | r1 = sp;
0x00007990 bl 0x8cd4 | r0 = fcn_00008cd4 (r0, r1, r2, r3);
0x00007994 subs.w r8, r0, 0 | r8 = r0 - 0;
| if (r8 < r0) {
0x00007998 blt 0x79a2 | goto label_2;
| }
| if (r8 != r0) {
0x0000799a bne 0x79c6 | goto label_6;
| }
| do {
| label_1:
0x0000799c ldr r0, [sp] | r0 = *(sp);
0x0000799e blx 0x20a4 | fcn_000020a4 ();
| label_2:
0x000079a2 ldr r2, [pc, 0xb8] |
0x000079a4 ldr r3, [pc, 0xb0] | r3 = *(0x7a58);
0x000079a6 add r2, pc | r2 = 0xf408;
0x000079a8 ldr r3, [r2, r3] | r3 = *(0xf408);
0x000079aa ldr r2, [r3] | r2 = *(0xf408);
0x000079ac ldr r3, [sp, 4] | r3 = var_4h;
0x000079ae eors r2, r3 | r2 ^= r3;
0x000079b0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000079b4 bne 0x7a50 | goto label_7;
| }
0x000079b6 mov r0, r8 | r0 = r8;
0x000079b8 add sp, 0xc |
0x000079ba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_0:
0x000079be adds r6, 1 | r6++;
0x000079c0 str r0, [r7] | *(r7) = r0;
0x000079c2 cmp r8, r6 |
0x000079c4 beq 0x799c |
| } while (r8 == r6);
| label_6:
0x000079c6 ldr r3, [sp] | r3 = *(sp);
0x000079c8 add.w r3, r3, r6, lsl 4 | r3 += (r6 << 4);
0x000079cc ldr.w sb, [r3, 0xc] | sb = *((r3 + 0xc));
0x000079d0 ldrd sl, fp, [r3] | __asm ("ldrd sl, fp, [r3]");
0x000079d4 mov r0, sb | r0 = sb;
0x000079d6 blx 0x22a8 | r0 = fcn_000022a8 ();
0x000079da mov r2, r0 | r2 = r0;
0x000079dc adds r0, 9 | r0 += 9;
0x000079de adds r4, r2, 1 | r4 = r2 + 1;
0x000079e0 blx 0x21fc | r0 = fcn_000021fc ();
0x000079e4 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000079e6 cbz r0, 0x7a22 | goto label_8;
| }
0x000079e8 mov r2, r4 | r2 = r4;
0x000079ea mov r1, sb | r1 = sb;
0x000079ec strd sl, fp, [r0], 8 | __asm ("strd sl, fp, [r0], 8");
0x000079f0 blx 0x20c0 | mmap64 ()
0x000079f4 ldr r0, [r7] | r0 = *(r7);
0x000079f6 mov r1, r5 | r1 = r5;
0x000079f8 bl 0x37c0 | fcn_000037c0 (r0, r1);
0x000079fa cdp2 p6, 0xe, c4, c2, c4, 0 | __asm ("cdp2 p6, 0xe, c4, c2, c4, 0");
0x000079fe cmp r0, 0 |
| if (r0 != 0) {
0x00007a00 bne 0x79be | goto label_0;
| }
0x00007a02 mov r0, r5 | r0 = r5;
0x00007a04 mvn r8, 0xb | r8 = ~0xb;
0x00007a08 blx 0x20a4 | fcn_000020a4 ();
0x00007a0c ldr r0, [r7] | r0 = *(r7);
0x00007a0e blx 0x2348 | memchr (r0, r1, r2);
0x00007a12 str r4, [r7] | *(r7) = r4;
0x00007a14 b 0x799c | goto label_1;
| label_5:
0x00007a16 blx 0x22f4 | r0 = gzerror ();
0x00007a1a ldr r3, [r0] | r3 = *(r0);
0x00007a1c rsb.w r8, r3, 0 | r8 = r3 - ;
0x00007a20 b 0x79a2 | goto label_2;
| label_8:
0x00007a22 blx 0x22f4 | r0 = gzerror ();
0x00007a26 ldr r3, [r0] | r3 = *(r0);
0x00007a28 ldr r0, [r7] | r0 = *(r7);
0x00007a2a rsb.w r8, r3, 0 | r8 = r3 - ;
0x00007a2e blx 0x2348 | memchr (r0, r1, r2);
0x00007a32 str r5, [r7] | *(r7) = r5;
0x00007a34 b 0x799c | goto label_1;
| label_3:
0x00007a36 mvn r8, 1 | r8 = ~1;
0x00007a3a b 0x79a2 | goto label_2;
| label_4:
0x00007a3c ldr r3, [pc, 0x20] |
0x00007a3e movw r2, 0xa48 | r2 = 0xa48;
0x00007a42 ldr r1, [pc, 0x20] |
0x00007a44 ldr r0, [pc, 0x20] |
0x00007a46 add r3, pc | r3 = 0xf4aa;
0x00007a48 add r1, pc | r1 = 0xf4b2;
0x00007a4a add r0, pc | r0 = 0xf4b6;
0x00007a4c blx 0x246c | fcn_0000246c ();
| label_7:
0x00007a50 blx 0x2108 | fcn_00002108 ();
0x00007a54 add r8, fp | r8 += fp;
0x00007a56 movs r1, r0 | r1 = r0;
0x00007a58 lsls r4, r4, 6 | r4 <<= 6;
0x00007a5a movs r0, r0 |
0x00007a5c add sl, r4 | sl += r4;
0x00007a5e movs r1, r0 | r1 = r0;
0x00007a60 adds r7, 0x2a | r7 += 0x2a;
0x00007a62 movs r0, r0 |
0x00007a64 adds r5, 0xac | r5 += 0xac;
0x00007a66 movs r0, r0 |
0x00007a68 adds r3, 0x82 | r3 += 0x82;
0x00007a6a 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/libkmod.so.2.3.7 @ 0x7818 */
| #include <stdint.h>
|
; (fcn) sym.kmod_module_get_versions () | void kmod_module_get_versions (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00007818 stmdbhs r0, {r2, r3, r4, r5, sb, fp, lr} | __asm ("stmdbhs r0, {r2, r3, r4, r5, sb, fp, lr}");
0x0000781c it ne |
| if (? != ?) {
0x0000781e cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00007820 ldr r3, [pc, 0xec] |
0x00007822 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00007826 sub sp, 0xc |
0x00007828 add r2, pc | r2 += pc;
0x0000782a ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000782c ldr r3, [r3] | r3 = *(0x7910);
0x0000782e str r3, [sp, 4] | var_4h = r3;
0x00007830 mov.w r3, 0 | r3 = 0;
| if (? == ?) {
0x00007834 beq 0x78ee | goto label_3;
| }
0x00007836 ldr r6, [r1] | r6 = *(r1);
0x00007838 mov r7, r1 | r7 = r1;
0x0000783a cmp r6, 0 |
| if (r6 != 0) {
0x0000783c bne 0x78f4 | goto label_4;
| }
0x0000783e bl 0x6420 | r0 = fcn_00006420 (r0);
0x00007842 cmp r0, 0 |
| if (r0 == 0) {
0x00007844 beq 0x78ce | goto label_5;
| }
0x00007846 mov r1, sp | r1 = sp;
0x00007848 bl 0x8744 | r0 = fcn_00008744 (r0, r1, r2);
0x0000784c subs.w r8, r0, 0 | r8 = r0 - 0;
| if (r8 < r0) {
0x00007850 blt 0x785a | goto label_2;
| }
| if (r8 != r0) {
0x00007852 bne 0x787e | goto label_6;
| }
| do {
| label_1:
0x00007854 ldr r0, [sp] | r0 = *(sp);
0x00007856 blx 0x20a4 | fcn_000020a4 ();
| label_2:
0x0000785a ldr r2, [pc, 0xb8] |
0x0000785c ldr r3, [pc, 0xb0] | r3 = *(0x7910);
0x0000785e add r2, pc | r2 = 0xf178;
0x00007860 ldr r3, [r2, r3] | r3 = *(0xf178);
0x00007862 ldr r2, [r3] | r2 = *(0xf178);
0x00007864 ldr r3, [sp, 4] | r3 = var_4h;
0x00007866 eors r2, r3 | r2 ^= r3;
0x00007868 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000786c bne 0x7908 | goto label_7;
| }
0x0000786e mov r0, r8 | r0 = r8;
0x00007870 add sp, 0xc |
0x00007872 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_0:
0x00007876 adds r6, 1 | r6++;
0x00007878 str r0, [r7] | *(r7) = r0;
0x0000787a cmp r8, r6 |
0x0000787c beq 0x7854 |
| } while (r8 == r6);
| label_6:
0x0000787e ldr r3, [sp] | r3 = *(sp);
0x00007880 add.w r3, r3, r6, lsl 4 | r3 += (r6 << 4);
0x00007884 ldr.w sb, [r3, 0xc] | sb = *((r3 + 0xc));
0x00007888 ldrd sl, fp, [r3] | __asm ("ldrd sl, fp, [r3]");
0x0000788c mov r0, sb | r0 = sb;
0x0000788e blx 0x22a8 | r0 = fcn_000022a8 ();
0x00007892 mov r2, r0 | r2 = r0;
0x00007894 adds r0, 9 | r0 += 9;
0x00007896 adds r4, r2, 1 | r4 = r2 + 1;
0x00007898 blx 0x21fc | r0 = fcn_000021fc ();
0x0000789c mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0000789e cbz r0, 0x78da | goto label_8;
| }
0x000078a0 mov r2, r4 | r2 = r4;
0x000078a2 mov r1, sb | r1 = sb;
0x000078a4 strd sl, fp, [r0], 8 | __asm ("strd sl, fp, [r0], 8");
0x000078a8 blx 0x20c0 | mmap64 ()
0x000078ac ldr r0, [r7] | r0 = *(r7);
0x000078ae mov r1, r5 | r1 = r5;
0x000078b0 bl 0x37c0 | r0 = fcn_000037c0 (r0, r1);
0x000078b4 mov r4, r0 | r4 = r0;
0x000078b6 cmp r0, 0 |
| if (r0 != 0) {
0x000078b8 bne 0x7876 | goto label_0;
| }
0x000078ba mov r0, r5 | r0 = r5;
0x000078bc mvn r8, 0xb | r8 = ~0xb;
0x000078c0 blx 0x20a4 | fcn_000020a4 ();
0x000078c4 ldr r0, [r7] | r0 = *(r7);
0x000078c6 blx 0x2278 | fcn_00002278 ();
0x000078ca str r4, [r7] | *(r7) = r4;
0x000078cc b 0x7854 | goto label_1;
| label_5:
0x000078ce blx 0x22f4 | r0 = gzerror ();
0x000078d2 ldr r3, [r0] | r3 = *(r0);
0x000078d4 rsb.w r8, r3, 0 | r8 = r3 - ;
0x000078d8 b 0x785a | goto label_2;
| label_8:
0x000078da blx 0x22f4 | r0 = gzerror ();
0x000078de ldr r3, [r0] | r3 = *(r0);
0x000078e0 ldr r0, [r7] | r0 = *(r7);
0x000078e2 rsb.w r8, r3, 0 | r8 = r3 - ;
0x000078e6 blx 0x2278 | fcn_00002278 ();
0x000078ea str r5, [r7] | *(r7) = r5;
0x000078ec b 0x7854 | goto label_1;
| label_3:
0x000078ee mvn r8, 1 | r8 = ~1;
0x000078f2 b 0x785a | goto label_2;
| label_4:
0x000078f4 ldr r3, [pc, 0x20] |
0x000078f6 movw r2, 0x9bc | r2 = 0x9bc;
0x000078fa ldr r1, [pc, 0x20] |
0x000078fc ldr r0, [pc, 0x20] |
0x000078fe add r3, pc | r3 = 0xf21a;
0x00007900 add r1, pc | r1 = 0xf222;
0x00007902 add r0, pc | r0 = 0xf226;
0x00007904 blx 0x246c | fcn_0000246c ();
| label_7:
0x00007908 blx 0x2108 | fcn_00002108 ();
0x0000790c mov r0, r4 | r0 = r4;
0x0000790e movs r1, r0 | r1 = r0;
0x00007910 lsls r4, r4, 6 | r4 <<= 6;
0x00007912 movs r0, r0 |
0x00007914 cmp sl, sp |
0x00007916 movs r1, r0 | r1 = r0;
0x00007918 subs r0, 0x8a | r0 -= 0x8a;
0x0000791a movs r0, r0 |
0x0000791c adds r6, 0xf4 | r6 += 0xf4;
0x0000791e movs r0, r0 |
0x00007920 adds r4, 0xca | r4 += 0xca;
0x00007922 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/libkmod.so.2.3.7 @ 0x6be8 */
| #include <stdint.h>
|
; (fcn) sym.kmod_module_probe_insert_module () | void kmod_module_probe_insert_module (int16_t arg_38h, int16_t arg_78h, int16_t arg_7ch, 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_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;
| int32_t var_30h_2;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00006be8 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00006bec sub sp, 0x54 |
0x00006bee str r2, [sp, 0x1c] | var_1ch = r2;
0x00006bf0 ldr.w r2, [pc, 0x488] | r2 = *(0x0000707c);
0x00006bf4 str r3, [sp, 0x28] | var_28h = r3;
0x00006bf6 ldr.w r3, [pc, 0x488] |
0x00006bfa add r2, pc | r2 += pc;
0x00006bfc str r1, [sp, 8] | var_8h = r1;
0x00006bfe ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00006c00 ldr r3, [r3] | r3 = *(0x7082);
0x00006c02 str r3, [sp, 0x4c] | var_4ch = r3;
0x00006c04 mov.w r3, 0 | r3 = 0;
0x00006c08 movs r3, 0 | r3 = 0;
0x00006c0a str r3, [sp, 0x44] | var_44h = r3;
0x00006c0c ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x00006c0e str r0, [sp, 0xc] | var_ch = r0;
0x00006c10 str r3, [sp, 0x2c] | var_2ch = r3;
0x00006c12 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x00006c14 str r3, [sp, 0x18] | var_18h = r3;
0x00006c16 cmp r0, 0 |
| if (r0 == 0) {
0x00006c18 beq.w 0x700a | goto label_22;
| }
0x00006c1c ands r3, r1, 8 | r3 = r1 & 8;
0x00006c20 str r3, [sp, 0x24] | var_24h = r3;
| if (r3 == r1) {
0x00006c22 beq.w 0x6f6e | goto label_23;
| }
| label_17:
0x00006c26 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006c28 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00006c2a cmp r3, 0 |
| if (r3 == 0) {
0x00006c2c beq.w 0x6d60 | goto label_24;
| }
0x00006c30 ldr r3, [sp, 8] | r3 = var_8h;
0x00006c32 ands r5, r3, 0x40000 | r5 = r3 & 0x40000;
| if (r5 == r3) {
0x00006c36 beq.w 0x6d60 | goto label_24;
| }
| label_0:
0x00006c3a ldr r0, [sp, 0xc] | r0 = var_ch;
0x00006c3c bl 0x5964 | r0 = fcn_00005964 (r0);
0x00006c40 cmp r0, 0 |
| if (r0 != 0) {
0x00006c42 bne 0x6d42 | goto label_2;
| }
| label_1:
0x00006c44 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00006c46 movs r1, 0 | r1 = 0;
0x00006c48 ldr r0, [r4] | r0 = *(r4);
0x00006c4a bl 0x2de0 | fcn_00002de0 (r0, r1, r2, r3);
0x00006c4e ldr r0, [r4] | r0 = *(r4);
0x00006c50 movs r1, 0 | r1 = 0;
0x00006c52 bl 0x2e44 | fcn_00002e44 (r0, r1);
0x00006c56 ldrb.w r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00006c5a lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 >= r3) {
0x00006c5c bpl.w 0x6d74 | goto label_25;
| }
0x00006c60 movs r3, 0 | r3 = 0;
0x00006c62 mov r5, r3 | r5 = r3;
0x00006c64 str r3, [sp, 0x20] | var_20h = r3;
0x00006c66 ldr r3, [sp, 8] | r3 = var_8h;
0x00006c68 lsls r2, r3, 0xf | r2 = r3 << 0xf;
| if (r2 < r3) {
0x00006c6a bmi.w 0x6f94 | goto label_26;
| }
| label_18:
0x00006c6e ldr.w r3, [pc, 0x414] |
0x00006c72 add r3, pc | r3 = 0xdcfc;
0x00006c74 str r3, [sp, 0x3c] | var_3ch = r3;
0x00006c76 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00006c78 str r3, [sp, 4] | var_4h = r3;
| do {
0x00006c7a ldr r3, [sp, 4] | r3 = var_4h;
0x00006c7c cmp r3, 0 |
| if (r3 == 0) {
0x00006c7e beq 0x6d3c | goto label_5;
| }
0x00006c80 ldr r3, [sp, 4] | r3 = var_4h;
0x00006c82 ldr.w fp, [r3, 8] | fp = *((r3 + 8));
0x00006c86 mov r0, fp | r0 = fp;
0x00006c88 blx 0x23ac | r0 = fcn_000023ac ();
0x00006c8c mov r4, r0 | r4 = r0;
0x00006c8e mov r0, fp | r0 = fp;
0x00006c90 blx 0x204c | fcn_0000204c ();
0x00006c94 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00006c96 mov r7, r0 | r7 = r0;
0x00006c98 cmp r3, 0 |
| if (r3 == 0) {
0x00006c9a beq.w 0x6e0a | goto label_27;
| }
| label_7:
0x00006c9e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006ca0 cmp r3, fp |
| if (r3 == fp) {
0x00006ca2 beq.w 0x6e1e | goto label_28;
| }
0x00006ca6 cmp r4, 0 |
| if (r4 == 0) {
0x00006ca8 beq.w 0x6e42 | goto label_29;
| }
0x00006cac mov r0, r4 | r0 = r4;
0x00006cae blx 0x22a8 | r0 = fcn_000022a8 ();
0x00006cb2 mov sb, r0 | sb = r0;
| label_10:
0x00006cb4 cmp.w sb, 0 |
| if (sb == 0) {
0x00006cb8 beq.w 0x6e42 | goto label_29;
| }
0x00006cbc add.w r0, sb, 2 | r0 = sb + 2;
0x00006cc0 mov.w r8, 0 | r8 = 0;
0x00006cc4 blx 0x21fc | fcn_000021fc ();
0x00006cc8 mov r6, r8 | r6 = r8;
0x00006cca mov sl, r0 | sl = r0;
| label_21:
0x00006ccc mov r1, r4 | r1 = r4;
0x00006cce mov r2, sb | r2 = sb;
0x00006cd0 mov r0, sl | r0 = sl;
0x00006cd2 blx 0x20c0 | mmap64 ()
0x00006cd6 movs r3, 0x20 | r3 = 0x20;
0x00006cd8 add.w r0, sb, 1 | r0 = sb + 1;
0x00006cdc adds r4, r0, r6 | r4 = r0 + r6;
0x00006cde strb.w r3, [sl, sb] | *((sl + sb)) = r3;
0x00006ce2 cmp.w r8, 0 |
| if (r8 != 0) {
0x00006ce6 bne.w 0x6dfe | goto label_30;
| }
| label_6:
0x00006cea mov.w r3, 0 | r3 = 0;
0x00006cee strb.w r3, [sl, r4] | *((sl + r4)) = r3;
0x00006cf2 cmp r7, 0 |
| if (r7 == 0) {
0x00006cf4 beq 0x6d92 | goto label_31;
| }
0x00006cf6 ldrb.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00006cfa lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 < r3) {
0x00006cfc bmi 0x6d92 | goto label_31;
| }
0x00006cfe ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00006d00 cbz r3, 0x6d14 |
0x00006d02 cmp.w sl, 0 |
| if (sl == 0) {
0x00006d06 beq.w 0x6ffe | goto label_32;
| }
0x00006d0a mov r2, sl | r2 = sl;
| label_12:
0x00006d0c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00006d0e movs r1, 1 | r1 = 1;
0x00006d10 mov r0, fp | r0 = fp;
0x00006d12 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_11:
0x00006d14 ldr r3, [sp, 8] | r3 = var_8h;
0x00006d16 ands r3, r3, 0x10 | r3 &= 0x10;
0x00006d1a mov r6, r3 | r6 = r3;
| if (r3 == r3) {
0x00006d1c beq.w 0x6e8c | goto label_33;
| }
| label_3:
0x00006d20 mov r0, sl | r0 = sl;
0x00006d22 blx 0x20a4 | fcn_000020a4 ();
0x00006d26 ldrb.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00006d2a lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00006d2c bmi 0x6d30 |
| label_4:
0x00006d2e movs r5, 0 | r5 = 0;
| }
| label_15:
0x00006d30 ldr r3, [sp, 4] | r3 = var_4h;
0x00006d32 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00006d34 ldr r3, [r3] | r3 = *(r3);
0x00006d36 cmp r3, r2 |
0x00006d38 str r3, [sp, 4] | var_4h = r3;
0x00006d3a bne 0x6c7a |
| } while (r3 != r2);
| label_5:
0x00006d3c ldr r0, [sp, 0x20] | r0 = var_20h;
0x00006d3e blx 0x2088 | fcn_00002088 ();
| label_2:
0x00006d42 ldr r2, [pc, 0x344] |
0x00006d44 ldr r3, [pc, 0x338] | r3 = *(0x7080);
0x00006d46 add r2, pc | r2 = 0xddd4;
0x00006d48 ldr r3, [r2, r3] | r3 = *(0xddd4);
0x00006d4a ldr r2, [r3] | r2 = *(0xddd4);
0x00006d4c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00006d4e eors r2, r3 | r2 ^= r3;
0x00006d50 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00006d54 bne.w 0x7076 | goto label_34;
| }
0x00006d58 mov r0, r5 | r0 = r5;
0x00006d5a add sp, 0x54 |
0x00006d5c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x00006d60 ldr r3, [sp, 8] | r3 = var_8h;
0x00006d62 ands r5, r3, 0x10000 | r5 = r3 & 0x10000;
| if (r5 != r3) {
0x00006d66 bne.w 0x6c3a | goto label_0;
| }
0x00006d6a ands r5, r3, 0x20000 | r5 = r3 & 0x20000;
| if (r5 != r3) {
0x00006d6e bne.w 0x6c3a | goto label_0;
| }
0x00006d72 b 0x6c44 | goto label_1;
| label_25:
0x00006d74 ldr r2, [sp, 8] | r2 = var_8h;
0x00006d76 add r3, sp, 0x44 | r3 += var_44h;
0x00006d78 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00006d7a movs r1, 1 | r1 = 1;
0x00006d7c ubfx r2, r2, 2, 1 | r2 = (r2 >> 2) & ((1 << 1) - 1);
0x00006d80 bl 0x6920 | r0 = fcn_00006920 (r0, r1, r2, r3);
0x00006d84 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 >= r0) {
0x00006d86 bge.w 0x6f88 | goto label_35;
| }
0x00006d8a ldr r0, [sp, 0x44] | r0 = var_44h;
0x00006d8c blx 0x2088 | fcn_00002088 ();
0x00006d90 b 0x6d42 | goto label_2;
| label_31:
0x00006d92 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00006d94 cbz r3, 0x6da8 |
0x00006d96 cmp.w sl, 0 |
| if (sl == 0) {
0x00006d9a beq.w 0x705c | goto label_36;
| }
0x00006d9e mov r2, sl | r2 = sl;
| label_14:
0x00006da0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00006da2 movs r1, 0 | r1 = 0;
0x00006da4 mov r0, fp | r0 = fp;
0x00006da6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_13:
0x00006da8 ldr r3, [sp, 8] | r3 = var_8h;
0x00006daa lsls r6, r3, 0x1b | r6 = r3 << 0x1b;
| if (r6 < r3) {
0x00006dac bmi 0x6d20 | goto label_3;
| }
0x00006dae mov r1, r3 | r1 = r3;
0x00006db0 mov r2, sl | r2 = sl;
0x00006db2 mov r0, fp | r0 = fp;
0x00006db4 blx 0x2484 | fcn_00002484 ();
0x00006db8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006dba mov r5, r0 | r5 = r0;
0x00006dbc cmp r3, fp |
0x00006dbe it eq |
| if (r3 == fp) {
0x00006dc0 cmneq r0, 0x11 | __asm ("cmneq r0, 0x11");
| }
0x00006dc4 ite eq |
| if (r3 != fp) {
0x00006dc6 moveq r4, 1 | r4 = 1;
| }
| if (r3 == fp) {
0x00006dc8 movne r4, 0 | r4 = 0;
| }
| label_16:
0x00006dca mov r0, sl | r0 = sl;
0x00006dcc blx 0x20a4 | fcn_000020a4 ();
0x00006dd0 cmp r4, 0 |
| if (r4 == 0) {
0x00006dd2 beq 0x6e72 | goto label_37;
| }
| label_8:
0x00006dd4 ldr r3, [sp, 8] | r3 = var_8h;
0x00006dd6 lsls r0, r3, 0x1a | r0 = r3 << 0x1a;
| if (r0 >= r3) {
0x00006dd8 bpl 0x6d2e | goto label_4;
| }
0x00006dda mvn r5, 0x10 | r5 = ~0x10;
0x00006dde b 0x6d3c | goto label_5;
| label_9:
0x00006de0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 == 0) {
0x00006de2 cbz r3, 0x6e42 | goto label_29;
| }
0x00006de4 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00006de6 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00006dea mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x00006dec cbz r0, 0x6e42 | goto label_29;
| }
0x00006dee adds r0, 2 | r0 += 2;
0x00006df0 blx 0x21fc | fcn_000021fc ();
0x00006df4 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00006df8 mov sl, r0 | sl = r0;
0x00006dfa mov r0, r4 | r0 = r4;
0x00006dfc mov r4, r6 | r4 = r6;
| label_30:
0x00006dfe mov r2, r6 | r2 = r6;
0x00006e00 mov r1, r8 | r1 = r8;
0x00006e02 add r0, sl | r0 += sl;
0x00006e04 blx 0x20c0 | mmap64 ()
0x00006e08 b 0x6cea | goto label_6;
| label_27:
0x00006e0a mov r0, fp | r0 = fp;
0x00006e0c blx 0x2004 | r0 = fcn_00002004 ();
0x00006e10 cmp r0, 1 |
| if (r0 > 1) {
0x00006e12 bhi.w 0x6c9e | goto label_7;
| }
0x00006e16 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006e18 cmp r3, fp |
| if (r3 == fp) {
0x00006e1a beq 0x6dd4 | goto label_8;
| }
0x00006e1c b 0x6d2e | goto label_4;
| label_28:
0x00006e1e cmp r4, 0 |
| if (r4 == 0) {
0x00006e20 beq 0x6de0 | goto label_9;
| }
0x00006e22 mov r0, r4 | r0 = r4;
0x00006e24 blx 0x22a8 | fcn_000022a8 ();
0x00006e28 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00006e2a mov sb, r0 | sb = r0;
0x00006e2c cmp r3, 0 |
| if (r3 == 0) {
0x00006e2e beq.w 0x6cb4 | goto label_10;
| }
0x00006e32 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00006e34 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00006e38 orrs.w r3, sb, r0 | r3 = sb | r0;
0x00006e3c mov r6, r0 | r6 = r0;
| if (r3 != sb) {
0x00006e3e bne.w 0x704a | goto label_38;
| }
| if (r7 == 0) {
| label_29:
0x00006e42 cbz r7, 0x6e60 | goto label_39;
| }
0x00006e44 ldrb.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00006e48 ubfx r3, r3, 1, 1 | r3 = (r3 >> 1) & ((1 << 1) - 1);
| if (r3 != 0) {
0x00006e4c cbnz r3, 0x6e60 | goto label_39;
| }
0x00006e4e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00006e50 mov sl, r2 | sl = r2;
0x00006e52 cmp r2, 0 |
| if (r2 == 0) {
0x00006e54 beq.w 0x6d14 | goto label_11;
| }
0x00006e58 ldr r2, [pc, 0x230] |
0x00006e5a mov sl, r3 | sl = r3;
0x00006e5c add r2, pc | r2 = 0xdeec;
0x00006e5e b 0x6d0c | goto label_12;
| label_39:
0x00006e60 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00006e62 mov sl, r3 | sl = r3;
0x00006e64 cmp r3, 0 |
| if (r3 == 0) {
0x00006e66 beq 0x6da8 | goto label_13;
| }
0x00006e68 ldr r2, [pc, 0x224] |
0x00006e6a mov.w sl, 0 | sl = 0;
0x00006e6e add r2, pc | r2 = 0xdf02;
0x00006e70 b 0x6da0 | goto label_14;
| label_37:
0x00006e72 cmn.w r5, 0x11 |
| if (r5 == 0x11) {
0x00006e76 beq.w 0x6d2e | goto label_4;
| }
0x00006e7a ldrb.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00006e7e lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 >= r3) {
0x00006e80 bpl.w 0x6d2e | goto label_4;
| }
0x00006e84 cmp r5, 0 |
| if (r5 >= 0) {
0x00006e86 bge.w 0x6d30 | goto label_15;
| }
0x00006e8a b 0x6d3c | goto label_5;
| label_33:
0x00006e8c mov r0, fp | r0 = fp;
0x00006e8e blx 0x204c | r0 = fcn_0000204c ();
0x00006e92 mov r4, r0 | r4 = r0;
0x00006e94 cmp r0, 0 |
| if (r0 == 0) {
0x00006e96 beq.w 0x7062 | goto label_40;
| }
0x00006e9a cmp.w sl, 0 |
| if (sl == 0) {
0x00006e9e beq.w 0x6fbe | goto label_41;
| }
0x00006ea2 mov r0, sl | r0 = sl;
0x00006ea4 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00006ea8 mov r6, r0 | r6 = r0;
0x00006eaa str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
| label_19:
0x00006eae mov r0, r4 | r0 = r4;
0x00006eb0 blx 0x22a8 | r0 = fcn_000022a8 ();
0x00006eb4 mov r7, r0 | r7 = r0;
0x00006eb6 mov r0, r4 | r0 = r4;
0x00006eb8 adds r1, r7, 1 | r1 = r7 + 1;
0x00006eba bl 0xa548 | fcn_0000a548 (r0, r1);
0x00006ebe ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006ec0 mov sb, r0 | sb = r0;
0x00006ec2 sub.w r3, r3, fp | r3 -= fp;
0x00006ec6 clz r3, r3 | r3 &= r3;
0x00006eca lsrs r3, r3, 5 | r3 >>= 5;
0x00006ecc str r3, [sp, 0x38] | var_38h = r3;
0x00006ece cmp r0, 0 |
| if (r0 == 0) {
0x00006ed0 beq.w 0x701a | goto label_42;
| }
0x00006ed4 sub.w r2, r6, 0xd | r2 = r6 - 0xd;
0x00006ed8 strd fp, sl, [sp, 0x30] | __asm ("strd fp, sl, [var_30h]");
0x00006edc str r2, [sp, 0x10] | var_10h = r2;
0x00006ede mov sl, r6 | sl = r6;
0x00006ee0 ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x00006ee4 b 0x6f36 |
| while (r0 != 0) {
0x00006ee6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00006ee8 sub.w r8, r7, 0xd | r8 = r7 - 0xd;
0x00006eec sub.w r6, r0, sb | r6 = r0 - sb;
0x00006ef0 add.w r5, r0, 0xd | r5 = r0 + 0xd;
0x00006ef4 sub.w r8, r8, r6 | r8 -= r6;
0x00006ef8 add r7, r3 | r7 += r3;
0x00006efa adds r0, r7, 1 | r0 = r7 + 1;
0x00006efc blx 0x21fc | r0 = fcn_000021fc ();
0x00006f00 mov r4, r0 | r4 = r0;
0x00006f02 cmp r0, 0 |
| if (r0 == 0) {
0x00006f04 beq.w 0x7010 | goto label_43;
| }
0x00006f08 mov r1, sb | r1 = sb;
0x00006f0a mov r2, r6 | r2 = r6;
0x00006f0c blx 0x20c0 | mmap64 ()
0x00006f10 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00006f12 mov r2, sl | r2 = sl;
0x00006f14 adds r0, r4, r6 | r0 = r4 + r6;
0x00006f16 blx 0x20c0 | mmap64 ()
0x00006f1a add.w r0, sl, r6 | r0 = sl + r6;
0x00006f1e mov r2, r8 | r2 = r8;
0x00006f20 mov r1, r5 | r1 = r5;
0x00006f22 add r0, r4 | r0 += r4;
0x00006f24 blx 0x20c0 | mmap64 ()
0x00006f28 mov r0, sb | r0 = sb;
0x00006f2a mov.w r3, 0 | r3 = 0;
0x00006f2e mov sb, r4 | sb = r4;
0x00006f30 strb r3, [r4, r7] | *((r4 + r7)) = r3;
0x00006f32 blx 0x20a4 | fcn_000020a4 ();
0x00006f36 mov r1, fp | r1 = fp;
0x00006f38 mov r0, sb | r0 = sb;
0x00006f3a blx 0x1fdc | r0 = strstr (r0, r1);
0x00006f3e cmp r0, 0 |
0x00006f40 bne 0x6ee6 |
| }
0x00006f42 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00006f44 ldrd fp, sl, [sp, 0x30] | __asm ("ldrd fp, sl, [var_30h]");
0x00006f48 cmp r3, 0 |
| if (r3 == 0) {
0x00006f4a beq 0x6fc6 | goto label_44;
| }
0x00006f4c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00006f4e mov r1, sb | r1 = sb;
0x00006f50 mov r0, fp | r0 = fp;
0x00006f52 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00006f54 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00006f56 cmn.w r0, 0x11 |
0x00006f5a ite ne |
| if (r0 == 0x11) {
0x00006f5c movne r4, 0 | r4 = 0;
| }
| if (r0 != 0x11) {
0x00006f5e moveq r4, 1 | r4 = 1;
| }
0x00006f60 mov r5, r0 | r5 = r0;
0x00006f62 ands r3, r4 | r3 &= r4;
0x00006f64 mov r4, r3 | r4 = r3;
| label_20:
0x00006f66 mov r0, sb | r0 = sb;
0x00006f68 blx 0x20a4 | fcn_000020a4 ();
0x00006f6c b 0x6dca | goto label_16;
| label_23:
0x00006f6e blx 0x2004 | r0 = fcn_00002004 ();
0x00006f72 cmp r0, 1 |
| if (r0 > 1) {
0x00006f74 bhi.w 0x6c26 | goto label_17;
| }
0x00006f78 ldr r3, [sp, 8] | r3 = var_8h;
0x00006f7a tst.w r3, 0x20 |
0x00006f7e ite ne |
| if ((r3 & 0x20) == 0) {
0x00006f80 mvnne r5, 0x10 | r5 = ~0x10;
| }
| if ((r3 & 0x20) == 0) {
0x00006f84 movs r5, 0 | r5 = 0;
| }
0x00006f86 b 0x6d42 | goto label_2;
| label_35:
0x00006f88 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00006f8a str r3, [sp, 0x20] | var_20h = r3;
0x00006f8c ldr r3, [sp, 8] | r3 = var_8h;
0x00006f8e lsls r2, r3, 0xf | r2 = r3 << 0xf;
| if (r2 >= r3) {
0x00006f90 bpl.w 0x6c6e | goto label_18;
| }
| label_26:
0x00006f94 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00006f96 movs r1, 1 | r1 = 1;
0x00006f98 ldr r4, [sp, 0x20] | r4 = var_20h;
0x00006f9a ldr r0, [r3] | r0 = *(r3);
0x00006f9c movs r3, 0 | r3 = 0;
0x00006f9e str r3, [sp, 0x48] | var_48h = r3;
0x00006fa0 mov r2, r4 | r2 = r4;
0x00006fa2 add r3, sp, 0x48 | r3 += var_48h;
0x00006fa4 blx 0x2148 | r0 = fcn_00002148 ();
0x00006fa8 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00006faa blt.w 0x6d42 | goto label_2;
| }
0x00006fae mov r0, r4 | r0 = r4;
0x00006fb0 blx 0x2088 | fcn_00002088 ();
0x00006fb4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00006fb6 str r3, [sp, 0x20] | var_20h = r3;
| if (r3 != 0) {
0x00006fb8 cbz r3, 0x7004 |
0x00006fba str r3, [sp, 0x44] | var_44h = r3;
0x00006fbc b 0x6c6e | goto label_18;
| label_41:
0x00006fbe ldr r3, [pc, 0xd4] |
0x00006fc0 add r3, pc | r3 = 0xe05a;
0x00006fc2 str r3, [sp, 0x14] | var_14h = r3;
0x00006fc4 b 0x6eae | goto label_19;
| label_44:
0x00006fc6 ldr r4, [pc, 0xd0] |
0x00006fc8 mov r0, fp | r0 = fp;
0x00006fca blx 0x2290 | fcn_00002290 ();
0x00006fce movs r2, 1 | r2 = 1;
0x00006fd0 mov r1, r0 | r1 = r0;
0x00006fd2 add r4, pc | r4 = 0xe070;
0x00006fd4 mov r0, r4 | r0 = r4;
0x00006fd6 blx 0x22c0 | fcn_000022c0 ();
0x00006fda mov r0, sb | r0 = sb;
0x00006fdc blx 0x2214 | r0 = fcn_00002214 ();
0x00006fe0 mov r5, r0 | r5 = r0;
0x00006fe2 mov r0, r4 | r0 = r4;
0x00006fe4 blx 0x2430 | fcn_00002430 ();
0x00006fe8 adds r2, r5, 1 | r2 = r5 + 1;
0x00006fea it eq |
| if (r2 != r5) {
0x00006fec moveq r0, sb | r0 = sb;
| }
| if (r2 == r5) {
0x00006fee beq 0x7030 | goto label_45;
| }
0x00006ff0 ubfx r5, r5, 8, 8 | r5 = (r5 >> 8) & ((1 << 8) - 1);
0x00006ff4 mov r0, sb | r0 = sb;
| if (r5 != 0) {
0x00006ff6 cbnz r5, 0x7030 | goto label_45;
| }
0x00006ff8 blx 0x20a4 | fcn_000020a4 ();
0x00006ffc b 0x6d20 | goto label_3;
| label_32:
0x00006ffe ldr r2, [pc, 0x9c] |
0x00007000 add r2, pc | r2 = 0xe0a2;
0x00007002 b 0x6d0c | goto label_12;
| }
0x00007004 mov.w r5, 0x10000 | r5 = 0x10000;
0x00007008 b 0x6d42 | goto label_2;
| label_22:
0x0000700a mvn r5, 1 | r5 = ~1;
0x0000700e b 0x6d42 | goto label_2;
| label_43:
0x00007010 ldrd fp, sl, [sp, 0x30] | __asm ("ldrd fp, sl, [var_30h]");
0x00007014 mvn r5, 0xb | r5 = ~0xb;
0x00007016 lsls r3, r1, 0x14 | r3 = r1 << 0x14;
0x00007018 b 0x6f66 | goto label_20;
| label_42:
0x0000701a mov r0, sl | r0 = sl;
0x0000701c blx 0x20a4 | fcn_000020a4 ();
0x00007020 ldrb.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00007024 lsls r7, r3, 0x1d | r7 = r3 << 0x1d;
| if (r7 >= r3) {
0x00007026 bpl.w 0x6d2e | goto label_4;
| }
0x0000702a mvn r5, 0xb | r5 = ~0xb;
0x0000702e b 0x6d3c | goto label_5;
| label_45:
0x00007030 blx 0x20a4 | fcn_000020a4 ();
0x00007034 mov r0, sl | r0 = sl;
0x00007036 blx 0x20a4 | fcn_000020a4 ();
0x0000703a ldrb.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x0000703e lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00007040 bpl.w 0x6d2e | goto label_4;
| }
0x00007044 mvn r5, 0x15 | r5 = ~0x15;
0x00007048 b 0x6d3c | goto label_5;
| label_38:
0x0000704a add.w r0, sb, r6 | r0 = sb + r6;
0x0000704e adds r0, 2 | r0 += 2;
0x00007050 blx 0x21fc | fcn_000021fc ();
0x00007054 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00007058 mov sl, r0 | sl = r0;
0x0000705a b 0x6ccc | goto label_21;
| label_36:
0x0000705c ldr r2, [pc, 0x40] |
0x0000705e add r2, pc | r2 = 0xe102;
0x00007060 b 0x6da0 | goto label_14;
| label_40:
0x00007062 ldr r3, [pc, 0x40] |
0x00007064 movw r2, 0x3f5 | r2 = 0x3f5;
0x00007068 ldr r1, [pc, 0x3c] |
0x0000706a ldr r0, [pc, 0x40] |
0x0000706c add r3, pc | r3 = 0xe116;
0x0000706e add r1, pc | r1 = 0xe11a;
0x00007070 add r0, pc | r0 = 0xe122;
0x00007072 blx 0x246c | fcn_0000246c ();
| label_34:
0x00007076 blx 0x2108 | fcn_00002108 ();
0x0000707a nop |
0x0000707c strh r6, [r1, r1] | *((r1 + r1)) = r6;
0x0000707e movs r1, r0 | r1 = r0;
0x00007080 lsls r4, r4, 6 | r4 <<= 6;
0x00007082 movs r0, r0 |
0x00007084 add r6, r2 | r6 += r2;
0x00007086 movs r0, r0 |
0x00007088 str r2, [r0, r4] | *((r0 + r4)) = r2;
0x0000708a movs r1, r0 | r1 = r0;
0x0000708c add ip, sb |
0x0000708e movs r0, r0 |
0x00007090 add sl, r7 | sl += r7;
0x00007092 movs r0, r0 |
0x00007094 muls r0, r5, r0 | r0 = r5 * r0;
0x00007096 movs r0, r0 |
0x00007098 lsrs r6, r0 | r6 >>= r0;
0x0000709a movs r0, r0 |
0x0000709c orrs r0, r5 | r0 |= r5;
0x0000709e movs r0, r0 |
0x000070a0 cmn r2, r1 |
0x000070a2 movs r0, r0 |
0x000070a4 adcs r4, r5 | __asm ("adcs r4, r5");
0x000070a6 movs r0, r0 |
0x000070a8 subs r7, 0x86 | r7 -= 0x86;
0x000070aa movs r0, r0 |
0x000070ac ands r0, r2 | r0 &= r2;
0x000070ae movs r0, r0 |
| }
[*] Function mmap used 45 times libkmod.so.2.3.7