[*] Binary protection state of ip.iproute2
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcat tear down of ip.iproute2
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x2b948 */
| #include <stdint.h>
|
; (fcn) fcn.0002b948 () | void fcn_0002b948 () {
0x0002b948 ldr r3, [pc, 0x18] |
0x0002b94a mov.w r2, 0x16c | r2 = 0x16c;
0x0002b94e ldr.w ip, [pc, 0x18] | ip = *(0x2b96a);
0x0002b950 stm r0!, {r3, r4} | *(r0!) = r3;
| *((r0! + 4)) = r4;
0x0002b952 movs r1, 1 | r1 = 1;
0x0002b954 ldr r0, [pc, 0x14] |
0x0002b956 add r3, pc |
0x0002b958 ldr.w r3, [r3, ip] |
0x0002b95c add r0, pc | r0 = "linkinfo";
0x0002b95e ldr r3, [r3] | r3 = *(0x572be);
0x0002b960 b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x2c1bc */
| #include <stdint.h>
|
; (fcn) fcn.0002c1bc () | void fcn_0002c1bc (int16_t arg4, char * s1) {
| r3 = arg4;
| r0 = s1;
0x0002c1bc push {r4, r5, r6, lr} |
0x0002c1be mov r4, r3 | r4 = r3;
0x0002c1c0 ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x0002c1c2 ldr r1, [pc, 0x3c] |
0x0002c1c4 mov r0, r6 | r0 = r6;
0x0002c1c6 add r1, pc | r1 = 0x583cc;
0x0002c1c8 blx 0x8668 | strcmp (r0, r1);
0x0002c1cc ldr r2, [pc, 0x34] |
0x0002c1ce mov r5, r0 | r5 = r0;
0x0002c1d0 mov r3, r6 | r3 = r6;
0x0002c1d2 movs r1, 1 | r1 = 1;
0x0002c1d4 mov r0, r4 | r0 = r4;
0x0002c1d6 add r2, pc | r2 = 0x583de;
0x0002c1d8 blx 0x8be8 | fcn_00008be8 ();
0x0002c1dc cbz r5, 0x2c1f0 |
| while (1) {
0x0002c1de ldr r0, [pc, 0x28] |
0x0002c1e0 mov r3, r4 | r3 = r4;
0x0002c1e2 movs r2, 0xa0 | r2 = 0xa0;
0x0002c1e4 pop.w {r4, r5, r6, lr} |
0x0002c1e8 movs r1, 1 | r1 = 1;
0x0002c1ea add r0, pc | r0 = 0x583f8;
0x0002c1ec b.w 0x88c0 | void (*0x88c0)() ();
0x0002c1f0 ldr r0, [pc, 0x18] |
0x0002c1f2 mov r3, r4 | r3 = r4;
0x0002c1f4 movs r2, 0x6b | r2 = 0x6b;
0x0002c1f6 movs r1, 1 | r1 = 1;
0x0002c1f8 add r0, pc | r0 = 0x58408;
0x0002c1fa blx 0x88c4 | fcn_000088c4 ();
0x0002c1fe b 0x2c1de |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x2d3b8 */
| #include <stdint.h>
|
; (fcn) fcn.0002d3b8 () | void fcn_0002d3b8 () {
0x0002d3b8 ldr r3, [pc, 0x18] |
0x0002d3ba movw r2, 0x373 | r2 = 0x373;
0x0002d3be ldr.w ip, [pc, 0x18] | ip = *(0x2d3da);
0x0002d3c2 movs r1, 1 | r1 = 1;
0x0002d3c4 ldr r0, [pc, 0x14] |
0x0002d3c6 add r3, pc |
0x0002d3c8 ldr.w r3, [r3, ip] |
0x0002d3cc add r0, pc | r0 = 0x5a7ac;
0x0002d3ce ldr r3, [r3] | r3 = *(0x5a79e);
0x0002d3d0 b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x31710 */
| #include <stdint.h>
|
; (fcn) fcn.00031710 () | void fcn_00031710 () {
0x00031710 ldr r3, [pc, 0x18] |
0x00031712 movw r2, 0x282 | r2 = 0x282;
0x00031716 ldr.w ip, [pc, 0x18] | ip = *(0x31732);
0x0003171a movs r1, 1 | r1 = 1;
0x0003171c ldr r0, [pc, 0x14] |
0x0003171e add r3, pc |
0x00031720 ldr.w r3, [r3, ip] |
0x00031724 add r0, pc | r0 = 0x62e5c;
0x00031726 ldr r3, [r3] | r3 = *(0x62e4e);
0x00031728 b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x383c4 */
| #include <stdint.h>
|
; (fcn) fcn.000383c4 () | void fcn_000383c4 () {
0x000383c4 ldr r3, [pc, 0x18] |
0x000383c6 movw r2, 0x647 | r2 = 0x647;
0x000383ca ldr.w ip, [pc, 0x18] | ip = *(0x383e6);
0x000383ce movs r1, 1 | r1 = 1;
0x000383d0 ldr r0, [pc, 0x14] |
0x000383d2 add r3, pc |
0x000383d4 ldr.w r3, [r3, ip] |
0x000383d8 add r0, pc | r0 = 0x707c4;
0x000383da ldr r3, [r3] | r3 = *(0x707b6);
0x000383dc b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x39f9c */
| #include <stdint.h>
|
; (fcn) fcn.00039f9c () | void fcn_00039f9c () {
0x00039f9c ldr r3, [pc, 0x18] |
0x00039f9e movw r2, 0x5b4 | r2 = 0x5b4;
0x00039fa2 ldr.w ip, [pc, 0x18] | ip = *(0x39fbe);
0x00039fa6 movs r1, 1 | r1 = 1;
0x00039fa8 ldr r0, [pc, 0x14] |
0x00039faa add r3, pc |
0x00039fac ldr.w r3, [r3, ip] |
0x00039fb0 add r0, pc | r0 = 0x73f74;
0x00039fb2 ldr r3, [r3] | r3 = *(0x73f66);
0x00039fb4 b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x3b200 */
| #include <stdint.h>
|
; (fcn) fcn.0003b200 () | void fcn_0003b200 () {
0x0003b200 ldr r3, [pc, 0x18] |
0x0003b202 mov.w r2, 0x264 | r2 = 0x264;
0x0003b206 ldr.w ip, [pc, 0x18] | ip = *(0x3b222);
0x0003b20a movs r1, 1 | r1 = 1;
0x0003b20c ldr r0, [pc, 0x14] |
0x0003b20e add r3, pc |
0x0003b210 ldr.w r3, [r3, ip] |
0x0003b214 add r0, pc | r0 = 0x7643c;
0x0003b216 ldr r3, [r3] | r3 = *(0x7642e);
0x0003b218 b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x3c9d4 */
| #include <stdint.h>
|
; (fcn) fcn.0003c9d4 () | void fcn_0003c9d4 () {
0x0003c9d4 ldr r3, [pc, 0x18] |
0x0003c9d6 movw r2, 0x17d | r2 = 0x17d;
0x0003c9da ldr.w ip, [pc, 0x18] | ip = *(0x3c9f6);
0x0003c9de movs r1, 1 | r1 = 1;
0x0003c9e0 ldr r0, [pc, 0x14] |
0x0003c9e2 add r3, pc |
0x0003c9e4 ldr.w r3, [r3, ip] |
0x0003c9e8 add r0, pc | r0 = 0x793e4;
0x0003c9ea ldr r3, [r3] | r3 = *(0x793d6);
0x0003c9ec b.w 0x88c0 | return void (*0x88c0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x3ca10 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0003ca10 () | void fcn_0003ca10 (int16_t arg_2h, int16_t arg_6h, int16_t arg_40h, int16_t arg_44h, int16_t arg_54h, int16_t arg_58h, int16_t arg_6ch, int16_t arg_16ch, int16_t arg_2c0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_bp_0h;
| int16_t var_10h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int32_t var_10h_3;
| int16_t var_40h;
| int32_t var_20h_3;
| int16_t var_4eh;
| int16_t var_50h;
| int16_t var_4eh_2;
| int16_t var_50h_2;
| int16_t var_64h;
| int16_t var_16ch;
| int32_t var_16ch_2;
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| 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;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0003ca10 push {r4, r5, r6, lr} |
0x0003ca12 mov.w ip, 1 |
0x0003ca16 ldrd r5, r4, [r0] | __asm ("ldrd r5, r4, [r0]");
0x0003ca1a lsl.w ip, ip, r1 |
0x0003ca1e mov lr, r0 | lr = r0;
0x0003ca20 and.w r1, r5, ip | r1 = r5 & ip;
0x0003ca24 and.w r0, r4, ip, asr 31 | r0 = r4 & (ip >> 31);
0x0003ca28 orrs r1, r0 | r1 |= r0;
| if (r1 == r0) {
0x0003ca2a bne 0x3ca3c |
0x0003ca2c asr.w r6, ip, 0x1f | r6 = ip >> 0x1f;
0x0003ca30 orr.w r5, r5, ip | r5 |= ip;
0x0003ca34 orrs r4, r6 | r4 |= r6;
0x0003ca36 strd r5, r4, [lr] | __asm ("strd r5, r4, [lr]");
0x0003ca3a pop {r4, r5, r6, pc} |
| }
0x0003ca3c mov r1, r3 | r1 = r3;
0x0003ca3e mov r0, r2 | r0 = r2;
0x0003ca40 bl 0x48714 | duparg2 ();
0x0003ca44 push {r4, r5, r6, lr} |
0x0003ca46 mov r4, r2 | r4 = r2;
0x0003ca48 ldr r2, [pc, 0x350] |
0x0003ca4a sub sp, 0x20 |
0x0003ca4c ldr r3, [pc, 0x350] | r3 = *(0x3cda0);
0x0003ca4e add r2, pc | r2 = 0x797ee;
0x0003ca50 ldr r3, [r2, r3] |
0x0003ca52 ldr r3, [r3] | r3 = *(0x797ee);
0x0003ca54 str r3, [sp, 0x1c] | var_1ch = r3;
0x0003ca56 mov.w r3, 0 | r3 = 0;
0x0003ca5a cmp r4, 0 |
| if (r4 == 0) {
0x0003ca5c beq.w 0x3cbc2 | goto label_8;
| }
0x0003ca60 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0003ca62 cmp r3, 0 |
| if (r3 != 0) {
0x0003ca64 bne.w 0x3cbae | goto label_29;
| }
0x0003ca68 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0003ca6a cmp r2, 0 |
| if (r2 == 0) {
0x0003ca6c beq.w 0x3cbc2 | goto label_8;
| }
0x0003ca70 ldrh r3, [r2] | r3 = *(r2);
0x0003ca72 subs r3, 4 | r3 -= 4;
0x0003ca74 cmp r3, 3 |
| if (r3 < 3) {
0x0003ca76 bls.w 0x3cbc2 | goto label_8;
| }
0x0003ca7a ldr r3, [pc, 0x328] |
0x0003ca7c mov r5, r1 | r5 = r1;
0x0003ca7e ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0003ca80 movs r0, 4 | r0 = 4;
0x0003ca82 ldr r2, [pc, 0x324] |
0x0003ca84 add r3, pc | r3 = 0x7982e;
0x0003ca86 str r1, [sp] | *(sp) = r1;
0x0003ca88 movs r1, 6 | r1 = 6;
0x0003ca8a add r2, pc | r2 = 0x79838;
0x0003ca8c bl 0x4cba0 | print_color_uint ();
0x0003ca90 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0003ca92 cmp r3, 0 |
| if (r3 == 0) {
0x0003ca94 beq.w 0x3cbdc | goto label_30;
| }
0x0003ca98 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0003ca9a str r3, [sp, 8] | var_8h = r3;
0x0003ca9c cmp r3, 0 |
| if (r3 != 0) {
0x0003ca9e bne.w 0x3ccce | goto label_31;
| }
| do {
| label_0:
0x0003caa2 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
| if (r3 != 0) {
0x0003caa4 cbz r3, 0x3caae |
0x0003caa6 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0003caa8 cmp r3, 0 |
| if (r3 != 0) {
0x0003caaa bne.w 0x3ccb8 | goto label_32;
| }
| }
0x0003caae ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x0003cab0 cbz r3, 0x3cada |
0x0003cab2 ldrb r6, [r3, 4] | r6 = *((r3 + 4));
0x0003cab4 bl 0x4c8c4 | is_json_context ();
0x0003cab8 cmp r6, 0 |
0x0003caba it ne |
| if (r6 == 0) {
0x0003cabc orrne r0, r0, 1 | r0 |= 1;
| }
0x0003cac0 ands r2, r0, 0xff | r2 = r0 & 0xff;
| if (r2 == r0) {
0x0003cac4 beq.w 0x3cd58 | goto label_33;
| }
0x0003cac8 ldr r3, [pc, 0x2e0] |
0x0003caca movs r1, 6 | r1 = 6;
0x0003cacc ldr r2, [pc, 0x2e0] |
0x0003cace movs r0, 4 | r0 = 4;
0x0003cad0 str r6, [sp] | *(sp) = r6;
0x0003cad2 add r3, pc | r3 = 0x79882;
0x0003cad4 add r2, pc | r2 = 0x79888;
0x0003cad6 bl 0x4cba0 | print_color_uint ();
| }
| label_7:
0x0003cada ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| if (r3 != 0) {
0x0003cadc cbz r3, 0x3cae6 |
0x0003cade ldrb r6, [r3, 4] | r6 = *((r3 + 4));
0x0003cae0 cmp r6, 0 |
| if (r6 != 0) {
0x0003cae2 bne.w 0x3cc74 | goto label_34;
| }
| }
| label_5:
0x0003cae6 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x0003cae8 cbz r3, 0x3cafe |
0x0003caea ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0003caec cmp r3, 0 |
| if (r3 == 0) {
0x0003caee beq.w 0x3cc5c | goto label_35;
| }
0x0003caf2 cmp r3, 1 |
| if (r3 == 1) {
0x0003caf4 beq.w 0x3cd40 | goto label_36;
| }
0x0003caf8 cmp r3, 2 |
| if (r3 == 2) {
0x0003cafa beq.w 0x3cd6c | goto label_11;
| }
| }
| label_4:
0x0003cafe ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
| if (r3 != 0) {
0x0003cb00 cbz r3, 0x3cb0a |
0x0003cb02 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0003cb04 cmp r2, 0 |
| if (r2 != 0) {
0x0003cb06 bne.w 0x3cc9e | goto label_37;
| }
| }
| label_6:
0x0003cb0a ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 != 0) {
0x0003cb0c cbz r3, 0x3cb26 |
0x0003cb0e ldrh r1, [r3, 4] | r1 = *((r3 + 4));
0x0003cb10 movs r0, 4 | r0 = 4;
0x0003cb12 ldr r3, [pc, 0x2a0] |
0x0003cb14 ldr r2, [pc, 0x2a0] |
0x0003cb16 rev16 r1, r1 | __asm ("rev16 r1, r1");
0x0003cb18 uxth r1, r1 | r1 = (int16_t) r1;
0x0003cb1a add r3, pc | r3 = 0x798d4;
0x0003cb1c add r2, pc | r2 = 0x798d8;
0x0003cb1e str r1, [sp] | *(sp) = r1;
0x0003cb20 movs r1, 6 | r1 = 6;
0x0003cb22 bl 0x4cba0 | print_color_uint ();
| }
0x0003cb26 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
| if (r3 != 0) {
0x0003cb28 cbz r3, 0x3cb4a |
0x0003cb2a bl 0x4c8c4 | r0 = is_json_context ();
0x0003cb2e cmp r0, 0 |
| if (r0 != 0) {
0x0003cb30 bne.w 0x3cd24 | goto label_38;
| }
0x0003cb34 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0003cb36 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0003cb38 cmp r3, 0 |
| if (r3 == 0) {
0x0003cb3a beq 0x3cc2c | goto label_39;
| }
| label_1:
0x0003cb3c ldr r0, [pc, 0x27c] |
0x0003cb3e mov r3, r5 | r3 = r5;
0x0003cb40 movs r2, 8 | r2 = 8;
0x0003cb42 movs r1, 1 | r1 = 1;
0x0003cb44 add r0, pc | r0 = 0x79904;
0x0003cb46 blx 0x88c4 | fcn_000088c4 ();
| }
| label_10:
0x0003cb4a ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 != 0) {
0x0003cb4c cbz r3, 0x3cb6e |
0x0003cb4e bl 0x4c8c4 | r0 = is_json_context ();
0x0003cb52 cmp r0, 0 |
| if (r0 != 0) {
0x0003cb54 bne.w 0x3cd08 | goto label_40;
| }
0x0003cb58 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0003cb5a ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0003cb5c cmp r3, 0 |
| if (r3 == 0) {
0x0003cb5e beq 0x3cc4c | goto label_41;
| }
| label_3:
0x0003cb60 ldr r0, [pc, 0x25c] |
0x0003cb62 mov r3, r5 | r3 = r5;
0x0003cb64 movs r2, 0xf | r2 = 0xf;
0x0003cb66 movs r1, 1 | r1 = 1;
0x0003cb68 add r0, pc | r0 = 0x7992c;
0x0003cb6a blx 0x88c4 | fcn_000088c4 ();
| }
| label_9:
0x0003cb6e ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
| if (r3 != 0) {
0x0003cb70 cbz r3, 0x3cbc2 |
0x0003cb72 bl 0x4c8c4 | r0 = is_json_context ();
0x0003cb76 cmp r0, 0 |
| if (r0 != 0) {
0x0003cb78 bne.w 0x3ccec | goto label_42;
| }
0x0003cb7c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0003cb7e ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0003cb80 cmp r3, 0 |
| if (r3 == 0) {
0x0003cb82 beq 0x3cc3c | goto label_43;
| }
| label_2:
0x0003cb84 ldr r2, [pc, 0x23c] |
0x0003cb86 ldr r3, [pc, 0x218] | r3 = *(0x3cda2);
0x0003cb88 add r2, pc | r2 = 0x79950;
0x0003cb8a ldr r3, [r2, r3] | r3 = *(0x79950);
0x0003cb8c ldr r2, [r3] | r2 = *(0x79950);
0x0003cb8e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0003cb90 eors r2, r3 | r2 ^= r3;
0x0003cb92 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003cb96 bne.w 0x3cd98 | goto label_44;
| }
0x0003cb98 strh r7, [r7, 6] | *((r7 + 6)) = r7;
0x0003cb9a ldr r0, [pc, 0x22c] |
0x0003cb9c mov r3, r5 | r3 = r5;
0x0003cb9e movs r2, 0xf | r2 = 0xf;
0x0003cba0 movs r1, 1 | r1 = 1;
0x0003cba2 add r0, pc | r0 = 0x79970;
0x0003cba4 add sp, 0x20 |
0x0003cba6 pop.w {r4, r5, r6, lr} |
0x0003cbaa b.w 0x88c0 | void (*0x88c0)() ();
0x0003cbac bkpt 0x89 | __asm ("bkpt 0x89");
| label_29:
0x0003cbae ldr r3, [pc, 0x21c] |
0x0003cbb0 movs r0, 1 | r0 = 1;
0x0003cbb2 ldr r2, [pc, 0x21c] |
0x0003cbb4 movs r1, 6 | r1 = 6;
0x0003cbb6 str r0, [sp] | *(sp) = r0;
0x0003cbb8 movs r0, 4 | r0 = 4;
0x0003cbba add r3, pc | r3 = 0x7998c;
0x0003cbbc add r2, pc | r2 = 0x79992;
0x0003cbbe bl 0x4cf74 | print_color_bool ();
| }
| label_8:
0x0003cbc2 ldr r2, [pc, 0x210] |
0x0003cbc4 ldr r3, [pc, 0x1d8] | r3 = *(0x3cda0);
0x0003cbc6 add r2, pc | r2 = 0x799a0;
0x0003cbc8 ldr r3, [r2, r3] | r3 = *(0x799a0);
0x0003cbca ldr r2, [r3] | r2 = *(0x799a0);
0x0003cbcc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0003cbce eors r2, r3 | r2 ^= r3;
0x0003cbd0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003cbd4 bne.w 0x3cd98 | goto label_44;
| }
0x0003cbd8 add sp, 0x20 |
0x0003cbda pop {r4, r5, r6, pc} |
| label_30:
0x0003cbdc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0003cbde cmp r3, 0 |
0x0003cbe0 beq.w 0x3caa2 |
| } while (r3 == 0);
0x0003cbe4 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0003cbe6 add.w ip, sp, 0xc |
0x0003cbea ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0003cbec mov r6, ip | r6 = ip;
0x0003cbee ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0003cbf0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0003cbf2 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x0003cbf4 mov r3, r0 | r3 = r0;
0x0003cbf6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0003cbf8 orrs r3, r1 | r3 |= r1;
0x0003cbfa orrs r3, r2 | r3 |= r2;
0x0003cbfc ldr r2, [sp, 0x18] | r2 = var_18h;
0x0003cbfe orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0003cc00 beq.w 0x3caa2 | goto label_0;
| }
0x0003cc04 ldrb.w r3, [sp, 0xc] | r3 = var_ch;
0x0003cc08 cmp r3, 0xff |
| if (r3 == 0xff) {
0x0003cc0a beq.w 0x3caa2 | goto label_0;
| }
0x0003cc0e mov r2, ip | r2 = ip;
0x0003cc10 movs r1, 0x10 | r1 = 0x10;
0x0003cc12 movs r0, 0xa | r0 = 0xa;
0x0003cc14 bl 0x48e84 | format_host ();
0x0003cc18 ldr r3, [pc, 0x1bc] |
0x0003cc1a movs r1, 6 | r1 = 6;
0x0003cc1c ldr r2, [pc, 0x1bc] |
0x0003cc1e str r0, [sp] | *(sp) = r0;
0x0003cc20 movs r0, 4 | r0 = 4;
0x0003cc22 add r3, pc | r3 = 0x799fe;
0x0003cc24 add r2, pc | r2 = 0x79a04;
0x0003cc26 bl 0x4ce6c | print_color_string ();
0x0003cc2a b 0x3caa2 | goto label_0;
| label_39:
0x0003cc2c ldr r0, [pc, 0x1b0] |
0x0003cc2e mov r3, r5 | r3 = r5;
0x0003cc30 movs r2, 2 | r2 = 2;
0x0003cc32 movs r1, 1 | r1 = 1;
0x0003cc34 add r0, pc | r0 = 0x79a18;
0x0003cc36 blx 0x88c4 | fcn_000088c4 ();
0x0003cc3a b 0x3cb3c | goto label_1;
| label_43:
0x0003cc3c ldr r0, [pc, 0x1a4] |
0x0003cc3e mov r3, r5 | r3 = r5;
0x0003cc40 movs r2, 2 | r2 = 2;
0x0003cc42 movs r1, 1 | r1 = 1;
0x0003cc44 add r0, pc | r0 = 0x79a2c;
0x0003cc46 blx 0x88c4 | fcn_000088c4 ();
0x0003cc4a b 0x3cb84 | goto label_2;
| label_41:
0x0003cc4c ldr r0, [pc, 0x198] |
0x0003cc4e mov r3, r5 | r3 = r5;
0x0003cc50 movs r2, 2 | r2 = 2;
0x0003cc52 movs r1, 1 | r1 = 1;
0x0003cc54 add r0, pc | r0 = 0x79a40;
0x0003cc56 blx 0x88c4 | fcn_000088c4 ();
0x0003cc5a b 0x3cb60 | goto label_3;
| label_35:
0x0003cc5c ldr r1, [pc, 0x18c] |
0x0003cc5e movs r0, 2 | r0 = 2;
0x0003cc60 ldr r3, [pc, 0x18c] |
0x0003cc62 ldr r2, [pc, 0x190] |
0x0003cc64 add r1, pc | r1 = 0x79a54;
0x0003cc66 str r1, [sp] | *(sp) = r1;
0x0003cc68 add r3, pc | r3 = 0x79a5c;
0x0003cc6a add r2, pc | r2 = 0x79a64;
0x0003cc6c movs r1, 6 | r1 = 6;
0x0003cc6e bl 0x4ce6c | print_color_string ();
0x0003cc72 b 0x3cafe | goto label_4;
| label_34:
0x0003cc74 bl 0x4c8c4 | is_json_context ();
0x0003cc78 cmp r6, 1 |
0x0003cc7a it ne |
| if (r6 == 1) {
0x0003cc7c orrne r0, r0, 1 | r0 |= 1;
| }
0x0003cc80 ands r2, r0, 0xff | r2 = r0 & 0xff;
| if (r2 != r0) {
0x0003cc84 beq 0x3cd84 |
0x0003cc86 movs r2, 0 | r2 = 0;
0x0003cc88 ldr r3, [pc, 0x16c] |
0x0003cc8a strd r6, r2, [sp] | __asm ("strd r6, r2, [sp]");
0x0003cc8e movs r1, 6 | r1 = 6;
0x0003cc90 ldr r2, [pc, 0x168] |
0x0003cc92 movs r0, 4 | r0 = 4;
0x0003cc94 add r3, pc | r3 = 0x79a90;
0x0003cc96 add r2, pc | r2 = 0x79a96;
0x0003cc98 bl 0x4d094 | print_color_0xhex ();
0x0003cc9c b 0x3cae6 | goto label_5;
| label_37:
0x0003cc9e rev r2, r2 | r2 = SWAP32 (r2);
0x0003cca0 movs r1, 0 | r1 = 0;
0x0003cca2 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x0003cca4 movs r1, 0 | r1 = 0;
0x0003cca6 movs r0, 4 | r0 = 4;
0x0003cca8 ldr r3, [pc, 0x154] |
0x0003ccaa movs r1, 6 | r1 = 6;
0x0003ccac ldr r2, [pc, 0x154] |
0x0003ccae add r3, pc | r3 = 0x79ab2;
0x0003ccb0 add r2, pc | r2 = 0x79ab8;
0x0003ccb2 bl 0x4d094 | print_color_0xhex ();
0x0003ccb6 b 0x3cb0a | goto label_6;
| label_32:
0x0003ccb8 ldr r1, [pc, 0x14c] |
0x0003ccba movs r2, 0 | r2 = 0;
0x0003ccbc ldr r3, [pc, 0x14c] |
0x0003ccbe movs r0, 1 | r0 = 1;
0x0003ccc0 add r1, pc | r1 = 0x79acc;
0x0003ccc2 str r1, [sp] | *(sp) = r1;
0x0003ccc4 add r3, pc | r3 = 0x79ad4;
0x0003ccc6 movs r1, 6 | r1 = 6;
0x0003ccc8 bl 0x4ce6c | print_color_string ();
0x0003cccc b 0x3cada | goto label_7;
| label_31:
0x0003ccce add r2, sp, 8 | r2 += var_8h;
0x0003ccd0 movs r1, 4 | r1 = 4;
0x0003ccd2 movs r0, 2 | r0 = 2;
0x0003ccd4 bl 0x48e84 | format_host ();
0x0003ccd8 ldr r3, [pc, 0x134] |
0x0003ccda movs r1, 6 | r1 = 6;
0x0003ccdc ldr r2, [pc, 0x134] |
0x0003ccde str r0, [sp] | *(sp) = r0;
0x0003cce0 movs r0, 4 | r0 = 4;
0x0003cce2 add r3, pc | r3 = 0x79af6;
0x0003cce4 add r2, pc | r2 = 0x79afc;
0x0003cce6 bl 0x4ce6c | print_color_string ();
0x0003ccea b 0x3caa2 | goto label_0;
| label_42:
0x0003ccec ldr r4, [r4, 0x28] | r4 = *((r4 + 0x28));
0x0003ccee movs r3, 0 | r3 = 0;
0x0003ccf0 ldr r2, [pc, 0x124] |
0x0003ccf2 movs r1, 6 | r1 = 6;
0x0003ccf4 movs r0, 2 | r0 = 2;
0x0003ccf6 ldrb r4, [r4, 4] | r4 = *((r4 + 4));
0x0003ccf8 add r2, pc | r2 = 0x79b14;
0x0003ccfa subs r4, r4, r3 | r4 -= r3;
0x0003ccfc it ne |
| if (r4 == r4) {
0x0003ccfe movne r4, 1 | r4 = 1;
| }
0x0003cd00 str r4, [sp] | *(sp) = r4;
0x0003cd02 bl 0x4cf74 | print_color_bool ();
0x0003cd06 b 0x3cbc2 | goto label_8;
| label_40:
0x0003cd08 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0003cd0a movs r3, 0 | r3 = 0;
0x0003cd0c ldr r2, [pc, 0x10c] |
0x0003cd0e movs r0, 2 | r0 = 2;
0x0003cd10 ldrb r1, [r1, 4] | r1 = *((r1 + 4));
0x0003cd12 add r2, pc | r2 = 0x79b32;
0x0003cd14 subs r1, r1, r3 | r1 -= r3;
0x0003cd16 it ne |
| if (r1 == r1) {
0x0003cd18 movne r1, 1 | r1 = 1;
| }
0x0003cd1a str r1, [sp] | *(sp) = r1;
0x0003cd1c movs r1, 6 | r1 = 6;
0x0003cd1e bl 0x4cf74 | print_color_bool ();
0x0003cd22 b 0x3cb6e | goto label_9;
| label_38:
0x0003cd24 ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x0003cd26 movs r3, 0 | r3 = 0;
0x0003cd28 ldr r2, [pc, 0xf4] |
0x0003cd2a movs r0, 2 | r0 = 2;
0x0003cd2c ldrb r1, [r1, 4] | r1 = *((r1 + 4));
0x0003cd2e add r2, pc | r2 = 0x79b52;
0x0003cd30 subs r1, r1, r3 | r1 -= r3;
0x0003cd32 it ne |
| if (r1 == r1) {
0x0003cd34 movne r1, 1 | r1 = 1;
| }
0x0003cd36 str r1, [sp] | *(sp) = r1;
0x0003cd38 movs r1, 6 | r1 = 6;
0x0003cd3a bl 0x4cf74 | print_color_bool ();
0x0003cd3e b 0x3cb4a | goto label_10;
| label_36:
0x0003cd40 ldr r1, [pc, 0xe0] |
0x0003cd42 movs r0, 4 | r0 = 4;
0x0003cd44 ldr r3, [pc, 0xe0] | r3 = *(0x3ce28);
0x0003cd46 ldr r2, [pc, 0xe4] | r2 = *(0x3ce2e);
0x0003cd48 add r1, pc | r1 = 0x79b70;
0x0003cd4a str r1, [sp] | *(sp) = r1;
| label_12:
0x0003cd4c add r3, pc | r3 += pc;
0x0003cd4e add r2, pc | r2 += pc;
0x0003cd50 movs r1, 6 | r1 = 6;
0x0003cd52 bl 0x4ce6c | print_color_string ();
0x0003cd56 b 0x3cafe | goto label_4;
| label_33:
0x0003cd58 ldr r1, [pc, 0xd4] |
0x0003cd5a movs r0, 1 | r0 = 1;
0x0003cd5c ldr r3, [pc, 0xd4] |
0x0003cd5e add r1, pc | r1 = 0x79b92;
0x0003cd60 str r1, [sp] | *(sp) = r1;
0x0003cd62 add r3, pc | r3 = 0x79b9a;
0x0003cd64 movs r1, 6 | r1 = 6;
0x0003cd66 bl 0x4ce6c | print_color_string ();
0x0003cd6a b 0x3cada | goto label_7;
| label_11:
0x0003cd6c ldr r1, [pc, 0xc8] |
0x0003cd6e movs r0, 4 | r0 = 4;
0x0003cd70 ldr r3, [pc, 0xc8] |
0x0003cd72 ldr r2, [pc, 0xcc] |
0x0003cd74 add r1, pc | r1 = 0x79bb0;
0x0003cd76 str r1, [sp] | *(sp) = r1;
0x0003cd78 add r3, pc | r3 = 0x79bb8;
0x0003cd7a add r2, pc | r2 = 0x79bc0;
0x0003cd7c movs r1, 6 | r1 = 6;
0x0003cd7e bl 0x4ce6c | print_color_string ();
0x0003cd80 invalid |
| }
0x0003cd84 ldr r1, [pc, 0xbc] |
0x0003cd86 movs r0, 1 | r0 = 1;
0x0003cd88 ldr r3, [pc, 0xbc] |
0x0003cd8a add r1, pc | r1 = 0x79bd2;
0x0003cd8c str r1, [sp] | *(sp) = r1;
0x0003cd8e add r3, pc | r3 = 0x79bda;
0x0003cd90 movs r1, 6 | r1 = 6;
0x0003cd92 bl 0x4ce6c | print_color_string ();
0x0003cd96 b 0x3cae6 | goto label_5;
| label_44:
0x0003cd98 blx 0x87f8 | fcn_000087f8 ();
0x0003cd9c asrs r2, r5, 9 | r2 = r5 >> 9;
0x0003cd9e movs r4, r0 | r4 = r0;
0x0003cda0 lsls r4, r0, 0xb | r4 = r0 << 0xb;
0x0003cda2 movs r0, r0 |
0x0003cda4 stm r1!, {r2, r5, r6} | *(r1!) = r2;
| *((r1! + 4)) = r5;
| *((r1! + 8)) = r6;
0x0003cda6 movs r2, r0 | r2 = r0;
0x0003cda8 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x0003cdaa movs r2, r0 | r2 = r0;
0x0003cdac sbcs r2, r5 | __asm ("sbcs r2, r5");
0x0003cdae movs r2, r0 | r2 = r0;
0x0003cdb0 stm r3!, {r2, r3, r4, r6} | *(r3!) = r2;
| *((r3! + 4)) = r3;
| *((r3! + 8)) = r4;
| *((r3! + 12)) = r6;
0x0003cdb2 movs r1, r0 | r1 = r0;
0x0003cdb4 ldrsh r6, [r3, r2] | r6 = *((r3 + r2));
0x0003cdb6 movs r2, r0 | r2 = r0;
0x0003cdb8 ldr r7, [sp, 0x2c0] | r7 = *(arg_2c0h);
0x0003cdba movs r2, r0 | r2 = r0;
0x0003cdbc ldrsh r0, [r5, r4] | r0 = *((r5 + r4));
0x0003cdbe movs r2, r0 | r2 = r0;
0x0003cdc0 ldrsh r4, [r4, r4] | r4 = *((r4 + r4));
0x0003cdc2 movs r2, r0 | r2 = r0;
0x0003cdc4 asrs r0, r6, 4 | r0 = r6 >> 4;
0x0003cdc6 movs r4, r0 | r4 = r0;
0x0003cdc8 ldrsh r6, [r1, r4] | r6 = *((r1 + r4));
0x0003cdca movs r2, r0 | r2 = r0;
0x0003cdcc lsls r6, r6 | r6 <<= r6;
0x0003cdce movs r2, r0 | r2 = r0;
0x0003cdd0 subs r7, 0x70 | r7 -= 0x70;
0x0003cdd2 movs r2, r0 | r2 = r0;
0x0003cdd4 asrs r2, r6, 3 | r2 = r6 >> 3;
0x0003cdd6 movs r4, r0 | r4 = r0;
0x0003cdd8 ldrb r2, [r1, r5] | r2 = *((r1 + r5));
0x0003cdda movs r2, r0 | r2 = r0;
0x0003cddc ldrb r4, [r3, r5] | r4 = *((r3 + r5));
0x0003cdde movs r2, r0 | r2 = r0;
0x0003cde0 ldrsh r4, [r6, r0] | r4 = *((r6 + r0));
0x0003cde2 movs r2, r0 | r2 = r0;
0x0003cde4 ldrsh r4, [r4, r0] | r4 = *((r4 + r0));
0x0003cde6 movs r2, r0 | r2 = r0;
0x0003cde8 ldrsh r4, [r2, r0] | r4 = *((r2 + r0));
0x0003cdea movs r2, r0 | r2 = r0;
0x0003cdec ldrb r0, [r7, r6] | r0 = *((r7 + r6));
0x0003cdee movs r2, r0 | r2 = r0;
0x0003cdf0 ldrb r0, [r5, r6] | r0 = *((r5 + r6));
0x0003cdf2 movs r2, r0 | r2 = r0;
0x0003cdf4 ldrb r6, [r5, r6] | r6 = *((r5 + r6));
0x0003cdf6 movs r2, r0 | r2 = r0;
0x0003cdf8 subs r7, 0xf8 | r7 -= 0xf8;
0x0003cdfa movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x0003cdfc bhs 0x3cedc | goto label_13;
| }
0x0003cdfe movs r2, r0 | r2 = r0;
0x0003ce00 ldrb r6, [r6, r5] | r6 = *((r6 + r5));
0x0003ce02 movs r2, r0 | r2 = r0;
0x0003ce04 str r4, [sp, 0x2c0] | *(arg_2c0h) = r4;
0x0003ce06 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0003ce08 blt 0x3cea4 | goto label_45;
| }
0x0003ce0a movs r1, r0 | r1 = r0;
0x0003ce0c subs r7, 0xc0 | r7 -= 0xc0;
0x0003ce0e movs r2, r0 | r2 = r0;
| do {
0x0003ce10 ldrb r2, [r1, r2] | r2 = *((r1 + r2));
0x0003ce12 movs r2, r0 | r2 = r0;
0x0003ce14 blt 0x3ce10 |
| } while (r2 < r0);
0x0003ce16 movs r1, r0 | r1 = r0;
0x0003ce18 ldrb r4, [r4, r6] | r4 = *((r4 + r6));
0x0003ce1a movs r2, r0 | r2 = r0;
0x0003ce1c ldrb r6, [r4, r5] | r6 = *((r4 + r5));
0x0003ce1e movs r2, r0 | r2 = r0;
0x0003ce20 strb r6, [r1, r7] | *((r1 + r7)) = r6;
0x0003ce22 movs r2, r0 | r2 = r0;
0x0003ce24 strh r0, [r3, r6] | *((r3 + r6)) = r0;
0x0003ce26 movs r2, r0 | r2 = r0;
0x0003ce28 ldrb r4, [r0, r3] | r4 = *((r0 + r3));
0x0003ce2a movs r2, r0 | r2 = r0;
0x0003ce2c ldrb r2, [r1, r3] | r2 = *((r1 + r3));
0x0003ce2e movs r2, r0 | r2 = r0;
0x0003ce30 adr r5, 0x348 | r5 = 0x348;
0x0003ce32 movs r2, r0 | r2 = r0;
0x0003ce34 subs r7, 0x22 | r7 -= 0x22;
0x0003ce36 movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x0003ce38 bge 0x3cd6c | goto label_11;
| }
0x0003ce3a movs r1, r0 | r1 = r0;
0x0003ce3c ldrb r0, [r3, r2] | r0 = *((r3 + r2));
0x0003ce3e movs r2, r0 | r2 = r0;
0x0003ce40 ldrb r6, [r3, r2] | r6 = *((r3 + r2));
0x0003ce42 movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x0003ce44 bge 0x3cd4c | goto label_12;
| }
0x0003ce46 movs r1, r0 | r1 = r0;
0x0003ce48 itte mi |
| if (r1 >= r0) {
0x0003ce4a movmi r1, r0 | r1 = r0;
| }
| if (r1 < r0) {
0x0003ce4c pushmi {r4, r5, r6, r7, r8, sb, sl, fp, lr} | __asm ("pushmi {r4, r5, r6, r7, r8, sb, sl, fp, lr}");
| }
| if (r1 >= r0) {
0x0003ce50 sub sp, 0x174 |
| }
0x0003ce52 ldr.w r6, [pc, 0x6bc] | r6 = *(0x0003d510);
0x0003ce56 add.w r8, sp, 0x50 | r8 += var_50h;
0x0003ce5a mov r5, r2 | r5 = r2;
0x0003ce5c add.w fp, sp, 0x64 |
0x0003ce60 ldr.w r4, [pc, 0x6b0] | r4 = *(0x0003d514);
0x0003ce64 add.w r2, sp, 0x4e | r2 += var_4eh;
0x0003ce68 str r3, [sp, 0x10] | var_10h_2 = r3;
0x0003ce6a add r6, pc | r6 += pc;
0x0003ce6c ldrh r0, [r3, 4] | r0 = *((r3 + 4));
0x0003ce6e ldr.w r3, [pc, 0x6a8] |
0x0003ce72 add r4, pc | r4 += pc;
0x0003ce74 str r6, [sp, 0x40] | var_bp_0h = r6;
0x0003ce76 cmp r0, 0x10 |
0x0003ce78 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0003ce7c ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0003ce7e mov r4, r1 | r4 = r1;
0x0003ce80 ldr r3, [r3] | r3 = *(0x3d51a);
0x0003ce82 str r3, [sp, 0x16c] | var_16ch = r3;
0x0003ce84 mov.w r3, 0 | r3 = 0;
0x0003ce88 mov.w r3, 0 | r3 = 0;
0x0003ce8c str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0003ce90 strh.w r3, [sp, 0x4e] | var_4eh = r3;
0x0003ce94 it eq |
| if (r0 != 0x10) {
0x0003ce96 ldreq r3, [sp, 0x10] | r3 = var_10h_2;
| }
0x0003ce98 vstr d16, [sp, 0x58] | __asm ("vstr d16, [sp, 0x58]");
0x0003ce9c str r2, [sp, 0x20] | var_20h_2 = r2;
0x0003ce9e ittt eq |
| if (r0 == 0x10) {
0x0003cea0 ldrheq r3, [r3, 6] | __asm ("ldrheq r3, [r3, 6]");
| }
| if (r0 != 0x10) {
0x0003cea2 eoreq r3, r3, 0x400 | r3 ^= 0x400;
| }
| if (r0 != 0x10) {
| label_45:
0x0003cea4 streq r0, [r0, 0x38] | *((r0 + 0x38)) = r0;
| }
0x0003cea6 ubfx r3, r3, 0xa, 1 | r3 = (r3 >> 0xa) & ((1 << 1) - 1);
0x0003ceaa str r3, [sp, 0x1c] | var_1ch = r3;
0x0003ceac movs r3, 0 | r3 = 0;
0x0003ceae cmp r1, r3 |
0x0003ceb0 strh.w r3, [fp] | *(fp) = r3;
| if (r1 <= r3) {
0x0003ceb4 ble.w 0x3d2b4 | goto label_46;
| }
0x0003ceb8 ldr.w r2, [pc, 0x660] |
0x0003cebc ldr.w sb, [pc, 0x660] |
0x0003cec0 ldr.w sl, [pc, 0x660] |
0x0003cec4 add r2, pc | r2 = 0x7a3e4;
0x0003cec6 str r3, [sp, 0x3c] | var_3ch = r3;
0x0003cec8 add sb, pc | sb = 0x7a3ec;
0x0003ceca str r2, [sp, 0xc] | var_ch = r2;
0x0003cecc add sl, pc | sl = 0x7a3f4;
0x0003cece strd r3, r3, [sp, 0x34] | __asm ("strd r3, r3, [var_38h]");
0x0003ced2 str r3, [sp, 0x18] | var_18h = r3;
0x0003ced4 strd r3, r3, [sp, 0x24] | __asm ("strd r3, r3, [var_24h]");
0x0003ced8 str r3, [sp, 0x30] | var_30h = r3;
0x0003ceda b 0x3cf1c |
| while (r0 == 0) {
| label_13:
0x0003cedc subs r4, 1 | r4--;
0x0003cede add.w r7, r5, 4 | r7 = r5 + 4;
| if (r4 == 1) {
0x0003cee2 beq.w 0x3d2ce | goto label_28;
| }
0x0003cee6 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x0003cee8 add r6, sp, 0x58 | r6 += arg_58h;
0x0003ceea ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003ceec and r2, r3, 2 | r2 = r3 & 2;
0x0003cef0 cmp r2, 0 |
| if (r2 != 0) {
0x0003cef2 bne.w 0x3d2d2 | goto label_47;
| }
0x0003cef6 orr r3, r3, 2 | r3 |= 2;
0x0003cefa mov r0, r8 | r0 = r8;
0x0003cefc str r3, [r6] | *(r6) = r3;
0x0003cefe bl 0x47ddc | r0 = get_u32 ();
0x0003cf02 cmp r0, 0 |
| if (r0 != 0) {
0x0003cf04 bne.w 0x3d2aa | goto label_48;
| }
0x0003cf08 ldr.w r3, [r8] | r3 = *(r8);
0x0003cf0c cmp.w r3, 0x1000000 |
| if (r3 >= 0x1000000) {
0x0003cf10 bhs.w 0x3d2aa | goto label_48;
| }
| label_14:
0x0003cf14 subs r4, 1 | r4--;
0x0003cf16 add.w r5, r7, 4 | r5 = r7 + 4;
| if (r4 == 1) {
0x0003cf1a beq 0x3d004 | goto label_49;
| }
| label_15:
0x0003cf1c ldr r0, [r5] | r0 = *(r5);
0x0003cf1e mov r1, sb | r1 = sb;
0x0003cf20 bl 0x4884c | r0 = matches ();
0x0003cf24 cmp r0, 0 |
0x0003cf26 beq 0x3cedc |
| }
0x0003cf28 ldr r0, [r5] | r0 = *(r5);
0x0003cf2a mov r1, sl | r1 = sl;
0x0003cf2c bl 0x4884c | r0 = matches ();
0x0003cf30 cmp r0, 0 |
| if (r0 == 0) {
0x0003cf32 beq 0x3cedc | goto label_13;
| }
0x0003cf34 ldr r0, [r5] | r0 = *(r5);
0x0003cf36 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0003cf38 bl 0x4884c | r0 = matches ();
| if (r0 != 0) {
0x0003cf3c cbnz r0, 0x3cf7c | goto label_50;
| }
0x0003cf3e subs r4, 1 | r4--;
0x0003cf40 add.w r7, r5, 4 | r7 = r5 + 4;
| if (r4 == 1) {
0x0003cf44 beq.w 0x3d2ce | goto label_28;
| }
0x0003cf48 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x0003cf4a add r6, sp, 0x58 | r6 += arg_58h;
0x0003cf4c ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003cf4e and r2, r3, 4 | r2 = r3 & 4;
0x0003cf52 cmp r2, 0 |
| if (r2 != 0) {
0x0003cf54 bne.w 0x3d3ba | goto label_51;
| }
0x0003cf58 orr r3, r3, 4 | r3 |= 4;
0x0003cf5c mov r0, fp | r0 = fp;
0x0003cf5e str r3, [r6] | *(r6) = r3;
0x0003cf60 bl 0x48c38 | get_addr ();
0x0003cf64 ldrh.w r3, [fp] | r3 = *(fp);
0x0003cf68 and r3, r3, 0xa | r3 &= 0xa;
0x0003cf6c cmp r3, 2 |
| if (r3 == 2) {
0x0003cf6e beq 0x3cf14 | goto label_14;
| }
0x0003cf70 ldr.w r0, [pc, 0x5b4] | r0 = *(0x0003d528);
0x0003cf74 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003cf76 add r0, pc | r0 += pc;
0x0003cf78 bl 0x486a4 | invarg ();
| label_50:
0x0003cf7c ldr.w r1, [pc, 0x5ac] | r1 = *(0x0003d52c);
0x0003cf80 ldr r0, [r5] | r0 = *(r5);
0x0003cf82 add r1, pc | r1 += pc;
0x0003cf84 bl 0x4884c | r0 = matches ();
0x0003cf88 cmp r0, 0 |
| if (r0 != 0) {
0x0003cf8a bne.w 0x3d116 | goto label_52;
| }
| label_17:
0x0003cf8e subs r4, 1 | r4--;
0x0003cf90 add.w r7, r5, 4 | r7 = r5 + 4;
| if (r4 == 1) {
0x0003cf94 beq.w 0x3d2ce | goto label_28;
| }
0x0003cf98 ldr r2, [sp, 0x58] | r2 = *(arg_58h);
0x0003cf9a add r6, sp, 0x58 | r6 += arg_58h;
0x0003cf9c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0003cf9e and r1, r2, 8 | r1 = r2 & 8;
0x0003cfa2 str r1, [sp, 0x2c] | var_2ch = r1;
0x0003cfa4 cmp r1, 0 |
| if (r1 != 0) {
0x0003cfa6 bne.w 0x3d3c4 | goto label_53;
| }
0x0003cfaa ldr.w r1, [pc, 0x584] |
0x0003cfae orr r2, r2, 8 | r2 |= 8;
0x0003cfb2 mov r0, r3 | r0 = r3;
0x0003cfb4 str r3, [sp, 0x14] | var_14h = r3;
0x0003cfb6 str r2, [r6] | *(r6) = r2;
0x0003cfb8 add r1, pc | r1 = 0x7a4ee;
0x0003cfba blx 0x8668 | strcmp (r0, r1);
0x0003cfbe ldr r3, [sp, 0x14] | r3 = var_14h;
0x0003cfc0 cmp r0, 0 |
| if (r0 == 0) {
0x0003cfc2 beq.w 0x3d18a | goto label_54;
| }
0x0003cfc6 ldr.w r1, [pc, 0x56c] | r1 = *(0x0003d534);
0x0003cfca mov r0, r3 | r0 = r3;
0x0003cfcc str r3, [sp, 0x14] | var_14h = r3;
0x0003cfce add r1, pc | r1 += pc;
0x0003cfd0 blx 0x8668 | strcmp (r0, r1);
0x0003cfd4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0003cfd6 cmp r0, 0 |
| if (r0 == 0) {
0x0003cfd8 beq 0x3cf14 | goto label_14;
| }
0x0003cfda mov r1, r3 | r1 = r3;
0x0003cfdc add r3, sp, 0x54 | r3 += arg_54h;
0x0003cfde mov r0, r3 | r0 = r3;
0x0003cfe0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003cfe2 str r3, [sp, 0x14] | var_14h = r3;
0x0003cfe4 bl 0x47b4c | get_unsigned ();
0x0003cfe8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0003cfea cmp r0, 0 |
| if (r0 != 0) {
0x0003cfec bne.w 0x3d32c | goto label_55;
| }
0x0003cff0 ldr r3, [r3] | r3 = *(r3);
0x0003cff2 cmp r3, 0xff |
| if (r3 > 0xff) {
0x0003cff4 bhi.w 0x3d3d8 | goto label_56;
| }
0x0003cff8 uxtb r3, r3 | r3 = (int8_t) r3;
0x0003cffa subs r4, 1 | r4--;
0x0003cffc add.w r5, r7, 4 | r5 = r7 + 4;
0x0003d000 str r3, [sp, 0x24] | var_24h = r3;
| if (r4 != 1) {
0x0003d002 bne 0x3cf1c | goto label_15;
| }
| label_49:
0x0003d004 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0003d006 ldr r5, [r6] | r5 = *(r6);
0x0003d008 and r3, r5, 2 | r3 = r5 & 2;
0x0003d00c cmp r2, 0 |
| if (r2 == 0) {
0x0003d00e beq 0x3d0c8 | goto label_57;
| }
0x0003d010 cmp r3, 0 |
| if (r3 != 0) {
0x0003d012 bne.w 0x3d31e | goto label_58;
| }
0x0003d016 ldr.w r3, [r8] | r3 = *(r8);
0x0003d01a movs r2, 1 | r2 = 1;
0x0003d01c ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d01e mov.w r1, 0x400 | r1 = 0x400;
0x0003d022 bl 0x548e8 | addattr32 ();
0x0003d026 ldrh.w r3, [fp] | r3 = *(fp);
0x0003d02a lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x0003d02c bpl 0x3d04c |
| while (r2 < r3) {
| label_18:
0x0003d02e ldrh.w r3, [fp, 6] | r3 = *(arg_6h);
0x0003d032 mov.w r1, 0x400 | r1 = 0x400;
0x0003d036 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d038 cmp r3, 2 |
0x0003d03a ldrh.w r3, [fp, 2] | r3 = *(arg_2h);
0x0003d03e ite eq |
| if (r3 != 2) {
0x0003d040 moveq r2, 2 | r2 = 2;
| }
| if (r3 == 2) {
0x0003d042 movne r2, 7 | r2 = 7;
| }
0x0003d044 str r3, [sp] | *(sp) = r3;
0x0003d046 add r3, sp, 0x6c | r3 += arg_6ch;
0x0003d048 bl 0x54824 | addattr_l ();
0x0003d04c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0003d04e cmp r3, 0 |
| if (r3 == 0) {
0x0003d050 beq 0x3d0f6 | goto label_59;
| }
| label_19:
0x0003d052 and r3, r5, 0x800 | r3 = r5 & 0x800;
0x0003d056 cmp r3, 0 |
| if (r3 == 0) {
0x0003d058 beq.w 0x3d19a | goto label_60;
| }
0x0003d05c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0003d05e movs r2, 0xb | r2 = 0xb;
0x0003d060 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d062 mov.w r1, 0x400 | r1 = 0x400;
0x0003d066 bl 0x548e8 | addattr32 ();
0x0003d06a lsls r3, r5, 0x1c | r3 = r5 << 0x1c;
| if (r3 < r5) {
0x0003d06c bmi.w 0x3d210 | goto label_61;
| }
| label_20:
0x0003d070 lsls r3, r5, 0x1b | r3 = r5 << 0x1b;
| if (r3 < r5) {
0x0003d072 bpl 0x3d082 |
| label_16:
0x0003d074 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0003d076 movs r2, 4 | r2 = 4;
0x0003d078 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d07a mov.w r1, 0x400 | r1 = 0x400;
0x0003d07e bl 0x548b0 | addattr8 ();
| }
0x0003d082 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0003d084 ldrh r3, [r3] | r3 = *(r3);
0x0003d086 cmp r3, 0 |
| if (r3 != 0) {
0x0003d088 bne.w 0x3d1fe | goto label_62;
| }
| label_23:
0x0003d08c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0003d08e cmp r3, 0 |
| if (r3 != 0) {
0x0003d090 bne.w 0x3d1f0 | goto label_63;
| }
| label_22:
0x0003d094 lsls r7, r5, 0x17 | r7 = r5 << 0x17;
| if (r7 < r5) {
0x0003d096 bmi.w 0x3d1e0 | goto label_64;
| }
0x0003d09a lsls r6, r5, 0x16 | r6 = r5 << 0x16;
| if (r6 < r5) {
0x0003d09c bmi.w 0x3d1bc | goto label_65;
| }
0x0003d0a0 lsls r0, r5, 0x15 | r0 = r5 << 0x15;
| if (r0 < r5) {
0x0003d0a2 bmi.w 0x3d1d0 | goto label_66;
| }
| label_21:
0x0003d0a6 ldr.w r2, [pc, 0x490] | r2 = *(0x0003d538);
0x0003d0aa ldr.w r3, [pc, 0x46c] | r3 = *(0x3d51a);
0x0003d0ae add r2, pc | r2 += pc;
0x0003d0b0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0003d0b2 ldr r2, [r3] | r2 = *(0x3d51a);
0x0003d0b4 ldr r3, [sp, 0x16c] | r3 = *(arg_16ch);
0x0003d0b6 eors r2, r3 | r2 ^= r3;
0x0003d0b8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003d0bc bne.w 0x3d3c0 | goto label_67;
| }
0x0003d0c0 mov r0, r4 | r0 = r4;
0x0003d0c2 add sp, 0x174 |
0x0003d0c4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_57:
0x0003d0c8 cmp r3, 0 |
| if (r3 == 0) {
0x0003d0ca beq.w 0x3d2b4 | goto label_46;
| }
0x0003d0ce ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0003d0d0 cmp r3, 0 |
| if (r3 != 0) {
0x0003d0d2 bne 0x3d16e | goto label_68;
| }
0x0003d0d4 ldrh.w r3, [fp] | r3 = *(fp);
0x0003d0d8 lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 >= r3) {
0x0003d0da bpl.w 0x3d3b0 | goto label_69;
| }
0x0003d0de ldr.w r3, [r8] | r3 = *(r8);
0x0003d0e2 movs r2, 1 | r2 = 1;
0x0003d0e4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d0e6 mov.w r1, 0x400 | r1 = 0x400;
0x0003d0ea bl 0x548e8 | addattr32 ();
0x0003d0ee ldrh.w r3, [fp] | r3 = *(fp);
0x0003d0f2 lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x0003d0f4 bmi 0x3d02e |
| }
| label_59:
0x0003d0f6 ldr r6, [sp, 0x10] | r6 = var_10h;
0x0003d0f8 movs r2, 0xb | r2 = 0xb;
0x0003d0fa ldr r3, [sp, 0x30] | r3 = var_30h;
0x0003d0fc mov.w r1, 0x400 | r1 = 0x400;
0x0003d100 mov r0, r6 | r0 = r6;
0x0003d102 bl 0x548e8 | addattr32 ();
0x0003d106 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0003d108 movs r2, 3 | r2 = 3;
0x0003d10a mov.w r1, 0x400 | r1 = 0x400;
0x0003d10e mov r0, r6 | r0 = r6;
0x0003d110 bl 0x548b0 | addattr8 ();
0x0003d114 b 0x3d074 | goto label_16;
| label_52:
0x0003d116 ldr.w r1, [pc, 0x424] |
0x0003d11a ldr r0, [r5] | r0 = *(r5);
0x0003d11c add r1, pc | r1 = 0x7a65e;
0x0003d11e bl 0x4884c | r0 = matches ();
0x0003d122 cmp r0, 0 |
| if (r0 == 0) {
0x0003d124 beq.w 0x3cf8e | goto label_17;
| }
0x0003d128 ldr.w r1, [pc, 0x414] | r1 = *(0x0003d540);
0x0003d12c ldr r0, [r5] | r0 = *(r5);
0x0003d12e add r1, pc | r1 += pc;
0x0003d130 bl 0x4884c | r0 = matches ();
0x0003d134 cmp r0, 0 |
| if (r0 != 0) {
0x0003d136 bne 0x3d220 | goto label_70;
| }
| label_24:
0x0003d138 subs r4, 1 | r4--;
0x0003d13a add.w r7, r5, 4 | r7 = r5 + 4;
| if (r4 == 1) {
0x0003d13e beq.w 0x3d2ce | goto label_28;
| }
0x0003d142 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x0003d144 add r6, sp, 0x58 | r6 += arg_58h;
0x0003d146 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0003d148 lsls r1, r3, 0x1b | r1 = r3 << 0x1b;
| if (r1 < r3) {
0x0003d14a bmi.w 0x3d3ce | goto label_71;
| }
0x0003d14e ldr r1, [pc, 0x3f4] |
0x0003d150 orr r3, r3, 0x10 | r3 |= 0x10;
0x0003d154 mov r0, r2 | r0 = r2;
0x0003d156 str r2, [sp, 0x14] | var_14h = r2;
0x0003d158 str r3, [r6] | *(r6) = r3;
0x0003d15a add r1, pc | r1 = 0x7a6a4;
0x0003d15c blx 0x8668 | strcmp (r0, r1);
0x0003d160 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0003d162 cmp r0, 0 |
| if (r0 != 0) {
0x0003d164 bne.w 0x3d292 | goto label_72;
| }
0x0003d168 movs r3, 1 | r3 = 1;
0x0003d16a str r3, [sp, 0x28] | var_28h = r3;
0x0003d16c b 0x3cf14 | goto label_14;
| label_68:
0x0003d16e ldr.w r3, [r8] | r3 = *(r8);
0x0003d172 mov.w r1, 0x400 | r1 = 0x400;
0x0003d176 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d178 movs r2, 1 | r2 = 1;
0x0003d17a bl 0x548e8 | addattr32 ();
0x0003d17e ldrh.w r3, [fp] | r3 = *(fp);
0x0003d182 lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 < r3) {
0x0003d184 bmi.w 0x3d02e | goto label_18;
| }
0x0003d188 b 0x3d052 | goto label_19;
| label_54:
0x0003d18a ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d18c movs r3, 1 | r3 = 1;
0x0003d18e movs r2, 0xc | r2 = 0xc;
0x0003d190 mov.w r1, 0x400 | r1 = 0x400;
0x0003d194 bl 0x548b0 | addattr8 ();
0x0003d198 b 0x3cf14 | goto label_14;
| label_60:
0x0003d19a and r2, r5, 8 | r2 = r5 & 8;
0x0003d19e orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x0003d1a0 beq.w 0x3d070 | goto label_20;
| }
0x0003d1a4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0003d1a6 movs r2, 3 | r2 = 3;
0x0003d1a8 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d1aa mov.w r1, 0x400 | r1 = 0x400;
0x0003d1ae bl 0x548b0 | addattr8 ();
0x0003d1b2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0003d1b4 cmp r3, 0 |
| if (r3 != 0) {
0x0003d1b6 bne.w 0x3d070 | goto label_20;
| }
0x0003d1ba b 0x3d074 | goto label_16;
| label_65:
0x0003d1bc ldr r3, [sp, 0x34] | r3 = var_34h;
0x0003d1be movs r2, 9 | r2 = 9;
0x0003d1c0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d1c2 mov.w r1, 0x400 | r1 = 0x400;
0x0003d1c6 bl 0x548b0 | addattr8 ();
0x0003d1ca lsls r0, r5, 0x15 | r0 = r5 << 0x15;
| if (r0 >= r5) {
0x0003d1cc bpl.w 0x3d0a6 | goto label_21;
| }
| label_66:
0x0003d1d0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0003d1d2 movs r2, 0xa | r2 = 0xa;
0x0003d1d4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d1d6 mov.w r1, 0x400 | r1 = 0x400;
0x0003d1da bl 0x548b0 | addattr8 ();
0x0003d1de b 0x3d0a6 | goto label_21;
| label_64:
0x0003d1e0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0003d1e2 movs r2, 8 | r2 = 8;
0x0003d1e4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d1e6 mov.w r1, 0x400 | r1 = 0x400;
0x0003d1ea bl 0x548b0 | addattr8 ();
0x0003d1ec invalid |
| label_63:
0x0003d1f0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d1f2 movs r2, 6 | r2 = 6;
0x0003d1f4 mov.w r1, 0x400 | r1 = 0x400;
0x0003d1f8 bl 0x5489c | addattr ();
0x0003d1fc b 0x3d094 | goto label_22;
| label_62:
0x0003d1fe rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0003d200 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d202 uxth r3, r3 | r3 = (int16_t) r3;
0x0003d204 movs r2, 5 | r2 = 5;
0x0003d206 mov.w r1, 0x400 | r1 = 0x400;
0x0003d20a bl 0x548cc | addattr16 ();
0x0003d20e b 0x3d08c | goto label_23;
| label_61:
0x0003d210 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0003d212 movs r2, 3 | r2 = 3;
0x0003d214 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d216 mov.w r1, 0x400 | r1 = 0x400;
0x0003d21a bl 0x548b0 | addattr8 ();
0x0003d21e b 0x3d070 | goto label_20;
| label_70:
0x0003d220 ldr r1, [pc, 0x324] |
0x0003d222 ldr r0, [r5] | r0 = *(r5);
0x0003d224 add r1, pc | r1 = 0x7a770;
0x0003d226 bl 0x4884c | r0 = matches ();
0x0003d22a cmp r0, 0 |
| if (r0 == 0) {
0x0003d22c beq 0x3d138 | goto label_24;
| }
0x0003d22e ldr r1, [pc, 0x31c] |
0x0003d230 ldr r0, [r5] | r0 = *(r5);
0x0003d232 add r1, pc | r1 = 0x7a784;
0x0003d234 bl 0x4884c | r0 = matches ();
0x0003d238 cmp r0, 0 |
| if (r0 != 0) {
0x0003d23a bne 0x3d2da | goto label_73;
| }
0x0003d23c subs r4, 1 | r4--;
0x0003d23e add.w r7, r5, 4 | r7 = r5 + 4;
| if (r4 == 1) {
0x0003d242 beq 0x3d2ce | goto label_28;
| }
0x0003d244 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x0003d246 add r6, sp, 0x58 | r6 += arg_58h;
0x0003d248 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x0003d24a lsls r0, r3, 0x12 | r0 = r3 << 0x12;
| if (r0 < r3) {
0x0003d24c bmi.w 0x3d3a6 | goto label_74;
| }
0x0003d250 ldr r1, [pc, 0x2fc] |
0x0003d252 orr r3, r3, 0x2000 | r3 |= 0x2000;
0x0003d256 mov r0, r5 | r0 = r5;
0x0003d258 str r3, [r6] | *(r6) = r3;
0x0003d25a add r1, pc | r1 = 0x7a7ae;
0x0003d25c blx 0x8668 | r0 = strcmp (r0, r1);
0x0003d260 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x0003d262 cbz r0, 0x3d284 |
0x0003d264 ldr r1, [pc, 0x2ec] |
0x0003d266 mov r0, r5 | r0 = r5;
0x0003d268 add r1, pc | r1 = 0x7a7c0;
0x0003d26a blx 0x8668 | r0 = strcmp (r0, r1);
0x0003d26e cmp r0, 0 |
| if (r0 == 0) {
0x0003d270 beq 0x3d328 | goto label_75;
| }
0x0003d272 ldr r1, [pc, 0x2e4] |
0x0003d274 mov r0, r5 | r0 = r5;
0x0003d276 add r1, pc | r1 = 0x7a7d4;
0x0003d278 blx 0x8668 | r0 = strcmp (r0, r1);
0x0003d27c cmp r0, 0 |
| if (r0 != 0) {
0x0003d27e bne.w 0x3d3e2 | goto label_76;
| }
0x0003d282 movs r3, 2 | r3 = 2;
| }
| label_26:
0x0003d284 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0003d286 movs r2, 0xd | r2 = 0xd;
0x0003d288 mov.w r1, 0x400 | r1 = 0x400;
0x0003d28c bl 0x548b0 | addattr8 ();
0x0003d290 b 0x3cf14 | goto label_14;
| label_72:
0x0003d292 add r3, sp, 0x54 | r3 += arg_54h;
0x0003d294 mov r1, r2 | r1 = r2;
0x0003d296 mov r0, r3 | r0 = r3;
0x0003d298 str r3, [sp, 0x14] | var_14h = r3;
0x0003d29a bl 0x4ad44 | rtnl_dsfield_a2n ();
0x0003d29e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0003d2a0 cmp r0, 0 |
| if (r0 != 0) {
0x0003d2a2 bne 0x3d336 | goto label_77;
| }
0x0003d2a4 ldrb r3, [r3] | r3 = *(r3);
0x0003d2a6 str r3, [sp, 0x28] | var_28h = r3;
0x0003d2a8 b 0x3cf14 | goto label_14;
| label_48:
0x0003d2aa ldr r0, [pc, 0x2b0] |
0x0003d2ac ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d2ae add r0, pc | r0 = 0x7a810;
0x0003d2b0 bl 0x486a4 | invarg ();
| label_46:
0x0003d2b4 ldr r0, [pc, 0x2a8] |
0x0003d2b6 movs r2, 0x2b | r2 = 0x2b;
0x0003d2b8 ldr r3, [pc, 0x2a8] | r3 = *(0x3d564);
0x0003d2ba add r0, pc | r0 = 0x7a81e;
| label_25:
0x0003d2bc ldr r4, [sp, 0x40] | r4 = *(arg_40h);
0x0003d2be movs r1, 1 | r1 = 1;
0x0003d2c0 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0003d2c2 mov.w r4, -1 | r4 = -1;
0x0003d2c6 ldr r3, [r3] | r3 = *(r3);
0x0003d2c8 blx 0x88c4 | fcn_000088c4 ();
0x0003d2cc b 0x3d0a6 | goto label_21;
| do {
| label_28:
0x0003d2ce bl 0x48640 | incomplete_command ();
| label_47:
0x0003d2d2 ldr r0, [pc, 0x294] |
0x0003d2d4 add r0, pc | r0 = 0x7a842;
0x0003d2d6 bl 0x48714 | duparg2 ();
| label_73:
0x0003d2da ldr r1, [pc, 0x290] |
0x0003d2dc ldr r0, [r5] | r0 = *(r5);
0x0003d2de add r1, pc | r1 = 0x7a850;
0x0003d2e0 bl 0x4884c | r0 = matches ();
0x0003d2e4 cmp r0, 0 |
| if (r0 != 0) {
0x0003d2e6 bne 0x3d352 | goto label_78;
| }
| label_27:
0x0003d2e8 subs r4, 1 | r4--;
0x0003d2ea add.w r7, r5, 4 | r7 = r5 + 4;
0x0003d2ee beq 0x3d2ce |
| } while (r4 == 1);
0x0003d2f0 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x0003d2f2 add r6, sp, 0x58 | r6 += arg_58h;
0x0003d2f4 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d2f6 and r2, r3, 0x800 | r2 = r3 & 0x800;
| if (r2 == 0) {
0x0003d2fa cbnz r2, 0x3d34a |
0x0003d2fc orr r3, r3, 0x800 | r3 |= 0x800;
0x0003d300 str r3, [r6] | *(r6) = r3;
0x0003d302 add r3, sp, 0x54 | r3 += arg_54h;
0x0003d304 mov r0, r3 | r0 = r3;
0x0003d306 str r3, [sp, 0x14] | var_14h = r3;
0x0003d308 bl 0x47ddc | get_u32 ();
0x0003d30c ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r0 == 0) {
0x0003d30e cbnz r0, 0x3d340 |
0x0003d310 ldr r2, [r3] | r2 = *(r3);
0x0003d312 lsrs r3, r2, 0x14 | r3 = r2 >> 0x14;
0x0003d314 lsls r3, r3, 0x14 | r3 <<= 0x14;
| if (r3 != 0) {
0x0003d316 cbnz r3, 0x3d340 | goto label_79;
| }
0x0003d318 rev r3, r2 | r2 = SWAP32 (r3);
0x0003d31a str r3, [sp, 0x30] | var_30h = r3;
0x0003d31c b 0x3cf14 | goto label_14;
| label_58:
0x0003d31e ldr r0, [pc, 0x250] |
0x0003d320 movs r2, 0x34 | r2 = 0x34;
0x0003d322 ldr r3, [pc, 0x240] | r3 = *(0x3d566);
0x0003d324 add r0, pc | r0 = 0x7a89a;
0x0003d326 b 0x3d2bc | goto label_25;
| label_75:
0x0003d328 movs r3, 1 | r3 = 1;
0x0003d32a b 0x3d284 | goto label_26;
| label_55:
0x0003d32c ldr r0, [pc, 0x244] |
0x0003d32e ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d330 add r0, pc | r0 = 0x7a8a8;
0x0003d332 bl 0x486a4 | invarg ();
| label_77:
0x0003d336 ldr r0, [pc, 0x240] |
0x0003d338 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d33a add r0, pc | r0 = 0x7a8b8;
0x0003d33c bl 0x486a4 | invarg ();
| }
| label_79:
0x0003d340 ldr r0, [pc, 0x238] |
0x0003d342 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d344 add r0, pc | r0 = 0x7a8c4;
0x0003d346 bl 0x486a4 | invarg ();
| }
0x0003d34a ldr r0, [pc, 0x234] |
0x0003d34c add r0, pc | r0 = 0x7a8d2;
0x0003d34e bl 0x48714 | duparg2 ();
| label_78:
0x0003d352 ldr r1, [pc, 0x230] |
0x0003d354 ldr r0, [r5] | r0 = *(r5);
0x0003d356 add r1, pc | r1 = 0x7a8e0;
0x0003d358 bl 0x4884c | r0 = matches ();
0x0003d35c cmp r0, 0 |
| if (r0 == 0) {
0x0003d35e beq 0x3d2e8 | goto label_27;
| }
0x0003d360 ldr r3, [pc, 0x224] |
0x0003d362 ldr r0, [r5] | r0 = *(r5);
0x0003d364 add r3, pc | r3 = 0x7a8f0;
0x0003d366 mov r1, r3 | r1 = r3;
0x0003d368 str r3, [sp, 0x14] | var_14h = r3;
0x0003d36a bl 0x4884c | matches ();
0x0003d36e str r0, [sp, 0x2c] | var_2ch = r0;
0x0003d370 cmp r0, 0 |
| if (r0 != 0) {
0x0003d372 bne 0x3d3ec | goto label_80;
| }
0x0003d374 subs r4, 1 | r4--;
0x0003d376 add.w r7, r5, 4 | r7 = r5 + 4;
| if (r4 == 1) {
0x0003d37a beq 0x3d2ce | goto label_28;
| }
0x0003d37c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0003d37e add r6, sp, 0x58 | r6 += arg_58h;
0x0003d380 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0003d382 movs r1, 5 | r1 = 5;
0x0003d384 mov r0, r6 | r0 = r6;
0x0003d386 str r3, [sp, 0x44] | *(arg_44h) = r3;
0x0003d388 bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d38c ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x0003d38e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003d390 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0003d392 mov r1, r3 | r1 = r3;
0x0003d394 bl 0x47e5c | r0 = get_u16 ();
0x0003d398 cmp r0, 0 |
| if (r0 == 0) {
0x0003d39a beq.w 0x3cf14 | goto label_14;
| }
0x0003d39e ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d3a0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0003d3a2 bl 0x486a4 | invarg ();
| label_74:
0x0003d3a6 ldr r0, [pc, 0x1e4] |
0x0003d3a8 mov r1, r5 | r1 = r5;
0x0003d3aa add r0, pc | r0 = 0x7a93c;
0x0003d3ac bl 0x48714 | duparg2 ();
| label_69:
0x0003d3b0 ldr r0, [pc, 0x1dc] |
0x0003d3b2 movs r2, 0x2a | r2 = 0x2a;
0x0003d3b4 ldr r3, [pc, 0x1ac] | r3 = *(0x3d564);
0x0003d3b6 add r0, pc | r0 = 0x7a94a;
0x0003d3b8 b 0x3d2bc | goto label_25;
| label_51:
0x0003d3ba ldr r0, [sp, 0xc] | r0 = var_ch;
0x0003d3bc bl 0x48714 | duparg2 ();
| label_67:
0x0003d3c0 blx 0x87f8 | fcn_000087f8 ();
| label_53:
0x0003d3c4 ldr r0, [pc, 0x1cc] |
0x0003d3c6 mov r1, r3 | r1 = r3;
0x0003d3c8 add r0, pc | r0 = 0x7a960;
0x0003d3ca bl 0x48714 | duparg2 ();
| label_71:
0x0003d3ce ldr r0, [pc, 0x1c8] |
0x0003d3d0 mov r1, r2 | r1 = r2;
0x0003d3d2 add r0, pc | r0 = 0x7a970;
0x0003d3d4 bl 0x48714 | duparg2 ();
| label_56:
0x0003d3d8 ldr r0, [pc, 0x1c0] |
0x0003d3da ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0003d3dc add r0, pc | r0 = 0x7a97c;
0x0003d3de bl 0x486a4 | invarg ();
| label_76:
0x0003d3e2 ldr r0, [pc, 0x1bc] |
0x0003d3e4 mov r1, r5 | r1 = r5;
0x0003d3e6 add r0, pc | r0 = 0x7a98c;
0x0003d3e8 bl 0x486a4 | invarg ();
| label_80:
0x0003d3ec ldr r1, [pc, 0x1b4] |
0x0003d3ee ldr r0, [r5] | r0 = *(r5);
0x0003d3f0 add r1, pc | r1 = 0x7a998;
0x0003d3f2 bl 0x4884c | r0 = matches ();
| if (r0 != 0) {
0x0003d3f6 cbnz r0, 0x3d40e | goto label_81;
| }
0x0003d3f8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
| do {
0x0003d3fa str r3, [sp, 0x18] | var_18h = r3;
0x0003d3fc add r6, sp, 0x58 | r6 += arg_58h;
0x0003d3fe ldr r3, [r5] | r3 = *(r5);
0x0003d400 movs r1, 6 | r1 = 6;
0x0003d402 mov r0, r6 | r0 = r6;
0x0003d404 mov r7, r5 | r7 = r5;
0x0003d406 mov r2, r3 | r2 = r3;
0x0003d408 bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d40c b 0x3cf14 | goto label_14;
| label_81:
0x0003d40e ldr r1, [pc, 0x198] |
0x0003d410 ldr r0, [r5] | r0 = *(r5);
0x0003d412 add r1, pc | r1 = 0x7a9c0;
0x0003d414 bl 0x4884c | r0 = matches ();
0x0003d418 mov r3, r0 | r3 = r0;
0x0003d41a cmp r0, 0 |
0x0003d41c beq 0x3d3fa |
| } while (r0 == 0);
0x0003d41e ldr r1, [pc, 0x18c] |
0x0003d420 ldr r0, [r5] | r0 = *(r5);
0x0003d422 add r1, pc | r1 = 0x7a9d4;
0x0003d424 bl 0x4884c | r0 = matches ();
| if (r0 == 0) {
0x0003d428 cbnz r0, 0x3d440 |
0x0003d42a ldr r3, [r5] | r3 = *(r5);
0x0003d42c add r6, sp, 0x58 | r6 += arg_58h;
0x0003d42e movs r2, 1 | r2 = 1;
0x0003d430 movs r1, 8 | r1 = 8;
0x0003d432 str r2, [sp, 0x38] | var_38h = r2;
0x0003d434 mov r0, r6 | r0 = r6;
0x0003d436 mov r2, r3 | r2 = r3;
0x0003d438 mov r7, r5 | r7 = r5;
0x0003d43a bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d43e b 0x3cf14 | goto label_14;
| }
0x0003d440 ldr r1, [pc, 0x16c] |
0x0003d442 ldr r0, [r5] | r0 = *(r5);
0x0003d444 add r1, pc | r1 = 0x7a9f8;
0x0003d446 bl 0x4884c | r0 = matches ();
| if (r0 == 0) {
0x0003d44a cbnz r0, 0x3d460 |
0x0003d44c ldr r3, [r5] | r3 = *(r5);
0x0003d44e add r6, sp, 0x58 | r6 += arg_58h;
0x0003d450 str r0, [sp, 0x38] | var_38h = r0;
0x0003d452 movs r1, 8 | r1 = 8;
0x0003d454 mov r0, r6 | r0 = r6;
0x0003d456 mov r7, r5 | r7 = r5;
0x0003d458 mov r2, r3 | r2 = r3;
0x0003d45a bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d45e b 0x3cf14 | goto label_14;
| }
0x0003d460 ldr r1, [pc, 0x150] |
0x0003d462 ldr r0, [r5] | r0 = *(r5);
0x0003d464 add r1, pc | r1 = 0x7aa1c;
0x0003d466 bl 0x4884c | r0 = matches ();
| if (r0 == 0) {
0x0003d46a cbnz r0, 0x3d482 |
0x0003d46c ldr r3, [r5] | r3 = *(r5);
0x0003d46e add r6, sp, 0x58 | r6 += arg_58h;
0x0003d470 movs r2, 1 | r2 = 1;
0x0003d472 movs r1, 9 | r1 = 9;
0x0003d474 str r2, [sp, 0x34] | var_34h = r2;
0x0003d476 mov r0, r6 | r0 = r6;
0x0003d478 mov r2, r3 | r2 = r3;
0x0003d47a mov r7, r5 | r7 = r5;
0x0003d47c bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d480 b 0x3cf14 | goto label_14;
| }
0x0003d482 ldr r1, [pc, 0x134] |
0x0003d484 ldr r0, [r5] | r0 = *(r5);
0x0003d486 add r1, pc | r1 = 0x7aa44;
0x0003d488 bl 0x4884c | r0 = matches ();
| if (r0 == 0) {
0x0003d48c cbnz r0, 0x3d4a2 |
0x0003d48e ldr r3, [r5] | r3 = *(r5);
0x0003d490 add r6, sp, 0x58 | r6 += arg_58h;
0x0003d492 str r0, [sp, 0x34] | var_34h = r0;
0x0003d494 movs r1, 9 | r1 = 9;
0x0003d496 mov r0, r6 | r0 = r6;
0x0003d498 mov r7, r5 | r7 = r5;
0x0003d49a mov r2, r3 | r2 = r3;
0x0003d49c bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d4a0 b 0x3cf14 | goto label_14;
| }
0x0003d4a2 ldr r1, [pc, 0x118] |
0x0003d4a4 ldr r0, [r5] | r0 = *(r5);
0x0003d4a6 add r1, pc | r1 = 0x7aa68;
0x0003d4a8 bl 0x4884c | r0 = matches ();
| if (r0 == 0) {
0x0003d4ac cbnz r0, 0x3d4c4 |
0x0003d4ae ldr r3, [r5] | r3 = *(r5);
0x0003d4b0 add r6, sp, 0x58 | r6 += arg_58h;
0x0003d4b2 movs r2, 1 | r2 = 1;
0x0003d4b4 movs r1, 0xa | r1 = 0xa;
0x0003d4b6 str r2, [sp, 0x3c] | var_3ch = r2;
0x0003d4b8 mov r0, r6 | r0 = r6;
0x0003d4ba mov r2, r3 | r2 = r3;
0x0003d4bc mov r7, r5 | r7 = r5;
0x0003d4be bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d4c2 b 0x3cf14 | goto label_14;
| }
0x0003d4c4 ldr r1, [pc, 0xf8] |
0x0003d4c6 ldr r0, [r5] | r0 = *(r5);
0x0003d4c8 add r1, pc | r1 = 0x7aa8c;
0x0003d4ca bl 0x4884c | r0 = matches ();
| if (r0 == 0) {
0x0003d4ce cbnz r0, 0x3d4e4 |
0x0003d4d0 ldr r3, [r5] | r3 = *(r5);
0x0003d4d2 add r6, sp, 0x58 | r6 += arg_58h;
0x0003d4d4 str r0, [sp, 0x3c] | var_3ch = r0;
0x0003d4d6 movs r1, 0xa | r1 = 0xa;
0x0003d4d8 mov r0, r6 | r0 = r6;
0x0003d4da mov r7, r5 | r7 = r5;
0x0003d4dc mov r2, r3 | r2 = r3;
0x0003d4de bl 0x3ca10 | fcn_0003ca10 (r0, r1, r2, r3, r4, r5, r6);
0x0003d4e2 b 0x3cf14 | goto label_14;
| }
0x0003d4e4 ldr r1, [pc, 0xdc] |
0x0003d4e6 ldr r0, [r5] | r0 = *(r5);
0x0003d4e8 add r1, pc | r1 = 0x7aab0;
0x0003d4ea bl 0x4884c | r0 = matches ();
| if (r0 != 0) {
0x0003d4ee cbz r0, 0x3d504 |
0x0003d4f0 ldr r0, [pc, 0x70] |
0x0003d4f2 movs r1, 1 | r1 = 1;
0x0003d4f4 ldr r4, [sp, 0x40] | r4 = *(arg_40h);
0x0003d4f6 ldr r2, [pc, 0xd0] |
0x0003d4f8 ldr r3, [r5] | r3 = *(r5);
0x0003d4fa ldr r0, [r4, r0] | r0 = *((r4 + r0));
0x0003d4fc add r2, pc | r2 = 0x7aaca;
0x0003d4fe ldr r0, [r0] | r0 = *(0x3d564);
0x0003d500 blx 0x8be8 | fcn_00008be8 ();
| }
0x0003d504 mov.w r4, -1 | r4 = -1;
0x0003d508 bl 0x3c9d4 | fcn_0003c9d4 ();
0x0003d50c b 0x3d0a6 | goto label_21;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x1dba0 */
| #include <stdint.h>
|
; (fcn) sym.iplink_types_usage () | void iplink_types_usage () {
0x0001dba0 ldr r3, [pc, 0x18] |
0x0001dba2 movw r2, 0x181 | r2 = 0x181;
0x0001dba6 ldr.w ip, [pc, 0x18] | ip = *(0x1dbc2);
0x0001dbaa movs r1, 1 | r1 = 1;
0x0001dbac ldr r0, [pc, 0x14] |
0x0001dbae add r3, pc |
0x0001dbb0 ldr.w r3, [r3, ip] |
0x0001dbb4 add r0, pc | r0 = 0x3b77c;
0x0001dbb6 ldr r3, [r3] | r3 = *(0x3b76e);
0x0001dbb8 b.w 0x88c0 | return void (*0x88c0)() ();
| }
[*] Function strcat used 1 times ip.iproute2