[*] Binary protection state of libudev.so.1.7.2
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of libudev.so.1.7.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/libudev.so.1.7.2 @ 0xae88 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000ae88 () | void fcn_0000ae88 (uint32_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_4;
| int16_t var_8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000ae88 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000ae8c mov r6, r2 | r6 = r2;
0x0000ae8e ldr r2, [pc, 0x264] |
0x0000ae90 sub sp, 0x2c |
0x0000ae92 add r7, sp, 8 | r7 += var_8h;
0x0000ae94 ldr r3, [pc, 0x260] | r3 = *(0xb0f8);
0x0000ae96 add r2, pc | r2 = 0x15f90;
0x0000ae98 ldr r3, [r2, r3] |
0x0000ae9a ldr r3, [r3] | r3 = *(0x15f90);
0x0000ae9c str r3, [r7, 0x1c] | *((r7 + 0x1c)) = r3;
0x0000ae9e mov.w r3, 0 | r3 = 0;
0x0000aea2 cmp r0, 0 |
| if (var_0h_4 == ) {
0x0000aea4 beq.w 0xb064 | goto label_4;
| }
0x0000aea8 mov r4, r0 | r4 = r0;
0x0000aeaa mov r0, r1 | r0 = r1;
0x0000aeac mov r5, r1 | r5 = r1;
0x0000aeae bl 0x18a80 | r0 = fcn_00018a80 (r0);
0x0000aeb2 cmp r0, 0 |
| if (r0 == 0) {
0x0000aeb4 beq.w 0xb080 | goto label_5;
| }
0x0000aeb8 mov r0, r6 | r0 = r6;
0x0000aeba bl 0x18a80 | r0 = fcn_00018a80 (r0);
0x0000aebe cmp r0, 0 |
| if (r0 == 0) {
0x0000aec0 beq.w 0xb09c | goto label_6;
| }
0x0000aec4 ldr r1, [pc, 0x234] |
0x0000aec6 mov r0, r5 | r0 = r5;
0x0000aec8 add r1, pc | r1 = 0x15fc8;
0x0000aeca blx 0x3490 | r0 = fcn_00003490 ();
0x0000aece mov r3, r0 | r3 = r0;
0x0000aed0 cmp r0, 0 |
| if (r0 != 0) {
0x0000aed2 bne 0xafaa | goto label_7;
| }
0x0000aed4 ldr r0, [pc, 0x228] |
0x0000aed6 add.w r8, r7, 0xc | r8 = r7 + 0xc;
0x0000aeda ldr r2, [pc, 0x228] |
0x0000aedc mov sb, r8 | sb = r8;
0x0000aede str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x0000aee0 ldr r3, [pc, 0x224] |
0x0000aee2 add r0, pc | r0 = 0x15fe6;
0x0000aee4 add r2, pc | r2 = 0x15fee;
0x0000aee6 strd r0, r2, [r7, 0xc] | __asm ("strd r0, r2, [r7, 0xc]");
0x0000aeea add r3, pc | r3 = 0x15ff6;
0x0000aeec str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
| do {
0x0000aeee movs r3, 0 | r3 = 0;
0x0000aef0 mov r1, r6 | r1 = r6;
0x0000aef2 mov r2, r3 | r2 = r3;
0x0000aef4 str r4, [sp] | *(sp) = r4;
0x0000aef6 bl 0xab50 | r0 = fcn_0000ab50 (r0, r1, r2, r3);
0x0000aefa cmp r0, 0 |
| if (r0 < 0) {
0x0000aefc blt 0xaf8c | goto label_3;
| }
| if (r0 != 0) {
0x0000aefe bne 0xaf8a | goto label_0;
| }
0x0000af00 ldr r0, [sb, 4]! | r0 = *((sb += 4));
0x0000af04 cmp r0, 0 |
0x0000af06 bne 0xaeee |
| } while (r0 != 0);
| label_2:
0x0000af08 mov r0, r6 | r0 = r6;
0x0000af0a blx 0x37c8 | r0 = fcn_000037c8 ();
0x0000af0e add.w r3, r0, 8 | r3 = r0 + 8;
0x0000af12 adds r2, r0, 1 | r2 = r0 + 1;
0x0000af14 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0000af18 mov r1, r6 | r1 = r6;
0x0000af1a sub.w sp, sp, r3 |
0x0000af1e add r0, sp, 8 | r0 += var_8h;
0x0000af20 blx 0x3578 | r0 = mmap64 ()
0x0000af24 ldrb r3, [r0] | r3 = *(r0);
0x0000af26 mov sb, r0 | sb = r0;
| if (r3 == 0) {
0x0000af28 cbz r3, 0xaf3c | goto label_8;
| }
0x0000af2a mov r2, r0 | r2 = r0;
0x0000af2c movs r1, 0x21 | r1 = 0x21;
| do {
0x0000af2e cmp r3, 0x2f |
0x0000af30 it eq |
| if (r3 != 0x2f) {
0x0000af32 strbeq r1, [r2] | *(r2) = r1;
| }
0x0000af34 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0000af38 cmp r3, 0 |
0x0000af3a bne 0xaf2e |
| } while (r3 != 0);
| label_8:
0x0000af3c ldr.w sl, [pc, 0x1cc] |
0x0000af40 ldr r3, [pc, 0x1cc] |
0x0000af42 ldr r0, [pc, 0x1d0] |
0x0000af44 add sl, pc | sl = 0x16054;
0x0000af46 add r3, pc | r3 = 0x1605a;
0x0000af48 add r0, pc | r0 = 0x16062;
0x0000af4a str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0000af4c movs r3, 0 | r3 = 0;
0x0000af4e str r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x0000af50 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
| do {
0x0000af52 mov r3, sb | r3 = sb;
0x0000af54 mov r2, sl | r2 = sl;
0x0000af56 mov r1, r5 | r1 = r5;
0x0000af58 str r4, [sp] | *(sp) = r4;
0x0000af5a bl 0xab50 | r0 = fcn_0000ab50 (r0, r1, r2, r3);
0x0000af5e cmp r0, 0 |
| if (r0 < 0) {
0x0000af60 blt 0xaf8c | goto label_3;
| }
| if (r0 != 0) {
0x0000af62 bne 0xaf8a | goto label_0;
| }
0x0000af64 ldr r0, [r8, 4]! | r0 = *((r8 += 4));
0x0000af68 cmp r0, 0 |
0x0000af6a bne 0xaf52 |
| } while (r0 != 0);
0x0000af6c ldr.w r8, [pc, 0x1a8] |
0x0000af70 mov r3, sb | r3 = sb;
0x0000af72 ldr r0, [pc, 0x1a8] |
0x0000af74 mov r1, r5 | r1 = r5;
0x0000af76 str r4, [sp] | *(sp) = r4;
0x0000af78 add r8, pc | r8 = 0x16094;
0x0000af7a mov r2, r8 | r2 = r8;
0x0000af7c add r0, pc | r0 = 0x1609e;
0x0000af7e bl 0xab50 | r0 = fcn_0000ab50 (r0, r1, r2, r3);
0x0000af82 cmp r0, 0 |
| if (r0 < 0) {
0x0000af84 blt 0xaf8c | goto label_3;
| }
| if (r0 == 0) {
0x0000af86 beq.w 0xb0b8 | goto label_9;
| }
| label_0:
0x0000af8a movs r0, 0 | r0 = 0;
| do {
| label_3:
0x0000af8c ldr r2, [pc, 0x190] |
0x0000af8e ldr r3, [pc, 0x168] | r3 = *(0xb0fa);
0x0000af90 add r2, pc | r2 = 0x160b4;
0x0000af92 ldr r3, [r2, r3] | r3 = *(0x160b4);
0x0000af94 ldr r2, [r3] | r2 = *(0x160b4);
0x0000af96 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0000af98 eors r2, r3 | r2 ^= r3;
0x0000af9a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000af9e bne.w 0xb0ee | goto label_10;
| }
0x0000afa2 adds r7, 0x24 | r7 += 0x24;
0x0000afa4 mov sp, r7 |
0x0000afa6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0000afaa ldr r1, [pc, 0x178] |
0x0000afac mov r0, r5 | r0 = r5;
0x0000afae add r1, pc | r1 = 0x160d8;
0x0000afb0 blx 0x3490 | r0 = fcn_00003490 ();
0x0000afb4 cmp r0, 0 |
| if (r0 == 0) {
0x0000afb6 beq 0xb048 | goto label_11;
| }
0x0000afb8 ldr r1, [pc, 0x16c] |
0x0000afba mov r0, r5 | r0 = r5;
0x0000afbc add r1, pc | r1 = 0x160e8;
0x0000afbe blx 0x3490 | r0 = fcn_00003490 ();
0x0000afc2 mov r8, r0 | r8 = r0;
0x0000afc4 cmp r0, 0 |
| if (r0 != 0) {
0x0000afc6 bne 0xb05e | goto label_12;
| }
0x0000afc8 movs r1, 0x3a | r1 = 0x3a;
0x0000afca mov r0, r6 | r0 = r6;
0x0000afcc blx 0x37d4 | r0 = fcn_000037d4 ();
0x0000afd0 mov sb, r0 | sb = r0;
0x0000afd2 cmp r0, 0 |
| if (r0 == 0) {
0x0000afd4 beq 0xb05e | goto label_12;
| }
0x0000afd6 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x0000afd8 cmp r3, 0 |
| if (r3 == 0) {
0x0000afda beq 0xb05e | goto label_12;
| }
0x0000afdc subs r2, r0, r6 | r2 = r0 - r6;
0x0000afde cmp.w r2, 0x400000 |
| if (r2 > 0x400000) {
0x0000afe2 bhi 0xb0d8 | goto label_13;
| }
0x0000afe4 add.w r3, r2, 8 | r3 = r2 + 8;
0x0000afe8 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0000afec sub.w sp, sp, r3 |
0x0000aff0 add.w fp, sp, 0xf |
0x0000aff4 lsr.w r3, fp, 3 | r3 = fp >> 3;
0x0000aff8 bic fp, fp, 7 | fp = BIT_MASK (fp, 7);
0x0000affc strb.w r8, [r2, r3, lsl 3] | offset_0 = r3 << 3;
| *((r2 + offset_0)) = r8;
| if (r2 != 0) {
0x0000b000 cbz r2, 0xb00c |
0x0000b002 mov r0, fp | r0 = fp;
0x0000b004 mov r1, r6 | r1 = r6;
0x0000b006 blx 0x3578 | r0 = mmap64 ()
0x0000b00a mov fp, r0 |
| }
0x0000b00c ldr r2, [pc, 0x11c] |
0x0000b00e add.w r8, r7, 0xc | r8 = r7 + 0xc;
0x0000b012 ldr r3, [pc, 0x11c] |
0x0000b014 add.w sb, sb, 1 | sb++;
0x0000b018 ldr r0, [pc, 0x118] |
0x0000b01a mov sl, r8 | sl = r8;
0x0000b01c add r2, pc | r2 = 0x1614c;
0x0000b01e add r3, pc | r3 = 0x16154;
0x0000b020 add r0, pc | r0 = 0x16158;
0x0000b022 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0000b024 movs r3, 0 | r3 = 0;
0x0000b026 str r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x0000b028 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
| label_1:
0x0000b02a mov r3, sb | r3 = sb;
0x0000b02c mov r1, fp | r1 = fp;
0x0000b02e str r4, [sp] | *(sp) = r4;
0x0000b030 str r2, [r7, 4] | *((r7 + 4)) = r2;
0x0000b032 bl 0xab50 | r0 = fcn_0000ab50 (r0, r1, r2, r3);
0x0000b036 cmp r0, 0 |
0x0000b038 blt 0xaf8c |
| } while (r0 < 0);
| if (r0 != 0) {
0x0000b03a bne 0xaf8a | goto label_0;
| }
0x0000b03c ldr r0, [sl, 4]! | r0 = *((sl += 4));
0x0000b040 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0000b042 cmp r0, 0 |
| if (r0 != 0) {
0x0000b044 bne 0xb02a | goto label_1;
| }
0x0000b046 b 0xaf08 | goto label_2;
| label_11:
0x0000b048 mov r3, r0 | r3 = r0;
0x0000b04a mov r2, r0 | r2 = r0;
0x0000b04c ldr r0, [pc, 0xe8] |
0x0000b04e mov r1, r6 | r1 = r6;
0x0000b050 str r4, [sp] | *(sp) = r4;
0x0000b052 add r0, pc | r0 = 0x1618e;
0x0000b054 bl 0xab50 | r0 = fcn_0000ab50 (r0, r1, r2, r3);
0x0000b058 cmp r0, 0 |
| if (r0 < 0) {
0x0000b05a blt 0xaf8c | goto label_3;
| }
| if (r0 != 0) {
0x0000b05c bne 0xaf8a | goto label_0;
| }
| label_12:
0x0000b05e add.w r8, r7, 0xc | r8 = r7 + 0xc;
0x0000b062 b 0xaf08 | goto label_2;
| label_4:
0x0000b064 ldr r1, [pc, 0xd4] |
0x0000b066 mov.w r2, 0x146 | r2 = 0x146;
0x0000b06a ldr r3, [pc, 0xd4] |
0x0000b06c ldr r0, [pc, 0xd4] |
0x0000b06e add r1, pc | r1 = 0x161ae;
0x0000b070 add r3, pc | r3 = 0x161b6;
0x0000b072 adds r1, 7 | r1 += 7;
0x0000b074 add r0, pc | r0 = 0x161bc;
0x0000b076 bl 0x167c8 | fcn_000167c8 (r0, r1, r2, r3);
0x0000b07a mvn r0, 0x15 | r0 = ~0x15;
0x0000b07e b 0xaf8c | goto label_3;
| label_5:
0x0000b080 ldr r1, [pc, 0xc4] |
0x0000b082 movw r2, 0x147 | r2 = 0x147;
0x0000b086 ldr r3, [pc, 0xc4] |
0x0000b088 ldr r0, [pc, 0xc4] |
0x0000b08a add r1, pc | r1 = 0x161d6;
0x0000b08c add r3, pc | r3 = 0x161de;
0x0000b08e adds r1, 7 | r1 += 7;
0x0000b090 add r0, pc | r0 = 0x161e4;
0x0000b092 bl 0x167c8 | fcn_000167c8 (r0, r1, r2, r3);
0x0000b096 mvn r0, 0x15 | r0 = ~0x15;
0x0000b09a b 0xaf8c | goto label_3;
| label_6:
0x0000b09c ldr r1, [pc, 0xb4] |
0x0000b09e mov.w r2, 0x148 | r2 = 0x148;
0x0000b0a0 strb r4, [r4, 0xa] | *((r4 + 0xa)) = r4;
0x0000b0a2 ldr r3, [pc, 0xb4] |
0x0000b0a4 ldr r0, [pc, 0xb4] |
0x0000b0a6 add r1, pc | r1 = 0x161fe;
0x0000b0a8 add r3, pc | r3 = 0x16206;
0x0000b0aa adds r1, 7 | r1 += 7;
0x0000b0ac add r0, pc | r0 = 0x1620c;
0x0000b0ae bl 0x167c8 | fcn_000167c8 (r0, r1, r2, r3);
0x0000b0b2 mvn r0, 0x15 | r0 = ~0x15;
0x0000b0b6 b 0xaf8c | goto label_3;
| label_9:
0x0000b0b8 ldr r0, [pc, 0xa4] |
0x0000b0ba mov r3, r6 | r3 = r6;
0x0000b0bc mov r2, r8 | r2 = r8;
0x0000b0be mov r1, r5 | r1 = r5;
0x0000b0c0 str r4, [sp] | *(sp) = r4;
0x0000b0c2 add r0, pc | r0 = 0x16226;
0x0000b0c4 bl 0xab50 | fcn_0000ab50 (r0, r1, r2, r3);
0x0000b0c6 stc2l p8, c2, [r4, -0] | __asm ("stc2l p8, c2, [r4, -0]");
0x0000b0c8 cmp r0, 0 |
| if (r0 < 0) {
0x0000b0ca blt.w 0xaf8c | goto label_3;
| }
| if (r0 != 0) {
0x0000b0ce bne.w 0xaf8a | goto label_0;
| }
0x0000b0d2 mvn r0, 0x12 | r0 = ~0x12;
0x0000b0d6 b 0xaf8c | goto label_3;
| label_13:
0x0000b0d8 ldr r1, [pc, 0x88] |
0x0000b0da movw r2, 0x163 | r2 = 0x163;
0x0000b0de ldr r3, [pc, 0x88] |
0x0000b0e0 ldr r0, [pc, 0x88] |
0x0000b0e2 add r1, pc | r1 = 0x1624a;
0x0000b0e4 add r3, pc | r3 = 0x16252;
0x0000b0e6 adds r1, 7 | r1 += 7;
0x0000b0e8 add r0, pc | r0 = 0x16258;
0x0000b0ea bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
| label_10:
0x0000b0ee blx 0x35d0 | fcn_000035d0 ();
0x0000b0f2 nop |
0x0000b0f4 ldr r6, [r7, 0x68] | r6 = *((r7 + 0x68));
0x0000b0f6 movs r2, r0 | r2 = r0;
0x0000b0f8 lsls r4, r5, 9 | r4 = r5 << 9;
0x0000b0fa movs r0, r0 |
0x0000b0fc asrs r4, r7, 0xf | r4 = r7 >> 0xf;
0x0000b0fe movs r1, r0 | r1 = r0;
0x0000b100 cmp r4, 0x56 |
0x0000b102 movs r1, r0 | r1 = r0;
0x0000b104 cmp r4, 0xa0 |
0x0000b106 movs r1, r0 | r1 = r0;
0x0000b108 cmp r4, 0xa6 |
0x0000b10a movs r1, r0 | r1 = r0;
0x0000b10c cmp r3, 0x48 |
0x0000b10e movs r1, r0 | r1 = r0;
0x0000b110 cmp r4, 0x3e |
0x0000b112 movs r1, r0 | r1 = r0;
0x0000b114 cmp r3, 0xf0 |
0x0000b116 movs r1, r0 | r1 = r0;
0x0000b118 cmp r3, 0x1c |
0x0000b11a movs r1, r0 | r1 = r0;
0x0000b11c cmp r4, 0x14 |
0x0000b11e movs r1, r0 | r1 = r0;
0x0000b120 ldr r4, [r0, 0x5c] | r4 = *((r0 + 0x5c));
0x0000b122 movs r2, r0 | r2 = r0;
0x0000b124 asrs r2, r6, 0x15 | r2 = r6 >> 0x15;
0x0000b126 movs r1, r0 | r1 = r0;
0x0000b128 asrs r4, r2, 0x17 | r4 = r2 >> 0x17;
0x0000b12a movs r1, r0 | r1 = r0;
0x0000b12c cmp r3, 0xa4 |
0x0000b12e movs r1, r0 | r1 = r0;
0x0000b130 cmp r3, 0x66 |
0x0000b132 movs r1, r0 | r1 = r0;
0x0000b134 cmp r3, 0x18 |
0x0000b136 movs r1, r0 | r1 = r0;
0x0000b138 cmp r3, 0x4a |
0x0000b13a movs r1, r0 | r1 = r0;
0x0000b13c cmp r0, 0xf2 |
0x0000b13e movs r1, r0 | r1 = r0;
0x0000b140 adds r5, 0x30 | r5 += 0x30;
0x0000b142 movs r1, r0 | r1 = r0;
0x0000b144 asrs r4, r1, 9 | r4 = r1 >> 9;
0x0000b146 movs r1, r0 | r1 = r0;
0x0000b148 cmp r0, 0xd6 |
0x0000b14a movs r1, r0 | r1 = r0;
0x0000b14c adds r5, 0x14 | r5 += 0x14;
0x0000b14e movs r1, r0 | r1 = r0;
0x0000b150 cmp r2, 0xb8 |
0x0000b152 movs r1, r0 | r1 = r0;
0x0000b154 cmp r0, 0xba |
0x0000b156 movs r1, r0 | r1 = r0;
0x0000b158 adds r4, 0xf8 | r4 += 0xf8;
0x0000b15a movs r1, r0 | r1 = r0;
0x0000b15c cmp r2, 0xbc |
0x0000b15e movs r1, r0 | r1 = r0;
0x0000b160 cmp r3, 0xa |
0x0000b162 movs r1, r0 | r1 = r0;
0x0000b164 cmp r0, 0x7e |
0x0000b166 movs r1, r0 | r1 = r0;
0x0000b168 adds r4, 0xbc | r4 += 0xbc;
0x0000b16a movs r1, r0 | r1 = r0;
0x0000b16c cmp r2, 0xc4 |
0x0000b16e 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/libudev.so.1.7.2 @ 0xb510 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000b510 () | void fcn_0000b510 (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h_4;
| int16_t var_0h;
| int32_t var_0h_3;
| int32_t var_ch;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
0x0000b510 blmi 0x125de38 | __asm ("blmi 0x125de38");
0x0000b514 push.w {r4, r5, r6, r7, r8, lr} |
0x0000b518 sub sp, 0x10 |
0x0000b51a add r2, pc | r2 += pc;
0x0000b51c add r7, sp, 0 | r7 += var_0h;
0x0000b51e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000b520 ldr r3, [r3] | r3 = *(r3);
0x0000b522 str r3, [r7, 0xc] | var_ch = r3;
0x0000b524 mov.w r3, 0 | r3 = 0;
0x0000b528 cmp r0, 0 |
| if (r0 == 0) {
0x0000b52a beq 0xb5e0 | goto label_1;
| }
0x0000b52c mov r4, r1 | r4 = r1;
0x0000b52e cmp r1, 0 |
| if (r1 == 0) {
0x0000b530 beq 0xb5fc | goto label_2;
| }
0x0000b532 ldrb r3, [r1] | r3 = *(r1);
0x0000b534 mov r5, r0 | r5 = r0;
0x0000b536 cmp r3, 0x63 |
| if (r3 > 0x63) {
0x0000b538 bhi 0xb5ae | goto label_3;
| }
0x0000b53a cmp r3, 0x61 |
| if (r3 > 0x61) {
0x0000b53c bhi 0xb5c6 | goto label_4;
| }
0x0000b53e cmp r3, 0x2b |
| if (r3 != 0x2b) {
0x0000b540 bne 0xb58e | goto label_5;
| }
0x0000b542 add.w r8, r1, 1 | r8 = r1 + 1;
0x0000b546 movs r1, 0x3a | r1 = 0x3a;
0x0000b548 mov r0, r8 | r0 = r8;
0x0000b54a blx 0x37d4 | r0 = fcn_000037d4 ();
0x0000b54e mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x0000b550 cbz r0, 0xb58e | goto label_5;
| }
0x0000b552 subs r4, r0, r4 | r4 = r0 - r4;
0x0000b554 cmp.w r4, 0x100 |
| if (r4 > 0x100) {
0x0000b558 bgt 0xb58e | goto label_5;
| }
0x0000b55a subs r2, r4, 1 | r2 = r4 - 1;
0x0000b55c cmp.w r2, 0x400000 |
| if (r2 > 0x400000) {
0x0000b560 bhi 0xb618 | goto label_6;
| }
0x0000b562 adds r4, 7 | r4 += 7;
0x0000b564 movs r0, 0 | r0 = 0;
0x0000b566 bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x0000b56a sub.w sp, sp, r4 |
0x0000b56e mov r3, sp | r3 = sp;
0x0000b570 mov r1, sp | r1 = sp;
0x0000b572 lsrs r3, r3, 3 | r3 >>= 3;
0x0000b574 strb.w r0, [r2, r3, lsl 3] | offset_0 = r3 << 3;
| *((r2 + offset_0)) = r0;
| if (r2 != 0) {
0x0000b578 cbz r2, 0xb584 |
0x0000b57a mov r0, r1 | r0 = r1;
0x0000b57c mov r1, r8 | r1 = r8;
0x0000b57e blx 0x3578 | r0 = mmap64 ()
0x0000b582 mov r1, r0 | r1 = r0;
| }
0x0000b584 adds r2, r6, 1 | r2 = r6 + 1;
0x0000b586 mov r0, r5 | r0 = r5;
0x0000b588 bl 0xae88 | fcn_0000ae88 (r0, r1, r2);
0x0000b58c b 0xb592 |
| while (r3 != 0x6e) {
| label_5:
0x0000b58e mvn r0, 0x15 | r0 = ~0x15;
| label_0:
0x0000b592 ldr r2, [pc, 0xa8] |
0x0000b594 ldr r3, [pc, 0xa0] | r3 = *(0xb638);
0x0000b596 add r2, pc | r2 = 0x16bd8;
0x0000b598 ldr r3, [r2, r3] | r3 = *(0x16bd8);
0x0000b59a ldr r2, [r3] | r2 = *(0x16bd8);
0x0000b59c ldr r3, [r7, 0xc] | r3 = var_ch;
0x0000b59e eors r2, r3 | r2 ^= r3;
0x0000b5a0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000b5a4 bne 0xb62e | goto label_7;
| }
0x0000b5a6 adds r7, 0x10 | r7 += 0x10;
0x0000b5a8 mov sp, r7 |
0x0000b5aa pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x0000b5ae cmp r3, 0x6e |
0x0000b5b0 bne 0xb58e |
| }
0x0000b5b2 adds r0, r1, 1 | r0 = r1 + 1;
0x0000b5b4 bl 0x17dc4 | r0 = fcn_00017dc4 (r0, r1, r2);
0x0000b5b8 cmp r0, 0 |
| if (r0 < 0) {
0x0000b5ba blt 0xb592 | goto label_0;
| }
0x0000b5bc mov r1, r0 | r1 = r0;
0x0000b5be mov r0, r5 | r0 = r5;
0x0000b5c0 bl 0xadd8 | fcn_0000add8 (r0, r1);
0x0000b5c4 b 0xb592 | goto label_0;
| label_4:
0x0000b5c6 mov r1, r7 | r1 = r7;
0x0000b5c8 adds r0, r4, 1 | r0 = r4 + 1;
0x0000b5ca bl 0x17f74 | r0 = fcn_00017f74 (r0, r1, r2);
0x0000b5ce cmp r0, 0 |
| if (r0 < 0) {
0x0000b5d0 blt 0xb592 | goto label_0;
| }
0x0000b5d2 ldrd r2, r3, [r7] | __asm ("ldrd r2, r3, [r7]");
0x0000b5d6 mov r0, r5 | r0 = r5;
0x0000b5d8 ldrb r1, [r4] | r1 = *(r4);
0x0000b5da bl 0xac54 | fcn_0000ac54 (r0, r1, r2, r3);
0x0000b5de b 0xb592 | goto label_0;
| label_1:
0x0000b5e0 ldr r1, [pc, 0x5c] |
0x0000b5e2 movw r2, 0x2a3 | r2 = 0x2a3;
0x0000b5e6 ldr r3, [pc, 0x5c] |
0x0000b5e8 ldr r0, [pc, 0x5c] |
0x0000b5ea add r1, pc | r1 = 0x16c2e;
0x0000b5ec add r3, pc | r3 = 0x16c36;
0x0000b5ee adds r1, 7 | r1 += 7;
0x0000b5f0 add r0, pc | r0 = 0x16c3c;
0x0000b5f2 bl 0x167c8 | fcn_000167c8 (r0, r1, r2, r3);
0x0000b5f6 mvn r0, 0x15 | r0 = ~0x15;
0x0000b5fa b 0xb592 | goto label_0;
| label_2:
0x0000b5fc ldr r1, [pc, 0x4c] |
0x0000b5fe mov.w r2, 0x2a4 | r2 = 0x2a4;
0x0000b602 ldr r3, [pc, 0x4c] |
0x0000b604 ldr r0, [pc, 0x4c] |
0x0000b606 add r1, pc | r1 = 0x16c56;
0x0000b608 add r3, pc | r3 = 0x16c5e;
0x0000b60a adds r1, 7 | r1 += 7;
0x0000b60c add r0, pc | r0 = 0x16c64;
0x0000b60e bl 0x167c8 | fcn_000167c8 (r0, r1, r2, r3);
0x0000b612 mvn r0, 0x15 | r0 = ~0x15;
0x0000b616 b 0xb592 | goto label_0;
| label_6:
0x0000b618 ldr r1, [pc, 0x3c] |
0x0000b61a movw r2, 0x2c6 | r2 = 0x2c6;
0x0000b61e ldr r3, [pc, 0x3c] |
0x0000b620 ldr r0, [pc, 0x3c] |
0x0000b622 add r1, pc | r1 = 0x16c7e;
0x0000b624 add r3, pc | r3 = 0x16c86;
0x0000b626 adds r1, 7 | r1 += 7;
0x0000b628 add r0, pc | r0 = 0x16c8c;
0x0000b62a bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
| label_7:
0x0000b62e blx 0x35d0 | fcn_000035d0 ();
0x0000b632 nop |
0x0000b634 ldr r2, [r7] | r2 = *(r7);
0x0000b636 movs r2, r0 | r2 = r0;
0x0000b638 lsls r4, r5, 9 | r4 = r5 << 9;
0x0000b63a movs r0, r0 |
0x0000b63c str r6, [r7, 0x78] | *((r7 + 0x78)) = r6;
0x0000b63e movs r2, r0 | r2 = r0;
0x0000b640 movs r3, 0x76 | r3 = 0x76;
0x0000b642 movs r1, r0 | r1 = r0;
0x0000b644 cmp r6, 0xd8 |
0x0000b646 movs r1, r0 | r1 = r0;
0x0000b648 lsrs r0, r2, 0x13 | r0 = r2 >> 0x13;
0x0000b64a movs r1, r0 | r1 = r0;
0x0000b64c movs r3, 0x5a | r3 = 0x5a;
0x0000b64e movs r1, r0 | r1 = r0;
0x0000b650 cmp r6, 0xbc |
0x0000b652 movs r1, r0 | r1 = r0;
0x0000b654 str r4, [r7, r7] | *((r7 + r7)) = r4;
0x0000b656 movs r1, r0 | r1 = r0;
0x0000b658 movs r3, 0x3e | r3 = 0x3e;
0x0000b65a movs r1, r0 | r1 = r0;
0x0000b65c cmp r6, 0xa0 |
0x0000b65e movs r1, r0 | r1 = r0;
0x0000b660 movs r5, 0x84 | r5 = 0x84;
0x0000b662 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/libudev.so.1.7.2 @ 0xddf4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000ddf4 () | void fcn_0000ddf4 (int16_t arg_0h, int16_t arg_814h, uint32_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_ch_2;
| int32_t var_ch_3;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_28h;
| int32_t var_4h_2;
| int32_t var_ch;
| int16_t var_10h;
| int32_t var_14h_2;
| int16_t var_18h_2;
| int32_t var_28h_2;
| int16_t var_84h;
| int32_t var_94h;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000ddf4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000ddf8 mov r8, r2 | r8 = r2;
0x0000ddfa ldr r2, [pc, 0x394] |
0x0000ddfc sub sp, 0xc4 |
0x0000ddfe movs r4, 0 | r4 = 0;
0x0000de00 ldr r3, [pc, 0x390] | r3 = *(0xe194);
0x0000de02 add r7, sp, 0x28 | r7 += var_28h;
0x0000de04 add r2, pc | r2 = 0x1bf9a;
0x0000de06 ldr r3, [r2, r3] |
0x0000de08 ldr r3, [r3] | r3 = *(0x1bf9a);
0x0000de0a str.w r3, [r7, 0x94] | __asm ("str.w r3, [var_94h]");
0x0000de0e mov.w r3, 0 | r3 = 0;
0x0000de12 str r4, [r7, 0xc] | var_ch = r4;
0x0000de14 cmp r0, 0 |
| if (arg_0h == ) {
0x0000de16 beq.w 0xdfce | goto label_13;
| }
0x0000de1a mov r6, r1 | r6 = r1;
0x0000de1c cmp r1, 0 |
| if (r1 == 0) {
0x0000de1e beq.w 0xdfee | goto label_14;
| }
0x0000de22 add.w sl, r7, 0x18 | sl += var_18h_2;
0x0000de26 mov r5, r0 | r5 = r0;
0x0000de28 mov r2, sl | r2 = sl;
0x0000de2a ldr r0, [r0, 0x34] | r0 = *(arg_0hx34);
0x0000de2c str r4, [r7, 0x18] | var_18h_2 = r4;
0x0000de2e bl 0x143d4 | fcn_000143d4 (r0, r1, r2);
0x0000de32 ldr.w sb, [r7, 0x18] | sb = var_18h_2;
0x0000de36 cmp.w sb, 0 |
| if (sb == 0) {
0x0000de3a beq 0xde7e | goto label_15;
| }
0x0000de3c ldr.w sb, [r7, 0xc] | sb = var_ch;
0x0000de40 cmp r0, 0 |
| if (r0 == 0) {
0x0000de42 beq.w 0xe166 | goto label_16;
| }
0x0000de46 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000de4a beq 0xde7a | goto label_17;
| }
0x0000de4c str.w r0, [r8] | __asm ("str.w r0, [r8]");
| do {
| label_0:
0x0000de50 mov r0, sb | r0 = sb;
0x0000de52 blx 0x3530 | ferror (r0);
0x0000de56 ldr r2, [pc, 0x340] |
0x0000de58 ldr r3, [pc, 0x338] | r3 = *(0xe194);
0x0000de5a add r2, pc | r2 = 0x1bff8;
0x0000de5c ldr r3, [r2, r3] | r3 = *(0x1bff8);
0x0000de5e ldr r2, [r3] | r2 = *(0x1bff8);
0x0000de60 ldr.w r3, [r7, 0x94] | r3 = var_94h;
0x0000de64 eors r2, r3 | r2 ^= r3;
0x0000de66 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000de6a bne.w 0xe18a | goto label_18;
| }
0x0000de6e mov r0, r4 | r0 = r4;
0x0000de70 adds r7, 0x9c | r7 += 0x9c;
0x0000de72 mov sp, r7 |
0x0000de74 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x0000de78 mov sb, r3 | sb = r3;
| label_17:
0x0000de7a mov r4, r8 | r4 = r8;
0x0000de7c b 0xde50 |
| } while (1);
| label_15:
0x0000de7e add.w r1, r7, 0x10 | r1 += var_10h;
0x0000de82 mov r0, r5 | r0 = r5;
0x0000de84 bl 0xb664 | r0 = fcn_0000b664 (r0, r1);
0x0000de88 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x0000de8a blt.w 0xe062 | goto label_6;
| }
0x0000de8e ldrb r2, [r6] | r2 = *(r6);
0x0000de90 ldr.w fp, [r7, 0x10] | fp = var_10h;
0x0000de94 cmp r2, 0x2f |
| if (r2 != 0x2f) {
0x0000de96 bne.w 0xe16c | goto label_19;
| }
0x0000de9a mov r3, r6 | r3 = r6;
| do {
0x0000de9c mov r4, r3 | r4 = r3;
0x0000de9e ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x0000dea2 cmp r1, 0x2f |
0x0000dea4 beq 0xde9c |
| } while (r1 == 0x2f);
| label_7:
0x0000dea6 cmp.w fp, 0 |
| if (fp != 0) {
0x0000deaa beq 0xdeb4 |
0x0000deac ldrb.w r3, [fp] | r3 = *(fp);
0x0000deb0 cmp r3, 0 |
| if (r3 != 0) {
0x0000deb2 bne 0xdf5c | goto label_20;
| }
| }
| label_2:
0x0000deb4 mov r1, sl | r1 = sl;
0x0000deb6 mov r0, r4 | r0 = r4;
0x0000deb8 blx 0x3590 | r0 = sendmsg ();
0x0000debc cmp r0, 0 |
| if (r0 < 0) {
0x0000debe blt.w 0xe0b4 | goto label_21;
| }
0x0000dec2 ldr r2, [r7, 0x28] | r2 = var_28h_2;
0x0000dec4 and r3, r2, 0xf000 | r3 = r2 & 0xf000;
0x0000dec8 cmp.w r3, 0xa000 |
| if (r3 == 0xa000) {
0x0000decc beq.w 0xe068 | goto label_22;
| }
0x0000ded0 cmp.w r3, 0x4000 |
0x0000ded4 itt eq |
| if (r3 != 0x4000) {
0x0000ded6 ldreq sb, [r7, 0xc] | sb = *((r7 + 0xc));
| }
| if (r3 != 0x4000) {
0x0000ded8 streq r0, [sp, 0x30] | *((sp + 0x30)) = r0;
| }
0x0000deda mvn r4, 0x14 | r4 = ~0x14;
| if (r3 == 0x4000) {
0x0000dede beq 0xde50 | goto label_0;
| }
0x0000dee0 lsls r3, r2, 0x17 | r3 = r2 << 0x17;
0x0000dee2 itt pl |
| if (r3 < r2) {
0x0000dee4 ldrpl sb, [r7, 0xc] | sb = var_ch;
| }
| if (r3 < r2) {
0x0000dee8 mov.w r4, -1 | r4 = -1;
| goto label_23;
| }
| if (r3 >= r2) {
| label_23:
0x0000deec bpl 0xde50 | goto label_0;
| }
0x0000deee mov r0, r4 | r0 = r4;
0x0000def0 add.w r3, r7, 0x14 | r3 += var_14h_2;
0x0000def4 add.w r2, r7, 0xc | r2 += var_ch;
0x0000def8 mov.w r1, -1 | r1 = -1;
0x0000defc bl 0x10a20 | r0 = fcn_00010a20 (r0, r1, r2);
0x0000df00 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x0000df02 blt.w 0xe062 | goto label_6;
| }
0x0000df06 ldr r4, [r7, 0x14] | r4 = var_14h_2;
0x0000df08 ldr.w fp, [r7, 0xc] | fp = var_ch;
0x0000df0c mov r2, fp | r2 = fp;
| if (r4 == 0) {
0x0000df0e cbz r4, 0xdf40 | goto label_3;
| }
0x0000df10 ldr.w sl, [pc, 0x288] |
0x0000df14 add sl, pc | sl = "udev_queue";
0x0000df16 b 0xdf2c |
| while (r0 != 0) {
0x0000df18 mov.w r3, 0 | r3 = 0;
0x0000df1c strb.w r3, [fp, r4] | *((fp + r4)) = r3;
0x0000df20 ldr r4, [r7, 0x14] | r4 = var_14h_2;
0x0000df22 cmp r4, 0 |
| if (r4 == 0) {
0x0000df24 beq.w 0xe092 | goto label_24;
| }
0x0000df28 ldr.w fp, [r7, 0xc] | fp = var_ch;
0x0000df2c subs r4, 1 | r4--;
0x0000df2e mov r0, sl | r0 = sl;
0x0000df30 str r4, [r7, 0x14] | var_14h_2 = r4;
0x0000df32 ldrb.w r1, [fp, r4] | r1 = *((fp + r4));
0x0000df36 blx 0x37d4 | fcn_000037d4 ();
0x0000df3a mov r2, fp | r2 = fp;
0x0000df3c cmp r0, 0 |
0x0000df3e bne 0xdf18 |
| }
| label_3:
0x0000df40 mov r1, r6 | r1 = r6;
0x0000df42 mov r0, r5 | r0 = r5;
0x0000df44 bl 0xa20c | r0 = fcn_0000a20c (r0, r1, r2);
0x0000df48 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 < r0) {
0x0000df4a blt 0xe00e | goto label_25;
| }
0x0000df4c ldr r3, [r7, 0xc] | r3 = var_ch;
0x0000df4e cmp.w r8, 0 |
| if (r8 == 0) {
0x0000df52 beq 0xde78 | goto label_1;
| }
0x0000df54 movs r4, 0 | r4 = 0;
0x0000df56 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0000df58 adds r0, 0 | r0 += 0;
0x0000df5a b 0xde50 | goto label_0;
| label_20:
0x0000df5c mov r0, fp | r0 = fp;
0x0000df5e str r2, [r7] | *(r7) = r2;
0x0000df60 blx 0x37c8 | fcn_000037c8 ();
0x0000df64 str r0, [r7, 4] | var_4h_2 = r0;
0x0000df66 mov r0, r4 | r0 = r4;
0x0000df68 blx 0x37c8 | fcn_000037c8 ();
0x0000df6c ldr r1, [r7, 4] | r1 = var_4h_2;
0x0000df6e mov r3, r0 | r3 = r0;
0x0000df70 ldr r2, [r7] | r2 = *(r7);
0x0000df72 adds r0, r1, r0 | r0 = r1 + r0;
0x0000df74 adds r1, r0, 2 | r1 = r0 + 2;
0x0000df76 cmp.w r1, 0x400000 |
| if (r1 > 0x400000) {
0x0000df7a bhi.w 0xe11a | goto label_26;
| }
0x0000df7e adds r0, 9 | r0 += 9;
0x0000df80 mov r1, fp | r1 = fp;
0x0000df82 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x0000df86 strd r2, r3, [r7] | __asm ("strd r2, r3, [r7]");
0x0000df8a sub.w sp, sp, r0 |
0x0000df8e add.w fp, sp, 0x28 |
0x0000df92 mov r0, fp | r0 = fp;
0x0000df94 blx 0x35b4 | strdup (r0);
0x0000df96 add.w r5, lr, r8, lsr 17 | r5 = lr + (r8 >> 17);
0x0000df9a ldrd r2, r3, [r7] | __asm ("ldrd r2, r3, [r7]");
0x0000df9e mov r1, r0 | r1 = r0;
| if (r0 > 9) {
0x0000dfa0 bhi 0xdfa8 | goto label_27;
| }
0x0000dfa2 b 0xdfb6 | goto label_4;
| do {
0x0000dfa4 cmp fp, r1 |
| if (fp == r1) {
0x0000dfa6 beq 0xe096 | goto label_28;
| }
| label_27:
0x0000dfa8 ldrb ip, [r1, -0x1] | ip = *((r1 - 0x1));
0x0000dfac mov r0, r1 | r0 = r1;
0x0000dfae subs r1, 1 | r1--;
0x0000dfb0 cmp.w ip, 0x2f |
0x0000dfb4 beq 0xdfa4 |
| } while (ip == 0x2f);
| label_4:
0x0000dfb6 cmp r2, 0x2f |
0x0000dfb8 mov r1, r4 | r1 = r4;
0x0000dfba it ne |
| if (r2 == 0x2f) {
0x0000dfbc movne r2, 0x2f | r2 = 0x2f;
| }
0x0000dfbe mov r4, fp | r4 = fp;
0x0000dfc0 it ne |
| if (r2 == 0x2f) {
0x0000dfc2 strbne r2, [r0], 1 | *(r0) = r2;
| r0++;
| }
0x0000dfc6 adds r2, r3, 1 | r2 = r3 + 1;
0x0000dfc8 blx 0x3578 | mmap64 ()
0x0000dfcc b 0xdeb4 | goto label_2;
| label_13:
0x0000dfce ldr r1, [pc, 0x1d0] |
0x0000dfd0 movw r2, 0x7b4 | r2 = 0x7b4;
0x0000dfd4 ldr r3, [pc, 0x1cc] |
0x0000dfd6 mvn r4, 0x15 | r4 = ~0x15;
0x0000dfda ldr r0, [pc, 0x1cc] |
0x0000dfdc add r1, pc | r1 = 0x1c182;
0x0000dfde add r3, pc | r3 = 0x1c186;
0x0000dfe0 adds r1, 7 | r1 += 7;
0x0000dfe2 add r0, pc | r0 = "../git/src/libsystemd/sd-device/device-enumerator.c";
0x0000dfe4 bl 0x167c8 | fcn_000167c8 ("../git/src/libsystemd/sd-device/device-enumerator.c", r1, r2, r3);
0x0000dfe8 ldr.w sb, [r7, 0xc] | sb = var_ch;
0x0000dfec b 0xde50 | goto label_0;
| label_14:
0x0000dfee ldr r1, [pc, 0x1bc] |
0x0000dff0 movw r2, 0x7b5 | r2 = 0x7b5;
0x0000dff4 ldr r3, [pc, 0x1b8] |
0x0000dff6 mvn r4, 0x15 | r4 = ~0x15;
0x0000dffa ldr r0, [pc, 0x1b8] |
0x0000dffc add r1, pc | r1 = 0x1c1ae;
0x0000dffe add r3, pc | r3 = 0x1c1b2;
0x0000e000 adds r1, 7 | r1 += 7;
0x0000e002 add r0, pc | r0 = 0x1c1bc;
0x0000e004 bl 0x167c8 | fcn_000167c8 (r0, r1, r2, r3);
0x0000e008 ldr.w sb, [r7, 0xc] | sb = var_ch;
0x0000e00c b 0xde50 | goto label_0;
| label_25:
0x0000e00e mov.w sl, 0 | sl = 0;
0x0000e012 str.w sl, [r7, 0x14] | __asm ("str.w sl, [var_14h_2]");
0x0000e016 bl 0x15ca8 | r0 = fcn_00015ca8 ();
0x0000e01a cmp r0, 6 |
| if (r0 > 6) {
0x0000e01c bgt 0xe09a | goto label_29;
| }
0x0000e01e mov r0, sl | r0 = sl;
| label_5:
0x0000e020 ldr r3, [r7, 0xc] | r3 = var_ch;
0x0000e022 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000e026 beq.w 0xe130 | goto label_30;
| }
0x0000e02a ldr r5, [pc, 0x18c] |
0x0000e02c ldr r2, [pc, 0x18c] |
0x0000e02e ldr.w ip, [pc, 0x190] |
0x0000e032 ldr r1, [pc, 0x190] |
0x0000e034 add r5, pc | r5 = 0x1c1f2;
0x0000e036 add r2, pc | r2 = 0x1c1f6;
0x0000e038 str r5, [sp, 0x14] | var_14h = r5;
0x0000e03a add ip, pc | ip = 0x1c200;
0x0000e03c movs r5, 0 | r5 = 0;
0x0000e03e add r1, pc | r1 = 0x1c208;
0x0000e040 str r3, [sp, 0x1c] | var_1ch = r3;
0x0000e042 str r0, [sp, 8] | var_8h = r0;
0x0000e044 movw r3, 0x7fa | r3 = 0x7fa;
0x0000e048 str r1, [sp] | *(sp) = r1;
0x0000e04a adds r2, 7 | r2 += 7;
0x0000e04c mov r1, r4 | r1 = r4;
0x0000e04e movs r0, 7 | r0 = 7;
0x0000e050 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x0000e054 str r6, [sp, 0x18] | var_18h = r6;
0x0000e056 str.w ip, [sp, 0x20] | __asm ("str.w ip, [var_20h]");
0x0000e05a strd r5, r5, [sp, 0xc] | __asm ("strd r5, r5, [var_ch_2]");
0x0000e05e bl 0x16964 | fcn_00016964 (r0, r1, r2, r3, r4, r5, r6);
| do {
| label_6:
0x0000e062 ldr.w sb, [r7, 0xc] | sb = var_ch;
0x0000e066 b 0xde50 | goto label_0;
| label_22:
0x0000e068 ldr r3, [pc, 0x15c] |
0x0000e06a add.w ip, r7, 0x84 |
0x0000e06e add r3, pc | r3 = 0x1c23a;
0x0000e070 adds r3, 0x10 | r3 += 0x10;
0x0000e072 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x0000e074 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0000e078 mov r0, ip | r0 = ip;
0x0000e07a mov r1, r6 | r1 = r6;
0x0000e07c bl 0x1a0bc | r0 = fcn_0001a0bc (r0, r1);
0x0000e080 cmp r0, 0 |
| if (r0 == 0) {
0x0000e082 beq 0xe114 | goto label_31;
| }
0x0000e084 mov r0, r4 | r0 = r4;
0x0000e086 add.w r1, r7, 0xc | r1 += var_ch;
0x0000e08a bl 0x11f1c | r0 = fcn_00011f1c (r0, r1);
0x0000e08e subs r4, r0, 0 | r4 = r0 - 0;
0x0000e090 blt 0xe062 |
| } while (r4 < r0);
| label_24:
0x0000e092 ldr r2, [r7, 0xc] | r2 = var_ch;
0x0000e094 b 0xdf40 | goto label_3;
| label_28:
0x0000e096 mov r0, fp | r0 = fp;
0x0000e098 b 0xdfb6 | goto label_4;
| label_29:
0x0000e09a add.w r1, r7, 0x14 | r1 += var_14h_2;
0x0000e09e mov r0, r5 | r0 = r5;
0x0000e0a0 bl 0xba14 | fcn_0000ba14 (r0, r1);
0x0000e0a4 ldr r0, [r7, 0x14] | r0 = var_14h_2;
0x0000e0a6 mov sb, r0 | sb = r0;
0x0000e0a8 cmp r0, 0 |
| if (r0 == 0) {
0x0000e0aa beq 0xe020 | goto label_5;
| }
0x0000e0ac ldr.w sb, [pc, 0x11c] |
0x0000e0b0 add sb, pc | sb = 0x1c280;
0x0000e0b2 invalid |
| label_21:
0x0000e0b4 blx 0x3828 | fcn_00003828 ();
0x0000e0b8 movs r2, 0 | r2 = 0;
0x0000e0ba ldr r4, [r0] | r4 = *(r0);
0x0000e0bc mov r1, r6 | r1 = r6;
0x0000e0be mov r0, r5 | r0 = r5;
0x0000e0c0 bl 0xa20c | r0 = fcn_0000a20c (r0, r1, r2);
0x0000e0c4 subs.w r8, r0, 0 | r8 = r0 - 0;
0x0000e0c8 rsb.w r4, r4, 0 | r4 -= ;
| if (r8 >= r0) {
0x0000e0cc bge 0xe062 | goto label_6;
| }
0x0000e0ce mov.w sl, 0 | sl = 0;
0x0000e0d2 str.w sl, [r7, 0x14] | __asm ("str.w sl, [var_14h_2]");
0x0000e0d6 bl 0x15ca8 | r0 = fcn_00015ca8 ();
0x0000e0da cmp r0, 6 |
0x0000e0dc it le |
| if (r0 > 6) {
0x0000e0de movle r3, sl | r3 = sl;
| }
0x0000e0e0 bgt 0xe170 |
| while (r3 == 0) {
| label_8:
0x0000e0e2 ldr r5, [pc, 0xec] |
0x0000e0e4 mov r1, r8 | r1 = r8;
0x0000e0e6 ldr r2, [pc, 0xec] |
0x0000e0e8 ldr r0, [pc, 0xec] |
0x0000e0ea add r5, pc | r5 = 0x1c2c0;
0x0000e0ec str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x0000e0f0 str r5, [sp, 0x14] | var_14h = r5;
0x0000e0f2 add r2, pc | r2 = 0x1c2cc;
0x0000e0f4 add r0, pc | r0 = 0x1c2d0;
0x0000e0f6 movs r5, 0 | r5 = 0;
0x0000e0f8 str r3, [sp, 8] | var_8h = r3;
0x0000e0fa adds r2, 7 | r2 += 7;
0x0000e0fc str r0, [sp] | *(sp) = r0;
0x0000e0fe movw r3, 0x7d4 | r3 = 0x7d4;
0x0000e102 movs r0, 7 | r0 = 7;
0x0000e104 str r6, [sp, 0x18] | var_18h = r6;
0x0000e106 strd r5, r5, [sp, 0xc] | __asm ("strd r5, r5, [var_ch_2]");
0x0000e10a bl 0x16964 | fcn_00016964 (r0, r1, r2, r3, r4, r5, r6);
0x0000e10e ldr.w sb, [r7, 0xc] | sb = var_ch;
0x0000e112 b 0xde50 | goto label_0;
| label_31:
0x0000e114 mvn r4, 0x15 | r4 = ~0x15;
0x0000e118 b 0xe062 | goto label_6;
| label_26:
0x0000e11a ldr r1, [pc, 0xc0] |
0x0000e11c movw r2, 0x7cb | r2 = 0x7cb;
0x0000e120 ldr r3, [pc, 0xbc] |
0x0000e122 ldr r0, [pc, 0xc0] |
0x0000e124 add r1, pc | r1 = 0x1c306;
0x0000e126 add r3, pc | r3 = 0x1c30a;
0x0000e128 adds r1, 7 | r1 += 7;
0x0000e12a add r0, pc | r0 = "/run/udev/tags/";
0x0000e12c bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_30:
0x0000e130 ldr r2, [pc, 0xb4] |
0x0000e132 mov r1, r4 | r1 = r4;
0x0000e134 str r3, [sp, 0x1c] | var_1ch = r3;
0x0000e136 mov r4, r8 | r4 = r8;
0x0000e138 ldr r3, [pc, 0xb0] |
0x0000e13a add r2, pc | r2 = 0x1c326;
0x0000e13c ldr r5, [pc, 0xb0] |
0x0000e13e str r2, [sp] | *(sp) = r2;
0x0000e140 ldr r2, [pc, 0xb0] |
0x0000e142 add r3, pc | r3 = 0x1c332;
0x0000e144 add r5, pc | r5 = 0x1c338;
0x0000e146 str r0, [sp, 8] | var_8h = r0;
0x0000e148 movs r0, 7 | r0 = 7;
0x0000e14a str r3, [sp, 0x14] | var_14h = r3;
0x0000e14c add r2, pc | r2 = 0x1c344;
0x0000e14e movw r3, 0x7fa | r3 = 0x7fa;
0x0000e152 add r2, r0 | r2 += r0;
0x0000e154 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x0000e158 str r6, [sp, 0x18] | var_18h = r6;
0x0000e15a strd r8, r8, [sp, 0xc] | __asm ("strd r8, r8, [var_ch_2]");
0x0000e15e str r5, [sp, 0x20] | var_20h = r5;
0x0000e160 bl 0x16964 | fcn_00016964 (r0, r1, r2, r3, r4, r5, r6);
0x0000e164 b 0xe062 | goto label_6;
| label_16:
0x0000e166 mvn r4, 1 | r4 = ~1;
0x0000e16a b 0xde50 | goto label_0;
| label_19:
0x0000e16c mov r4, r6 | r4 = r6;
0x0000e16e b 0xdea6 | goto label_7;
0x0000e170 add.w r1, r7, 0x14 | r1 += var_14h_2;
0x0000e174 mov r0, r5 | r0 = r5;
0x0000e176 bl 0xba14 | fcn_0000ba14 (r0, r1);
0x0000e17a ldr r3, [r7, 0x14] | r3 = var_14h_2;
0x0000e17c mov sb, r3 | sb = r3;
0x0000e17e cmp r3, 0 |
0x0000e180 beq 0xe0e2 |
| }
0x0000e182 ldr.w sb, [pc, 0x74] |
0x0000e186 add sb, pc | sb = 0x1c384;
0x0000e188 b 0xe0e2 | goto label_8;
| label_18:
0x0000e18a blx 0x35d0 | fcn_000035d0 ();
0x0000e18e nop |
0x0000e190 subs r7, 0x50 | r7 -= 0x50;
0x0000e192 movs r2, r0 | r2 = r0;
0x0000e194 lsls r4, r5, 9 | r4 = r5 << 9;
0x0000e196 movs r0, r0 |
0x0000e198 subs r6, 0xfa | r6 -= 0xfa;
0x0000e19a movs r2, r0 | r2 = r0;
0x0000e19c ldc2l p0, c0, [ip, -0]! | __asm ("ldc2l p0, c0, [ip, -0]!");
0x0000e1a0 vst1.8 {d0[0]}, [r4], r0 | __asm ("vst1.8 {d0[0]}, [r4], r0");
0x0000e1a4 lsls r6, r6, 0x1a | r6 <<= 0x1a;
0x0000e1a6 movs r1, r0 | r1 = r0;
0x0000e1a8 bfi r0, r2, 0, 1 | value_0 = BIT_MASK (0, 1);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r0 &= value_0;
| r0 |= value_1;
0x0000e1ac vld4.8 {d16, d17, d18, d19}, [r4], r0 | __asm ("vld4.8 {d16, d17, d18, d19}, [r4], r0");
0x0000e1b0 lsls r6, r2, 0x1a | r6 = r2 << 0x1a;
0x0000e1b2 movs r1, r0 | r1 = r0;
0x0000e1b4 b 0xe754 |
| while (r0 != 0) {
0x0000e70e ldr.w ip, [r7] | ip = *(r7);
0x0000e712 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0000e714 orrs.w r3, ip, r3 | r3 = ip | r3;
| if (r3 != ip) {
0x0000e718 bne.w 0xe824 | goto label_32;
| }
| label_9:
0x0000e71c mov r1, r7 | r1 = r7;
0x0000e71e movs r2, 0x2a | r2 = 0x2a;
0x0000e720 mov r0, fp | r0 = fp;
0x0000e722 add.w r4, sl, sb | r4 = sl + sb;
0x0000e726 bl 0xe548 | r0 = fcn_0000e548 (r0, r1, r2);
0x0000e72a mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0000e72c cbz r0, 0xe764 |
0x0000e72e ldr.w r3, [r6, 0x804] | r3 = *((r6 + 0x804));
0x0000e732 adds r0, r3, 1 | r0 = r3 + 1;
0x0000e734 cmp.w r0, 0x800 |
0x0000e738 it lo |
| if (r0 >= 0x800) {
0x0000e73a strblo r2, [r6, r3] | *((r6 + r3)) = r2;
| }
0x0000e73c mov r3, r6 | r3 = r6;
0x0000e73e it lo |
| if (r0 >= 0x800) {
0x0000e740 strlo r0, [r6, 0x804] | *((r6 + 0x804)) = r0;
| }
0x0000e744 movs r2, 0 | r2 = 0;
0x0000e746 mov r0, r8 | r0 = r8;
0x0000e748 str r4, [sp] | *(sp) = r4;
0x0000e74a bl 0xe594 | r0 = fcn_0000e594 (r0, r1, r2, r3, r4, r5, r6);
0x0000e74e cmp r0, 0 |
| if (r0 < 0) {
0x0000e750 blt 0xe806 | goto label_11;
| }
0x0000e752 ldr.w r3, [r6, 0x804] | r3 = *((r6 + 0x804));
0x0000e754 subs r0, 4 | r0 -= 4;
0x0000e756 cmp r3, 0 |
| if (r3 == 0) {
0x0000e758 beq 0xe856 | goto label_33;
| }
0x0000e75a ldr.w fp, [r8, 0x70] | fp = *((r8 + 0x70));
0x0000e75e subs r3, 1 | r3--;
0x0000e760 str.w r3, [r6, 0x804] | __asm ("str.w r3, [r6, 0x804]");
| }
0x0000e764 mov r1, r7 | r1 = r7;
0x0000e766 movs r2, 0x3f | r2 = 0x3f;
0x0000e768 mov r0, fp | r0 = fp;
0x0000e76a bl 0xe548 | r0 = fcn_0000e548 (r0, r1, r2);
0x0000e76e mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0000e770 cbz r0, 0xe7a8 |
0x0000e772 ldr.w r3, [r6, 0x804] | r3 = *((r6 + 0x804));
0x0000e776 adds r0, r3, 1 | r0 = r3 + 1;
0x0000e778 cmp.w r0, 0x800 |
0x0000e77c it lo |
| if (r0 >= 0x800) {
0x0000e77e strblo r2, [r6, r3] | *((r6 + r3)) = r2;
| }
0x0000e780 mov r3, r6 | r3 = r6;
0x0000e782 it lo |
| if (r0 >= 0x800) {
0x0000e784 strlo r0, [r6, 0x804] | *((r6 + 0x804)) = r0;
| }
0x0000e788 movs r2, 0 | r2 = 0;
0x0000e78a mov r0, r8 | r0 = r8;
0x0000e78c str r4, [sp] | *(sp) = r4;
0x0000e78e bl 0xe594 | r0 = fcn_0000e594 (r0, r1, r2, r3, r4, r5, r6);
0x0000e792 cmp r0, 0 |
| if (r0 < 0) {
0x0000e794 blt 0xe806 | goto label_11;
| }
0x0000e796 ldr.w r3, [r6, 0x804] | r3 = *((r6 + 0x804));
0x0000e79a cmp r3, 0 |
| if (r3 == 0) {
0x0000e79c beq 0xe856 | goto label_33;
| }
0x0000e79e ldr.w fp, [r8, 0x70] | fp = *((r8 + 0x70));
0x0000e7a2 subs r3, 1 | r3--;
0x0000e7a4 str.w r3, [r6, 0x804] | __asm ("str.w r3, [r6, 0x804]");
| }
0x0000e7a8 mov r1, r7 | r1 = r7;
0x0000e7aa mov r0, fp | r0 = fp;
0x0000e7ac movs r2, 0x5b | r2 = 0x5b;
0x0000e7ae bl 0xe548 | r0 = fcn_0000e548 (r0, r1, r2);
0x0000e7b2 mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0000e7b4 cbz r0, 0xe7e8 |
0x0000e7b6 ldr.w r3, [r6, 0x804] | r3 = *((r6 + 0x804));
0x0000e7ba adds r0, r3, 1 | r0 = r3 + 1;
0x0000e7bc cmp.w r0, 0x800 |
0x0000e7c0 it lo |
| if (r0 >= 0x800) {
0x0000e7c2 strblo r2, [r6, r3] | *((r6 + r3)) = r2;
| }
0x0000e7c4 mov r3, r6 | r3 = r6;
0x0000e7c6 it lo |
| if (r0 >= 0x800) {
0x0000e7c8 strlo r0, [r6, 0x804] | *((r6 + 0x804)) = r0;
| }
0x0000e7cc movs r2, 0 | r2 = 0;
0x0000e7ce mov r0, r8 | r0 = r8;
0x0000e7d0 str r4, [sp] | *(sp) = r4;
0x0000e7d2 bl 0xe594 | r0 = fcn_0000e594 (r0, r1, r2, r3, r4, r5, r6);
0x0000e7d6 cmp r0, 0 |
| if (r0 < 0) {
0x0000e7d8 blt 0xe806 | goto label_11;
| }
0x0000e7da ldr.w r3, [r6, 0x804] | r3 = *((r6 + 0x804));
0x0000e7de cmp r3, 0 |
| if (r3 == 0) {
0x0000e7e0 beq 0xe856 | goto label_33;
| }
0x0000e7e2 subs r3, 1 | r3--;
0x0000e7e4 str.w r3, [r6, 0x804] | __asm ("str.w r3, [r6, 0x804]");
| }
0x0000e7e8 ldrb r2, [r4] | r2 = *(r4);
0x0000e7ea cmp r2, 0 |
| if (r2 == 0) {
0x0000e7ec beq 0xe87c | goto label_34;
| }
0x0000e7ee ldr.w fp, [r8, 0x70] | fp = *((r8 + 0x70));
0x0000e7f2 mov r1, r7 | r1 = r7;
0x0000e7f4 add.w sb, sb, 1 | sb++;
0x0000e7f8 mov r0, fp | r0 = fp;
0x0000e7fa bl 0xe548 | r0 = fcn_0000e548 (r0, r1, r2);
0x0000e7fe mov r7, r0 | r7 = r0;
0x0000e800 cmp r0, 0 |
0x0000e802 bne 0xe70e |
| }
| label_10:
0x0000e804 movs r0, 0 | r0 = 0;
| label_11:
0x0000e806 ldr r2, [pc, 0xc8] |
0x0000e808 ldr r3, [pc, 0xc0] | r3 = *(0xe8cc);
0x0000e80a add r2, pc | r2 = 0x1d0e0;
0x0000e80c ldr r3, [r2, r3] | r3 = *(0x1d0e0);
0x0000e80e ldr r2, [r3] | r2 = *(0x1d0e0);
0x0000e810 ldr.w r3, [sp, 0x814] | r3 = *(arg_814h);
0x0000e814 eors r2, r3 | r2 ^= r3;
0x0000e816 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000e81a bne 0xe8c2 | goto label_35;
| }
0x0000e81c addw sp, sp, 0x81c | __asm ("addw sp, sp, 0x81c");
0x0000e820 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_32:
0x0000e824 ldrb.w r4, [fp, ip] | r4 = *((fp + ip));
0x0000e828 add ip, fp |
0x0000e82a cmp r4, 0 |
| if (r4 == 0) {
0x0000e82c beq.w 0xe71c | goto label_9;
| }
0x0000e830 add.w r5, sl, sb | r5 = sl + sb;
0x0000e834 movs r2, 0 | r2 = 0;
0x0000e836 b 0xe840 |
| while (r3 == r4) {
0x0000e838 ldrb r4, [ip, 1]! | r4 = *((ip += 1));
0x0000e83c adds r2, 1 | r2++;
| if (r4 == 0) {
0x0000e83e cbz r4, 0xe878 | goto label_36;
| }
0x0000e840 cmp r4, 0x3f |
| if (r4 == 0x3f) {
0x0000e842 beq 0xe86a | goto label_37;
| }
0x0000e844 cmp r4, 0x5b |
| if (r4 == 0x5b) {
0x0000e846 beq 0xe86a | goto label_37;
| }
0x0000e848 cmp r4, 0x2a |
| if (r4 == 0x2a) {
0x0000e84a beq 0xe86a | goto label_37;
| }
0x0000e84c ldrb r3, [r5] | r3 = *(r5);
0x0000e84e adds r5, 1 | r5++;
0x0000e850 cmp r3, r4 |
0x0000e852 beq 0xe838 |
| }
0x0000e854 b 0xe804 | goto label_10;
| label_33:
0x0000e856 ldr r1, [pc, 0x7c] |
0x0000e858 movs r2, 0x3a | r2 = 0x3a;
0x0000e85a ldr r3, [pc, 0x7c] |
0x0000e85c ldr r0, [pc, 0x7c] |
0x0000e85e add r1, pc | r1 = 0x1d138;
0x0000e860 add r3, pc | r3 = 0x1d13e;
0x0000e862 adds r1, 7 | r1 += 7;
0x0000e864 add r0, pc | r0 = 0x1d144;
0x0000e866 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_37:
0x0000e86a mov r3, r6 | r3 = r6;
0x0000e86c mov r1, r7 | r1 = r7;
0x0000e86e mov r0, r8 | r0 = r8;
0x0000e870 str r5, [sp] | *(sp) = r5;
0x0000e872 bl 0xe594 | fcn_0000e594 (r0, r1, r2, r3, r4, r5, r6);
0x0000e876 b 0xe806 | goto label_11;
| label_36:
0x0000e878 add sb, r2 | sb += r2;
0x0000e87a b 0xe71c | goto label_9;
| label_34:
0x0000e87c ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0000e87e ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0000e880 orrs r3, r1 | r3 |= r1;
| if (r3 == r1) {
0x0000e882 beq 0xe804 | goto label_10;
| }
0x0000e884 mov r5, r2 | r5 = r2;
0x0000e886 mov r4, r2 | r4 = r2;
0x0000e888 b 0xe89a | goto label_38;
| label_12:
0x0000e88a ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x0000e88c adds r5, 1 | r5++;
0x0000e88e ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0000e890 mov r2, r5 | r2 = r5;
0x0000e892 cmp r5, r1 |
0x0000e894 sbcs.w r3, r4, r3 | __asm ("sbcs.w r3, r4, r3");
| if (r5 >= r1) {
0x0000e898 bhs 0xe804 | goto label_10;
| }
| label_38:
0x0000e89a ldr.w r6, [r8, 0x70] | r6 = *((r8 + 0x70));
0x0000e89e mov r0, r8 | r0 = r8;
0x0000e8a0 ldrb.w ip, [r7, 8] | ip = *((r7 + 8));
0x0000e8a4 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0000e8a6 umull r1, r2, r3, r2 | r1:r2 = r3 * r2;
0x0000e8aa ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x0000e8ac ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x0000e8ae umull r3, ip, r3, ip | r3:ip = r3 * ip;
0x0000e8b2 add r1, r2 | r1 += r2;
0x0000e8b4 add r1, r3 | r1 += r3;
0x0000e8b6 add r1, r7 | r1 += r7;
0x0000e8b8 bl 0xe490 | fcn_0000e490 (r0, r1);
0x0000e8ba stc2l p8, c2, [sl, 0]! | __asm ("stc2l p8, c2, [sl, 0]!");
| if (r5 >= r1) {
0x0000e8be bge 0xe88a | goto label_12;
| }
0x0000e8c0 b 0xe806 | goto label_11;
| label_35:
0x0000e8c2 blx 0x35d0 | fcn_000035d0 ();
0x0000e8c6 nop |
0x0000e8c8 adds r6, 0x68 | r6 += 0x68;
0x0000e8ca movs r2, r0 | r2 = r0;
0x0000e8cc lsls r4, r5, 9 | r4 = r5 << 9;
0x0000e8ce movs r0, r0 |
0x0000e8d0 adds r5, 0x4a | r5 += 0x4a;
0x0000e8d2 movs r2, r0 | r2 = r0;
0x0000e8d4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libudev.so.1.7.2 @ 0xe1fc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000e1fc () | void fcn_0000e1fc (int16_t arg_1h, uint32_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_1h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_ch_2;
| int32_t var_ch_3;
| int16_t var_14h;
| int32_t var_18h;
| int32_t var_18h_2;
| char * src;
| int32_t var_4h_2;
| int16_t var_ch;
| int32_t var_10h;
| int32_t var_14h_2;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000e1fc svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000e200 mov r4, r2 | r4 = r2;
0x0000e202 ldr r2, [pc, 0x244] |
0x0000e204 sub sp, 0x3c |
0x0000e206 add r7, sp, 0x20 | r7 += src;
0x0000e208 ldr r3, [pc, 0x240] | r3 = *(0xe44c);
0x0000e20a mov sb, r0 | sb = r0;
0x0000e20c add r2, pc | r2 = 0x1c65a;
0x0000e20e ldr r3, [r2, r3] |
0x0000e210 ldr r3, [r3] | r3 = *(0x1c65a);
0x0000e212 str r3, [r7, 0x14] | var_14h_2 = r3;
0x0000e214 mov.w r3, 0 | r3 = 0;
0x0000e218 cmp r0, 0 |
| if (r0 == 0) {
0x0000e21a beq.w 0xe3de | goto label_4;
| }
0x0000e21e mov r5, r1 | r5 = r1;
0x0000e220 cmp r1, 0 |
| if (arg_1h == ) {
0x0000e222 beq.w 0xe3fc | goto label_5;
| }
0x0000e226 cmp r4, 0 |
| if (r4 == 0) {
0x0000e228 beq.w 0xe3d2 | goto label_6;
| }
0x0000e22c add.w r1, r7, 0xc | r1 += var_ch;
0x0000e230 bl 0xb664 | r0 = fcn_0000b664 (r0, r1);
0x0000e234 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0000e236 blt.w 0xe3b6 | goto label_7;
| }
0x0000e23a ldrb.w r8, [r5] | r8 = *(r5);
0x0000e23e ldr.w sl, [r7, 0xc] | sl = var_ch;
0x0000e242 cmp.w r8, 0x2f |
| if (r8 != 0x2f) {
0x0000e246 bne.w 0xe424 | goto label_8;
| }
0x0000e24a mov r3, r5 | r3 = r5;
| do {
0x0000e24c mov r6, r3 | r6 = r3;
0x0000e24e ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x0000e252 cmp r2, 0x2f |
0x0000e254 beq 0xe24c |
| } while (r2 == 0x2f);
| label_3:
0x0000e256 cmp.w sl, 0 |
| if (sl == 0) {
0x0000e25a beq 0xe2ca | goto label_9;
| }
0x0000e25c ldrb.w r3, [sl] | r3 = *(sl);
| if (r3 == 0) {
0x0000e260 cbz r3, 0xe2ca | goto label_9;
| }
0x0000e262 mov r0, sl | r0 = sl;
0x0000e264 blx 0x37c8 | fcn_000037c8 ();
0x0000e268 str r0, [r7, 4] | var_4h_2 = r0;
0x0000e26a mov r0, r6 | r0 = r6;
0x0000e26c blx 0x37c8 | fcn_000037c8 ();
0x0000e270 ldr r3, [r7, 4] | r3 = var_4h_2;
0x0000e272 mov fp, r0 |
0x0000e274 add r3, r0 | r3 += r0;
0x0000e276 adds r2, r3, 2 | r2 = r3 + 2;
0x0000e278 cmp.w r2, 0x400000 |
| if (r2 > 0x400000) {
0x0000e27c bhi.w 0xe428 | goto label_10;
| }
0x0000e280 adds r3, 9 | r3 += 9;
0x0000e282 mov r1, sl | r1 = sl;
0x0000e284 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0000e288 sub.w sp, sp, r3 |
0x0000e28c add.w sl, sp, 0x20 | sl += src;
0x0000e290 mov r0, sl | r0 = sl;
0x0000e292 blx 0x35b4 | r0 = strdup (r0);
0x0000e296 cmp r0, sl |
0x0000e298 mov r3, r0 | r3 = r0;
| if (r0 > sl) {
0x0000e29a bhi 0xe2a4 | goto label_11;
| }
0x0000e29c b 0xe2b0 | goto label_2;
| do {
0x0000e29e cmp r3, sl |
| if (r3 == sl) {
0x0000e2a0 beq.w 0xe3da | goto label_12;
| }
| label_11:
0x0000e2a4 ldrb r2, [r3, -0x1] | r2 = *((r3 - 0x1));
0x0000e2a8 mov r0, r3 | r0 = r3;
0x0000e2aa subs r3, 1 | r3--;
0x0000e2ac cmp r2, 0x2f |
0x0000e2ae beq 0xe29e |
| } while (r2 == 0x2f);
| label_2:
0x0000e2b0 cmp.w r8, 0x2f |
0x0000e2b4 mov r1, r6 | r1 = r6;
0x0000e2b6 it ne |
| if (r8 == 0x2f) {
0x0000e2b8 movne r3, 0x2f | r3 = 0x2f;
| }
0x0000e2ba add.w r2, fp, 1 | r2 += arg_1h;
0x0000e2be it ne |
| if (r8 == 0x2f) {
0x0000e2c0 strbne r3, [r0], 1 | *(r0) = r3;
| r0++;
| }
0x0000e2c4 mov r6, sl | r6 = sl;
0x0000e2c6 blx 0x3578 | mmap64 ()
| label_9:
0x0000e2ca ldr.w r8, [pc, 0x184] |
0x0000e2ce mov r0, r4 | r0 = r4;
0x0000e2d0 blx 0x37c8 | fcn_000037c8 ();
0x0000e2d2 orns r6, sl, r2, lsl 18 | __asm ("orns r6, sl, r2, lsl 18");
0x0000e2d6 add.w fp, r4, r0 |
0x0000e2da add r8, pc | r8 = 0x1c730;
0x0000e2dc cmp.w sl, 0 |
| if (sl == 0) {
0x0000e2e0 beq 0xe2fa | goto label_13;
| }
| do {
0x0000e2e2 ldrb r1, [fp, -0x1]! | r1 = *((fp -= 0x1));
0x0000e2e6 mov r0, r8 | r0 = r8;
0x0000e2e8 blx 0x37d4 | fcn_000037d4 ();
0x0000e2ec add.w r3, sl, -1 | r3 = sl + -1;
| if (r0 == 0) {
0x0000e2f0 cbz r0, 0xe34e | goto label_14;
| }
0x0000e2f2 mov sl, r3 | sl = r3;
0x0000e2f4 cmp.w sl, 0 |
0x0000e2f8 bne 0xe2e2 |
| } while (sl != 0);
| do {
| label_13:
0x0000e2fa mov r0, r4 | r0 = r4;
0x0000e2fc mov r1, sl | r1 = sl;
0x0000e2fe blx 0x3548 | r0 = openat64_2 ();
0x0000e302 mov r4, r0 | r4 = r0;
0x0000e304 cmp r0, 0 |
| if (r0 == 0) {
0x0000e306 beq.w 0xe442 | goto label_15;
| }
0x0000e30a mov r0, r6 | r0 = r6;
0x0000e30c movs r3, 0 | r3 = 0;
0x0000e30e mov.w r2, 0x180 | r2 = 0x180;
0x0000e312 mov r1, r4 | r1 = r4;
0x0000e314 bl 0x10f00 | r0 = fcn_00010f00 (r0, r1, r2, r3, r4);
0x0000e318 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0000e31a blt 0xe41a | goto label_16;
| }
0x0000e31c ldr r1, [pc, 0x134] |
0x0000e31e mov r0, r5 | r0 = r5;
0x0000e320 add r1, pc | r1 = 0x1c778;
0x0000e322 blx 0x3490 | r0 = fcn_00003490 ();
0x0000e326 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x0000e328 cbnz r0, 0xe35c | goto label_17;
| }
| label_0:
0x0000e32a mov r0, r4 | r0 = r4;
0x0000e32c blx 0x3530 | ferror (r0);
0x0000e330 ldr r2, [pc, 0x124] |
0x0000e332 ldr r3, [pc, 0x118] | r3 = *(0xe44e);
0x0000e334 add r2, pc | r2 = 0x1c790;
0x0000e336 ldr r3, [r2, r3] | r3 = *(0x1c790);
0x0000e338 ldr r2, [r3] | r2 = *(0x1c790);
0x0000e33a ldr r3, [r7, 0x14] | r3 = var_14h_2;
0x0000e33c eors r2, r3 | r2 ^= r3;
0x0000e33e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000e342 bne 0xe43e | goto label_18;
| }
0x0000e344 mov r0, r6 | r0 = r6;
0x0000e346 adds r7, 0x1c | r7 += 0x1c;
0x0000e348 mov sp, r7 |
0x0000e34a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x0000e34e cmp.w sl, 0x1000 |
0x0000e352 bls 0xe2fa |
| } while (sl < 0x1000);
0x0000e354 mov r4, r0 | r4 = r0;
0x0000e356 mvn r6, 0x15 | r6 = ~0x15;
0x0000e35a b 0xe32a | goto label_0;
| label_17:
0x0000e35c mov r2, r4 | r2 = r4;
0x0000e35e mov r1, r5 | r1 = r5;
0x0000e360 mov r0, sb | r0 = sb;
0x0000e362 bl 0xa20c | r0 = fcn_0000a20c (r0, r1, r2);
0x0000e366 subs r6, r0, 0 | r6 = r0 - 0;
0x0000e368 itt ge |
| if (r6 < r0) {
0x0000e36a movge r4, 0 | r4 = 0;
| }
| if (r6 >= r0) {
0x0000e36c movge r6, r4 | r6 = r4;
| goto label_19;
| }
| if (r6 >= r0) {
| label_19:
0x0000e36e bge 0xe32a | goto label_0;
| }
0x0000e370 mov.w r8, 0 | r8 = 0;
0x0000e374 str.w r8, [r7, 0x10] | __asm ("str.w r8, [var_10h]");
0x0000e378 bl 0x15ca8 | r0 = fcn_00015ca8 ();
0x0000e37c cmp r0, 6 |
0x0000e37e it le |
| if (r0 > 6) {
0x0000e380 movle r3, r8 | r3 = r8;
| }
| if (r0 > 6) {
0x0000e382 bgt 0xe3ba | goto label_20;
| }
| label_1:
0x0000e384 mov ip, r3 |
| do {
0x0000e386 str r3, [sp, 8] | var_8h = r3;
0x0000e388 mov r1, r6 | r1 = r6;
0x0000e38a ldr r2, [pc, 0xd0] |
0x0000e38c movs r6, 0 | r6 = 0;
0x0000e38e ldr r0, [pc, 0xd0] |
0x0000e390 ldr r3, [pc, 0xd0] |
0x0000e392 add r2, pc | r2 = 0x1c7f4;
0x0000e394 strd r5, r4, [sp, 0x18] | __asm ("strd r5, r4, [var_18h]");
0x0000e396 strb r6, [r0, r0] | *((r0 + r0)) = r6;
0x0000e398 add r0, pc | r0 = 0x1c7fe;
0x0000e39a adds r2, 7 | r2 += 7;
0x0000e39c add r3, pc | r3 = 0x1c804;
0x0000e39e str r0, [sp, 0x14] | var_14h = r0;
0x0000e3a0 str r3, [sp] | *(sp) = r3;
0x0000e3a2 movs r0, 7 | r0 = 7;
0x0000e3a4 mov.w r3, 0x840 | r3 = 0x840;
0x0000e3a8 str.w ip, [sp, 4] | __asm ("str.w ip, [var_4h]");
0x0000e3ac strd r6, r6, [sp, 0xc] | __asm ("strd r6, r6, [var_ch_2]");
0x0000e3b0 bl 0x16964 | fcn_00016964 (r0, r1, r2, r3, r4, r5, r6);
0x0000e3b4 b 0xe32a | goto label_0;
| label_7:
0x0000e3b6 movs r4, 0 | r4 = 0;
0x0000e3b8 b 0xe32a | goto label_0;
| label_20:
0x0000e3ba add.w r1, r7, 0x10 | r1 += var_10h;
0x0000e3be mov r0, sb | r0 = sb;
0x0000e3c0 bl 0xba14 | fcn_0000ba14 (r0, r1);
0x0000e3c4 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0000e3c6 ldr.w ip, [pc, 0xa0] |
0x0000e3ca add ip, pc | ip = 0x1c838;
0x0000e3cc cmp r3, 0 |
0x0000e3ce bne 0xe386 |
| } while (r3 != 0);
0x0000e3d0 b 0xe384 | goto label_1;
| label_6:
0x0000e3d2 mov r6, r4 | r6 = r4;
0x0000e3d4 bl 0xa0d0 | fcn_0000a0d0 (r0, r1);
0x0000e3d8 b 0xe32a | goto label_0;
| label_12:
0x0000e3da mov r0, sl | r0 = sl;
0x0000e3dc b 0xe2b0 | goto label_2;
| label_4:
0x0000e3de ldr r1, [pc, 0x8c] |
0x0000e3e0 movw r2, 0x814 | r2 = 0x814;
0x0000e3e4 ldr r3, [pc, 0x88] |
0x0000e3e6 mov r4, sb | r4 = sb;
0x0000e3e8 ldr r0, [pc, 0x88] |
0x0000e3ea mvn r6, 0x15 | r6 = ~0x15;
0x0000e3ee add r1, pc | r1 = 0x1c860;
0x0000e3f0 add r3, pc | r3 = 0x1c864;
0x0000e3f2 adds r1, 7 | r1 += 7;
0x0000e3f4 add r0, pc | r0 = "sd_device_enumerator_unref";
0x0000e3f6 bl 0x167c8 | fcn_000167c8 ("sd_device_enumerator_unref", r1, r2, r3);
0x0000e3fa b 0xe32a | goto label_0;
| label_5:
0x0000e3fc ldr r1, [pc, 0x78] |
0x0000e3fe movw r2, 0x815 | r2 = 0x815;
0x0000e402 ldr r3, [pc, 0x78] |
0x0000e404 mov r4, r5 | r4 = r5;
0x0000e406 ldr r0, [pc, 0x78] |
0x0000e408 mvn r6, 0x15 | r6 = ~0x15;
0x0000e40c add r1, pc | r1 = "sd_device_enumerator_new";
0x0000e40e add r3, pc | r3 = 0x1c890;
0x0000e410 adds r1, 7 | r1 += 7;
0x0000e412 add r0, pc | r0 = 0x1c898;
0x0000e414 bl 0x167c8 | fcn_000167c8 (r0, "sd_device_enumerator_new", r2, r3);
0x0000e418 b 0xe32a | goto label_0;
| label_16:
0x0000e41a mov r1, r5 | r1 = r5;
0x0000e41c mov r0, sb | r0 = sb;
0x0000e41e bl 0xa0d0 | fcn_0000a0d0 (r0, r1);
0x0000e422 b 0xe32a | goto label_0;
| label_8:
0x0000e424 mov r6, r5 | r6 = r5;
0x0000e426 b 0xe256 | goto label_3;
| label_10:
0x0000e428 ldr r1, [pc, 0x58] |
0x0000e42a movw r2, 0x823 | r2 = 0x823;
0x0000e42e ldr r3, [pc, 0x58] |
0x0000e430 ldr r0, [pc, 0x58] |
0x0000e432 add r1, pc | r1 = 0x1c8ba;
0x0000e434 add r3, pc | r3 = 0x1c8c2;
0x0000e436 adds r1, 7 | r1 += 7;
0x0000e438 add r0, pc | r0 = "device_enumerator_dedup_devices";
0x0000e43a bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
| label_18:
0x0000e43e blx 0x35d0 | fcn_000035d0 ();
| label_15:
0x0000e442 mvn r6, 0xb | r6 = ~0xb;
0x0000e446 b 0xe32a | 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/libudev.so.1.7.2 @ 0xe594 */
| #include <stdint.h>
|
; (fcn) fcn.0000e594 () | void fcn_0000e594 (int16_t arg_38h, int16_t arg_28h, int16_t arg_80ch, int16_t arg_810h, int16_t arg_814h, int16_t arg1, int16_t arg2, int16_t arg4) {
| int16_t var_ch;
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
0x0000e594 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0000e598 mov sb, r3 | sb = r3;
0x0000e59a ldr r3, [r1] | r3 = *(r1);
0x0000e59c sub sp, 0xc |
0x0000e59e mov r7, r0 | r7 = r0;
0x0000e5a0 mov r6, r1 | r6 = r1;
0x0000e5a2 ldr r5, [r0, 0x70] | r5 = *(arg_28hx70);
0x0000e5a4 add r2, r3 | r2 += r3;
0x0000e5a6 ldr r4, [sp, 0x28] | r4 = *(arg_28h);
0x0000e5a8 add r5, r2 | r5 += r2;
0x0000e5aa mov r0, r5 | r0 = r5;
0x0000e5ac blx 0x37c8 | fcn_000037c8 ();
0x0000e5b0 ldr.w r3, [sb, 0x804] | r3 = *((sb + 0x804));
0x0000e5b4 mov r8, r0 | r8 = r0;
0x0000e5b6 adds r2, r0, r3 | r2 = r0 + r3;
0x0000e5b8 cmp.w r2, 0x800 |
| if (r2 < 0x800) {
0x0000e5bc bhs 0xe5d4 |
0x0000e5be add.w r0, sb, r3 | r0 = sb + r3;
0x0000e5c2 mov r1, r5 | r1 = r5;
0x0000e5c4 mov r2, r8 | r2 = r8;
0x0000e5c6 blx 0x3578 | mmap64 ()
0x0000e5ca ldr.w r3, [sb, 0x804] | r3 = *((sb + 0x804));
0x0000e5ce add r3, r8 | r3 += r8;
0x0000e5d0 str.w r3, [sb, 0x804] | __asm ("str.w r3, [sb, 0x804]");
| }
0x0000e5d4 ldrb r2, [r6, 8] | r2 = *((r6 + 8));
| if (r2 == 0) {
0x0000e5d6 cbz r2, 0xe630 | goto label_0;
| }
0x0000e5d8 movs r5, 0 | r5 = 0;
| do {
0x0000e5da ldr r2, [r7, 0x70] | r2 = *((r7 + 0x70));
0x0000e5dc adds r1, r3, 1 | r1 = r3 + 1;
0x0000e5de cmp.w r1, 0x800 |
0x0000e5e2 ldr.w ip, [r2, 0x28] | ip = *((r2 + 0x28));
0x0000e5e6 ldr r0, [r2, 0x20] | r0 = *((r2 + 0x20));
0x0000e5e8 umull ip, lr, ip, r5 | ip:lr = ip * r5;
0x0000e5ec add ip, r0 |
0x0000e5ee it lo |
| if (r1 >= 0x800) {
0x0000e5f0 ldrblo r2, [r6, ip] | r2 = *((r6 + ip));
| }
0x0000e5f4 add.w r0, r6, ip | r0 = r6 + ip;
0x0000e5f8 itt lo |
| if (r1 >= 0x800) {
0x0000e5fa strlo r1, [sb, 0x804] | *((sb + 0x804)) = r1;
| }
| if (r1 < 0x800) {
0x0000e5fe strb.w r2, [sb, r3] | *((sb + r3)) = r2;
| }
0x0000e602 mov r3, sb | r3 = sb;
0x0000e604 it lo |
| if (r1 >= 0x800) {
0x0000e606 ldrlo r2, [r7, 0x70] | r2 = *((r7 + 0x70));
| }
0x0000e608 ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x0000e60a mov r0, r7 | r0 = r7;
0x0000e60c str r4, [sp] | *(sp) = r4;
0x0000e60e add r1, r2 | r1 += r2;
0x0000e610 movs r2, 0 | r2 = 0;
0x0000e612 bl 0xe594 | r0 = fcn_0000e594 (r0, r1, r2, r3, r4, r5, r6);
0x0000e616 cmp r0, 0 |
| if (r0 < 0) {
0x0000e618 blt 0xe698 | goto label_1;
| }
0x0000e61a ldr.w r3, [sb, 0x804] | r3 = *((sb + 0x804));
0x0000e61e cmp r3, 0 |
| if (r3 == 0) {
0x0000e620 beq 0xe6b6 | goto label_2;
| }
0x0000e622 subs r3, 1 | r3--;
0x0000e624 adds r5, 1 | r5++;
0x0000e626 str.w r3, [sb, 0x804] | __asm ("str.w r3, [sb, 0x804]");
0x0000e62a ldrb r2, [r6, 8] | r2 = *((r6 + 8));
0x0000e62c cmp r2, r5 |
0x0000e62e bhi 0xe5da |
| } while (r2 > r5);
| label_0:
0x0000e630 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0000e632 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x0000e634 orrs r2, r1 | r2 |= r1;
| if (r2 == r1) {
0x0000e636 beq 0xe6a2 | goto label_3;
| }
0x0000e638 adds r2, r3, 1 | r2 = r3 + 1;
0x0000e63a mov r1, r4 | r1 = r4;
0x0000e63c cmp.w r2, 0x800 |
0x0000e640 ittte lo |
| if (r2 >= 0x800) {
0x0000e642 movlo r2, 0 | r2 = 0;
| }
| if (r2 >= 0x800) {
0x0000e644 movlo r0, sb | r0 = sb;
| }
| if (r2 >= 0x800) {
0x0000e646 strblo r2, [sb, r3] | *((sb + r3)) = r2;
| }
| if (r2 >= 0x800) {
0x0000e64a movs r0, 0 | r0 = 0;
| }
0x0000e64c movs r2, 0 | r2 = 0;
0x0000e64e blx 0x36e0 | r0 = fstatat64 ();
| if (r0 != 0) {
0x0000e652 cbnz r0, 0xe69e | goto label_4;
| }
0x0000e654 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0000e656 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x0000e658 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0000e65a beq 0xe69e | goto label_4;
| }
0x0000e65c mov r5, r0 | r5 = r0;
0x0000e65e mov r3, r0 | r3 = r0;
0x0000e660 mov r4, r0 | r4 = r0;
0x0000e662 b 0xe674 |
| while (r0 >= 0) {
0x0000e664 ldr r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x0000e666 adds r5, 1 | r5++;
0x0000e668 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x0000e66a mov r3, r5 | r3 = r5;
0x0000e66c cmp r5, r1 |
0x0000e66e sbcs.w r2, r4, r2 | __asm ("sbcs.w r2, r4, r2");
| if (r5 >= r1) {
0x0000e672 bhs 0xe69e | goto label_4;
| }
0x0000e674 ldr r2, [r7, 0x70] | r2 = *((r7 + 0x70));
0x0000e676 mov r0, r7 | r0 = r7;
0x0000e678 ldrb.w ip, [r6, 8] | ip = *((r6 + 8));
0x0000e67c ldr r1, [r2, 0x30] | r1 = *((r2 + 0x30));
0x0000e67e umull r1, r3, r1, r3 | r1:r3 = r1 * r3;
0x0000e682 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x0000e684 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0000e686 umull r3, ip, r3, ip | r3:ip = r3 * ip;
0x0000e68a add r1, r2 | r1 += r2;
0x0000e68c add r1, r3 | r1 += r3;
0x0000e68e add r1, r6 | r1 += r6;
0x0000e690 bl 0xe490 | r0 = fcn_0000e490 (r0, r1);
0x0000e694 cmp r0, 0 |
0x0000e696 bge 0xe664 |
| }
| label_1:
0x0000e698 add sp, 0xc |
0x0000e69a pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x0000e69e ldr.w r3, [sb, 0x804] | r3 = *((sb + 0x804));
| label_3:
0x0000e6a2 cmp r8, r3 |
| if (r8 <= r3) {
0x0000e6a4 bhi 0xe6b6 |
0x0000e6a6 sub.w r3, r3, r8 | r3 -= r8;
0x0000e6aa movs r0, 0 | r0 = 0;
0x0000e6ac str.w r3, [sb, 0x804] | __asm ("str.w r3, [sb, 0x804]");
0x0000e6b0 add sp, 0xc |
0x0000e6b2 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
| label_2:
0x0000e6b6 ldr r1, [pc, 0x14] |
0x0000e6b8 movs r2, 0x3a | r2 = 0x3a;
0x0000e6ba ldr r3, [pc, 0x14] |
0x0000e6bc ldr r0, [pc, 0x14] |
0x0000e6be add r1, pc | r1 = 0x1cd90;
0x0000e6c0 add r3, pc | r3 = 0x1cd96;
0x0000e6c2 adds r1, 7 | r1 += 7;
0x0000e6c4 add r0, pc | r0 = 0x1cd9c;
0x0000e6c6 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
0x0000e6ca nop |
0x0000e6cc lsls r6, r3, 3 | r6 = r3 << 3;
0x0000e6ce movs r1, r0 | r1 = r0;
0x0000e6d0 lsls r0, r7, 0xd | r0 = r7 << 0xd;
0x0000e6d2 movs r1, r0 | r1 = r0;
0x0000e6d4 lsls r0, r0, 4 | r0 <<= 4;
0x0000e6d6 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/libudev.so.1.7.2 @ 0x113e4 */
| #include <stdint.h>
|
; (fcn) fcn.000113e4 () | void fcn_000113e4 (int16_t arg_bch, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_14h_2;
| FILE * stream;
| int16_t var_20h;
| int32_t var_10h_2;
| int16_t var_8ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000113e4 push.w {r4, r5, r6, r7, r8, lr} |
0x000113e8 mov r6, r2 | r6 = r2;
0x000113ea ldr r2, [pc, 0xcc] |
0x000113ec mov r7, r3 | r7 = r3;
0x000113ee sub sp, 0x90 |
0x000113f0 ldr r3, [pc, 0xc8] | r3 = *(0x114bc);
0x000113f2 add r2, pc | r2 = 0x228b0;
0x000113f4 ldr r3, [r2, r3] |
0x000113f6 ldr r3, [r3] | r3 = *(0x228b0);
0x000113f8 str r3, [sp, 0x8c] | var_8ch = r3;
0x000113fa mov.w r3, 0 | r3 = 0;
0x000113fc lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 == 0) {
0x000113fe cbz r0, 0x1141a | goto label_10;
| }
0x00011400 mov r5, r0 | r5 = r0;
0x00011402 cmp r1, 0 |
| if (r1 == 0) {
0x00011404 beq 0x1149a | goto label_11;
| }
| label_1:
0x00011406 ldr.w r8, [r1, 0x10] | r8 = var_10h_2;
0x0001140a tst.w r8, 7 |
| if ((r8 & 7) == 0) {
0x0001140e beq 0x1141a | goto label_10;
| }
0x00011410 bl 0x15ca8 | fcn_00015ca8 ();
| if (r6 == 0) {
0x00011414 cbz r6, 0x11436 | goto label_12;
| }
0x00011416 cmp r0, 3 |
| if (r0 > 3) {
0x00011418 bgt 0x11464 | goto label_13;
| }
| do {
| label_10:
0x0001141a movs r0, 0 | r0 = 0;
| label_0:
0x0001141c ldr r2, [pc, 0xa0] |
0x0001141e ldr r3, [pc, 0x9c] | r3 = *(0x114be);
0x00011420 add r2, pc | r2 = 0x228e4;
0x00011422 ldr r3, [r2, r3] | r3 = *(0x228e4);
0x00011424 ldr r2, [r3] | r2 = *(0x228e4);
0x00011426 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x00011428 eors r2, r3 | r2 ^= r3;
0x0001142a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001142e bne 0x114b4 | goto label_14;
| }
0x00011430 add sp, 0x90 |
0x00011432 pop.w {r4, r5, r6, r7, r8, pc} |
| label_12:
0x00011436 cmp r0, 3 |
0x00011438 ble 0x1141a |
| } while (r0 <= 3);
0x0001143a ldr r2, [pc, 0x88] |
0x0001143c ubfx r3, r8, 0, 0xc | r3 = (r8 >> 0) & ((1 << 0xc) - 1);
0x00011440 ldr r0, [pc, 0x84] | r0 = *(0x114c8);
0x00011442 ldr r1, [pc, 0x88] | r1 = *(0x114ce);
0x00011444 add r2, pc | r2 = 0x2290e;
0x00011446 invalid |
0x00011448 strh r2, [r0, r4] | *((r0 + r4)) = r2;
0x0001144a add r0, pc | r0 += pc;
0x0001144c movw r3, 0x589 | r3 = 0x589;
0x00011450 add r1, pc | r1 += pc;
0x00011452 adds r2, 7 | r2 += 7;
0x00011454 strd r1, r0, [sp] | __asm ("strd r1, r0, [sp]");
0x00011458 mov r1, r6 | r1 = r6;
0x0001145a movs r0, 4 | r0 = 4;
0x0001145c bl 0x164ec | fcn_000164ec (r0, r1, r2);
0x00011460 mov r0, r6 | r0 = r6;
0x00011462 b 0x1141c | goto label_0;
| label_13:
0x00011464 ldr r3, [pc, 0x68] |
0x00011466 movs r4, 0 | r4 = 0;
0x00011468 ldr r2, [pc, 0x68] |
0x0001146a mov r0, r6 | r0 = r6;
0x0001146c ldr r1, [pc, 0x68] |
0x0001146e add r3, pc | r3 = 0x22942;
0x00011470 str r4, [sp] | *(sp) = r4;
0x00011472 add r2, pc | r2 = 0x2294a;
0x00011474 adds r3, 7 | r3 += 7;
0x00011476 add r1, pc | r1 = 0x22952;
0x00011478 str r2, [sp, 0x10] | var_10h = r2;
0x0001147a str r1, [sp, 0xc] | var_ch = r1;
0x0001147c ubfx r2, r8, 0, 0xc | r2 = (r8 >> 0) & ((1 << 0xc) - 1);
0x00011480 movw r1, 0x585 | r1 = 0x585;
0x00011484 str r3, [sp, 4] | var_4h = r3;
0x00011486 strd r5, r2, [sp, 0x14] | __asm ("strd r5, r2, [var_14h]");
0x0001148a mov r3, r7 | r3 = r7;
0x0001148c str r1, [sp, 8] | var_8h = r1;
0x0001148e mov r2, r5 | r2 = r5;
0x00011490 movs r1, 4 | r1 = 4;
0x00011492 bl 0x16d0c | fcn_00016d0c (r0, r1, r2, r3, r4, r5, r6);
0x00011496 mov r0, r4 | r0 = r4;
0x00011498 b 0x1141c | goto label_0;
| label_11:
0x0001149a add r4, sp, 0x20 | r4 += var_20h;
0x0001149c mov r1, r4 | r1 = r4;
0x0001149e blx 0x35f8 | r0 = fcn_000035f8 ();
0x000114a2 cmp r0, 0 |
0x000114a4 it ge |
| if (r0 >= 0) {
0x000114a6 movge r1, r4 | r1 = r4;
| goto label_15;
| }
| if (r0 >= 0) {
| label_15:
0x000114a8 bge 0x11406 | goto label_1;
| }
0x000114aa blx 0x3828 | r0 = fcn_00003828 ();
0x000114ae ldr r0, [r0] | r0 = *(r0);
0x000114b0 rsbs r0, r0, 0 | r0 -= ;
0x000114b2 b 0x1141c | goto label_0;
| label_14:
0x000114b4 blx 0x35d0 | fcn_000035d0 ();
0x000114b8 lsrs r2, r4, 5 | r2 = r4 >> 5;
0x000114ba movs r2, r0 | r2 = r0;
0x000114bc lsls r4, r5, 9 | r4 = r5 << 9;
0x000114be movs r0, r0 |
0x000114c0 lsrs r4, r6, 4 | r4 = r6 >> 4;
0x000114c2 movs r2, r0 | r2 = r0;
0x000114c4 svc 0x80 | __asm ("svc 0x80");
0x000114c6 movs r0, r0 |
0x000114c8 b 0x11630 | goto label_16;
| label_3:
0x00011558 ldr r3, [sp, 0xbc] | r3 = *(arg_bch);
0x0001155a mov.w r8, 0 | r8 = 0;
0x0001155e mov r7, r8 | r7 = r8;
0x00011560 mov sb, r8 | sb = r8;
0x00011562 adds r1, r5, 1 | r1 = r5 + 1;
0x00011564 and r3, r3, 1 | r3 &= 1;
0x00011568 str r3, [sp, 0xc] | var_ch = r3;
0x0001156a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001156c cmp r3, 0 |
| if (r3 == 0) {
0x0001156e beq 0x11616 | goto label_17;
| }
| do {
0x00011570 mov r0, r1 | r0 = r1;
0x00011572 blx 0x3728 | r0 = strftime (r0, r1, r2, r3);
0x00011576 mov r4, r0 | r4 = r0;
0x00011578 cmp r0, 0 |
| if (r0 == 0) {
0x0001157a beq.w 0x11874 | goto label_18;
| }
0x0001157e cmp.w sb, 0 |
| if (sb != 0) {
0x00011582 beq 0x115a0 |
0x00011584 cmp.w r8, 0 |
| if (r8 == 0) {
0x00011588 beq.w 0x11728 | goto label_19;
| }
0x0001158c mov r2, sb | r2 = sb;
0x0001158e mov r1, r8 | r1 = r8;
0x00011590 blx 0x3578 | mmap64 ()
0x00011594 mov r1, sb | r1 = sb;
0x00011596 mov.w r2, -1 | r2 = -1;
0x0001159a mov r0, r8 | r0 = r8;
0x0001159c blx 0x3970 | fcn_00003970 ();
0x0001159e invalid |
| }
0x000115a0 mov r0, r8 | r0 = r8;
0x000115a2 blx 0x3530 | ferror (r0);
| label_2:
0x000115a6 cmp.w sl, -1 |
| if (sl == -1) {
0x000115aa beq 0x116a2 | goto label_20;
| }
| label_4:
0x000115ac blx 0x3828 | fcn_00003828 ();
0x000115b0 sub.w r8, r5, r7 | r8 = r5 - r7;
0x000115b4 movs r3, 0 | r3 = 0;
0x000115b6 str r3, [r0] | *(r0) = r3;
0x000115b8 mov sb, r0 | sb = r0;
0x000115ba mov r3, r6 | r3 = r6;
0x000115bc mov r2, r8 | r2 = r8;
0x000115be movs r1, 1 | r1 = 1;
0x000115c0 adds r0, r4, r7 | r0 = r4 + r7;
0x000115c2 blx 0x36c8 | r0 = fnmatch ();
0x000115c6 cmp r8, r0 |
0x000115c8 mov fp, r0 |
| if (r8 <= r0) {
0x000115ca blo 0x116ac | goto label_21;
| }
0x000115cc add r7, r0 | r7 += r0;
0x000115ce mov r0, r6 | r0 = r6;
0x000115d0 blx 0x353c | r0 = strndup (r0, r1);
0x000115d4 mov r8, r0 | r8 = r0;
0x000115d6 cmp r0, 0 |
| if (r0 != 0) {
0x000115d8 bne.w 0x11802 | goto label_22;
| }
0x000115dc mov r0, r6 | r0 = r6;
0x000115de blx 0x37a4 | r0 = fcn_000037a4 ();
0x000115e2 cmp r0, 0 |
| if (r0 != 0) {
0x000115e4 bne.w 0x1173c | goto label_6;
| }
0x000115e8 cmp.w sl, -1 |
| if (sl != -1) {
0x000115ec bne.w 0x11816 | goto label_23;
| }
0x000115f0 cmp.w fp, 0 |
| if (fp == 0) {
0x000115f4 beq 0x116c2 | goto label_24;
| }
0x000115f6 mvn r3, 0xfc000000 | r3 = ~0xfc000000;
0x000115fa cmp r5, r3 |
| if (r5 >= r3) {
0x000115fc bhs.w 0x11830 | goto label_25;
| }
0x00011600 lsls r2, r5, 1 | r2 = r5 << 1;
0x00011602 mov sb, r5 | sb = r5;
0x00011604 mov r8, r4 | r8 = r4;
0x00011606 cmp r2, r3 |
0x00011608 it hs |
| if (r2 < r3) {
0x0001160a movhs r2, r3 | r2 = r3;
| }
0x0001160c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001160e mov r5, r2 | r5 = r2;
0x00011610 adds r1, r5, 1 | r1 = r5 + 1;
0x00011612 cmp r3, 0 |
0x00011614 bne 0x11570 |
| } while (r3 != 0);
| label_17:
0x00011616 mov r0, r8 | r0 = r8;
0x00011618 blx 0x361c | r0 = fcn_0000361c ();
0x0001161c mov r4, r0 | r4 = r0;
0x0001161e cmp r0, 0 |
| if (r0 != 0) {
0x00011620 bne 0x115a6 | goto label_2;
| }
0x00011622 mov r4, r8 | r4 = r8;
0x00011624 mvn r8, 0xb | r8 = ~0xb;
0x00011628 b 0x11644 | void (*0x11644)() ();
| label_16:
0x00011630 blx 0x3a6c | r0 = fcn_00003a6c ();
0x00011634 cmp r0, 0 |
| if (r0 >= 0) {
0x00011636 bge 0x11558 | goto label_3;
| }
0x00011638 blx 0x3828 | r0 = fcn_00003828 ();
0x0001163c ldr r3, [r0] | r3 = *(r0);
0x0001163e movs r4, 0 | r4 = 0;
0x00011640 rsb.w r8, r3, 0 | r8 = r3 - ;
| label_20:
0x000116a2 mov r0, r4 | r0 = r4;
0x000116a4 blx 0x3840 | r0 = fcn_00003840 ();
0x000116a8 subs r5, r0, 1 | r5 = r0 - 1;
0x000116aa b 0x115ac | goto label_4;
| label_21:
0x000116ac ldr r1, [pc, 0x1e0] |
0x000116ae movw r2, 0x263 | r2 = 0x263;
0x000116b2 ldr r3, [pc, 0x1e0] |
0x000116b4 ldr r0, [pc, 0x1e0] |
0x000116b6 add r1, pc | r1 = 0x22f4a;
0x000116b8 add r3, pc | r3 = 0x22f52;
0x000116ba adds r1, 7 | r1 += 7;
0x000116bc add r0, pc | r0 = 0x22f58;
0x000116be bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
0x000116c0 invalid |
| label_24:
0x000116c2 ldr r1, [pc, 0x1d8] |
0x000116c4 movw r2, 0x272 | r2 = 0x272;
0x000116c6 movs r2, 0x72 | r2 = 0x72;
0x000116c8 ldr r3, [pc, 0x1d4] |
0x000116ca ldr r0, [pc, 0x1d8] |
0x000116cc add r1, pc | r1 = 0x22f6e;
0x000116ce add r3, pc | r3 = 0x22f72;
0x000116d0 adds r1, 7 | r1 += 7;
0x000116d2 add r0, pc | r0 = 0x22f7c;
0x000116d4 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
0x000116d8 ldr r1, [pc, 0x1cc] |
0x000116da mov.w r2, 0x21c | r2 = 0x21c;
0x000116de ldr r3, [pc, 0x1cc] |
0x000116e0 ldr r0, [pc, 0x1cc] |
0x000116e2 add r1, pc | r1 = 0x22f8e;
0x000116e4 add r3, pc | r3 = 0x22f96;
0x000116e6 adds r1, 7 | r1 += 7;
0x000116e8 add r0, pc | r0 = 0x22f9c;
0x000116ea bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
0x000116ee ldr r1, [pc, 0x1c4] |
0x000116f0 movw r2, 0x21d | r2 = 0x21d;
0x000116f4 ldr r3, [pc, 0x1c0] |
0x000116f6 ldr r0, [pc, 0x1c4] |
0x000116f8 add r1, pc | r1 = 0x22fb2;
0x000116fa add r3, pc | r3 = 0x22fb6;
0x000116fc adds r1, 7 | r1 += 7;
0x000116fe add r0, pc | r0 = 0x22fc0;
0x00011700 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
0x00011704 ldr r1, [pc, 0x1b8] |
0x00011706 movw r2, 0x21e | r2 = 0x21e;
0x0001170a ldr r3, [pc, 0x1b8] |
0x0001170c ldr r0, [pc, 0x1b8] |
0x0001170e add r1, pc | r1 = 0x22fd2;
0x00011710 add r3, pc | r3 = 0x22fda;
0x00011712 adds r1, 7 | r1 += 7;
0x00011714 add r0, pc | r0 = 0x22fe0;
0x00011716 bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
0x0001171a blx 0x3828 | r0 = fcn_00003828 ();
0x0001171e ldr r3, [r0] | r3 = *(r0);
0x00011720 rsb.w r8, r3, 0 | r8 = r3 - ;
0x00011724 movs r4, 0 | r4 = 0;
0x00011726 b 0x11644 | void (*0x11644)() ();
| label_19:
0x00011728 ldr r1, [pc, 0x1a0] |
0x0001172a movs r2, 0x16 | r2 = 0x16;
0x0001172c ldr r3, [pc, 0x1a0] |
0x0001172e ldr r0, [pc, 0x1a4] |
0x00011730 add r1, pc | r1 = 0x23000;
0x00011732 add r3, pc | r3 = 0x23006;
0x00011734 adds r1, 7 | r1 += 7;
0x00011736 add r0, pc | r0 = 0x23010;
0x00011738 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_6:
0x0001173c ldr r3, [sp, 0xbc] | r3 = *(arg_bch);
0x0001173e tst.w r3, 6 |
| if ((r3 & 6) != 0) {
0x00011742 beq 0x11786 |
0x00011744 movs r3, 0 | r3 = 0;
0x00011746 ldrb.w r2, [sp, 0xc] | r2 = var_ch;
0x0001174a strb r3, [r4, r7] | *((r4 + r7)) = r3;
0x0001174c adds r1, r7, 1 | r1 = r7 + 1;
0x0001174e str r3, [sp, 0x1c] | stream = r3;
0x00011750 mov r0, r4 | r0 = r4;
0x00011752 ldr r3, [sp, 0xbc] | r3 = *(arg_bch);
0x00011754 tst.w r3, 2 |
0x00011758 add r3, sp, 0x20 | r3 += var_20h;
0x0001175a str r3, [sp] | *(sp) = r3;
0x0001175c add r3, sp, 0x1c | r3 += stream;
| if ((r3 & 2) == 0) {
0x0001175e beq 0x11836 | goto label_26;
| }
0x00011760 bl 0x14da0 | r0 = fcn_00014da0 (r0, r1, r2, r3, r4, r5, r6);
0x00011764 mov r3, r0 | r3 = r0;
| label_7:
0x00011766 cmp r3, 0 |
| if (r3 < 0) {
0x00011768 blt 0x11856 | goto label_27;
| }
0x0001176a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001176c cmp r5, 0 |
0x0001176e ite eq |
| if (r5 != 0) {
0x00011770 moveq r3, 0 | r3 = 0;
| }
| if (r5 == 0) {
0x00011772 andne r3, r3, 1 | r3 &= 1;
| }
0x00011776 cmp r3, 0 |
| if (r3 != 0) {
0x00011778 bne 0x11860 | goto label_28;
| }
| label_8:
0x0001177a mov r0, r4 | r0 = r4;
0x0001177c blx 0x3530 | ferror (r0);
0x00011780 ldrd r4, r5, [sp, 0x1c] | __asm ("ldrd r4, r5, [stream]");
0x00011784 mov r7, r5 | r7 = r5;
| }
0x00011786 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 != 0) {
0x00011788 cbz r3, 0x117d6 |
0x0001178a ldr r2, [sp, 0x10] | r2 = var_10h;
0x0001178c movs r3, 0 | r3 = 0;
0x0001178e strb r3, [r4, r7] | *((r4 + r7)) = r3;
0x00011790 str r4, [r2] | *(r2) = r4;
0x00011792 mov r4, r3 | r4 = r3;
0x00011794 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00011796 str r7, [r3] | *(r3) = r7;
0x00011798 b 0x11644 | void (*0x11644)() ();
| }
0x000117d6 mov r2, r7 | r2 = r7;
0x000117d8 mov r1, r3 | r1 = r3;
0x000117da mov r0, r4 | r0 = r4;
0x000117dc blx 0x38e0 | fcn_000038e0 ();
0x000117de invalid |
0x000117e2 mvn r8, 0x49 | r8 = ~0x49;
| label_5:
0x000117e6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000117e8 cmp r3, 0 |
| if (r3 == 0) {
0x000117ea beq.w 0x11644 | void (*0x11644)() ();
| }
| label_9:
0x000117ee cmp r5, 0 |
| if (r5 == 0) {
0x000117f0 beq.w 0x11644 | void (*0x11644)() ();
| }
0x000117f4 mov.w r2, -1 | r2 = -1;
0x000117f8 mov r1, r5 | r1 = r5;
0x000117fa mov r0, r4 | r0 = r4;
0x000117fc blx 0x3970 | fcn_00003970 ();
0x00011800 b 0x11644 | void (*0x11644)() ();
| label_22:
0x00011802 ldr.w r3, [sb] | r3 = *(sb);
0x00011806 cmp r3, 0 |
0x00011808 it gt |
| if (r3 <= 0) {
0x0001180a rsbgt r8, r3, 0 | __asm ("rsbgt r8, r3, 0");
| goto label_29;
| }
| if (r3 > 0) {
| label_29:
0x0001180e bgt 0x117e6 | goto label_5;
| }
0x00011810 mvn r8, 4 | r8 = ~4;
0x00011814 b 0x117e6 | goto label_5;
| label_23:
0x00011816 cmp sl, r7 |
| if (sl == r7) {
0x00011818 beq 0x1173c | goto label_6;
| }
0x0001181a ldr r1, [pc, 0xbc] |
0x0001181c movw r2, 0x26e | r2 = 0x26e;
0x00011820 ldr r3, [pc, 0xb8] |
0x00011822 ldr r0, [pc, 0xbc] |
0x00011824 add r1, pc | r1 = 0x23102;
0x00011826 add r3, pc | r3 = 0x23106;
0x00011828 adds r1, 7 | r1 += 7;
0x0001182a add r0, pc | r0 = 0x23110;
0x0001182c bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_25:
0x00011830 mvn r8, 6 | r8 = ~6;
0x00011834 b 0x117e6 | goto label_5;
| label_26:
0x00011836 bl 0x14b98 | r0 = fcn_00014b98 (r0, r1, r2, r3, r4);
0x0001183a mov r3, r0 | r3 = r0;
0x0001183c b 0x11766 | goto label_7;
0x00011842 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00011844 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00011846 strb r3, [r4, r7] | *((r4 + r7)) = r3;
0x00011848 str r4, [r2] | *(r2) = r4;
0x0001184a mov r4, r3 | r4 = r3;
0x0001184c b 0x11644 | void (*0x11644)() ();
| label_27:
0x00011856 ldr r0, [sp, 0x1c] | r0 = stream;
0x00011858 mov r8, r3 | r8 = r3;
0x0001185a blx 0x3530 | ferror (r0);
0x0001185e b 0x117e6 | goto label_5;
| label_28:
0x00011860 mov r1, r5 | r1 = r5;
0x00011862 mov.w r2, -1 | r2 = -1;
0x00011866 mov r0, r4 | r0 = r4;
0x00011868 blx 0x3970 | fcn_00003970 ();
0x0001186c b 0x1177a | goto label_8;
| label_18:
0x00011874 mov r4, r8 | r4 = r8;
0x00011876 mov r5, sb | r5 = sb;
0x00011878 mvn r8, 0xb | r8 = ~0xb;
0x0001187a lsrs r3, r1, 0x20 | r3 = r1 >> 0x20;
0x0001187c b 0x117ee | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libudev.so.1.7.2 @ 0x12340 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00012340 () | void fcn_00012340 (uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int8_t var_1h;
| char * src;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_4h_2;
| int32_t var_8h_2;
| int32_t var_ch_2;
| int32_t var_10h_2;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| FILE * var_38h;
| FILE * var_38h_2;
| FILE * stream;
| int32_t var_44h;
| int16_t var_48h;
| FILE * var_4ch;
| int16_t var_50h;
| int16_t var_b8h;
| int32_t var_c8h;
| int32_t var_124h;
| int16_t var_12ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00012340 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00012344 sub sp, 0x13c |
0x00012346 add r7, sp, 0x10 | r7 += var_10h;
0x00012348 movs r4, 0 | r4 = 0;
0x0001234a ldr.w r5, [r7, 0x150] | r5 = *((r7 + 0x150));
0x0001234e str r3, [r7, 0x30] | var_30h = r3;
0x00012350 ldr.w r3, [pc, 0x7b4] | r3 = *(0x12b08);
0x00012354 str r5, [r7, 0x34] | var_34h = r5;
0x00012356 mov r5, r2 | r5 = r2;
0x00012358 ldr.w r2, [pc, 0x7b0] |
0x0001235a movs r7, 0xb0 | r7 = 0xb0;
0x0001235c add r2, pc | r2 = 0x24e6c;
0x0001235e ldr r3, [r2, r3] |
0x00012360 ldr r3, [r3] | r3 = *(0x24e6c);
0x00012362 str.w r3, [r7, 0x124] | __asm ("str.w r3, [var_124h]");
0x00012366 mov.w r3, 0 | r3 = 0;
0x0001236a strd r4, r4, [r7, 0x38] | __asm ("strd r4, r4, [var_38h]");
0x0001236e str r4, [r7, 0x40] | stream = r4;
0x00012370 cmp r0, 0 |
| if (r0 == 0) {
0x00012372 beq.w 0x128be | goto label_26;
| }
0x00012376 ands r3, r5, 2 | r3 = r5 & 2;
0x0001237a mov r6, r1 | r6 = r1;
0x0001237c mov r4, r0 | r4 = r0;
0x0001237e str r3, [r7, 0x1c] | var_1ch = r3;
| if (r3 != r5) {
0x00012380 bne 0x123de | goto label_27;
| }
0x00012382 ands r3, r5, 0x20 | r3 = r5 & 0x20;
0x00012386 str r3, [r7, 0x2c] | var_2ch = r3;
| if (r3 != r5) {
0x00012388 beq 0x1238e |
0x0001238a ldr r3, [r7, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x0001238c cbnz r3, 0x12392 | goto label_0;
| }
| }
0x0001238e ldrb r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x00012390 cbnz r3, 0x123f0 | goto label_28;
| }
| do {
| label_0:
0x00012392 mov.w r6, -1 | r6 = -1;
0x00012396 mvn r1, 0x15 | r1 = ~0x15;
| label_3:
0x0001239a mov r0, r6 | r0 = r6;
0x0001239c str r1, [r7, 0x34] | var_34h = r1;
0x0001239e bl 0x10570 | fcn_00010570 (r0);
0x000123a2 ldr r0, [r7, 0x40] | r0 = stream;
0x000123a4 blx 0x3530 | ferror (r0);
0x000123a8 ldr r0, [r7, 0x3c] | r0 = var_38h_2;
0x000123aa blx 0x3530 | ferror (r0);
0x000123ae ldr r0, [r7, 0x38] | r0 = var_38h;
0x000123b0 blx 0x3530 | ferror (r0);
0x000123b4 ldr.w r2, [pc, 0x758] |
0x000123b8 ldr.w r3, [pc, 0x74c] | r3 = *(0x12b08);
0x000123bc ldr r1, [r7, 0x34] | r1 = var_34h;
0x000123be add r2, pc | r2 = 0x24ed2;
0x000123c0 ldr r3, [r2, r3] | r3 = *(0x24ed2);
0x000123c2 ldr r2, [r3] | r2 = *(0x24ed2);
0x000123c4 ldr.w r3, [r7, 0x124] | r3 = var_124h;
0x000123c8 eors r2, r3 | r2 ^= r3;
0x000123ca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000123ce bne.w 0x12aea | goto label_29;
| }
0x000123d2 mov r0, r1 | r0 = r1;
0x000123d4 add.w r7, r7, 0x12c | r7 += var_12ch;
0x000123d8 mov sp, r7 |
0x000123da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x000123de ldr r3, [r7, 0x34] | r3 = var_34h;
0x000123e0 cmp r3, 0 |
0x000123e2 bne 0x12392 |
| } while (r3 != 0);
0x000123e4 and r3, r5, 0x20 | r3 = r5 & 0x20;
0x000123e8 str r3, [r7, 0x2c] | var_2ch = r3;
0x000123ea ldrb r3, [r4] | r3 = *(r4);
0x000123ec cmp r3, 0 |
| if (r3 == 0) {
0x000123ee beq 0x12392 | goto label_0;
| }
| label_28:
0x000123f0 mov r0, r6 | r0 = r6;
0x000123f2 bl 0x18b40 | r0 = fcn_00018b40 (r0);
0x000123f6 cmp r0, 0 |
| if (r0 == 0) {
0x000123f8 beq.w 0x125aa | goto label_30;
| }
0x000123fc ldr r3, [r7, 0x30] | r3 = var_30h;
| if (r3 == 0) {
0x000123fe cbnz r3, 0x12418 |
| label_1:
0x00012400 ldr r3, [r7, 0x34] | r3 = var_34h;
0x00012402 and r2, r5, 0x2e | r2 = r5 & 0x2e;
0x00012406 subs r3, 0 |
0x00012408 it ne |
| if (r3 == 0) {
0x0001240a movne r3, 1 | r3 = 1;
| }
0x0001240c cmp r2, 0 |
0x0001240e it ne |
| if (r2 == 0) {
0x00012410 movne r3, 0 | r3 = 0;
| }
0x00012412 cmp r3, 0 |
| if (r3 != 0) {
0x00012414 bne.w 0x12808 | goto label_31;
| }
| }
| label_2:
0x00012418 add.w r1, r7, 0x38 | r1 += var_38h;
0x0001241c mov r0, r4 | r0 = r4;
0x0001241e bl 0x1827c | r0 = fcn_0001827c (r0, r1, r2, r3);
0x00012422 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 < r0) {
0x00012424 blt.w 0x1265c | goto label_32;
| }
0x00012428 ldr r0, [r7, 0x40] | r0 = stream;
0x0001242a cmp r0, 0 |
| if (r0 == 0) {
0x0001242c beq.w 0x128b8 | goto label_33;
| }
| label_10:
0x00012430 mov.w r1, 0x284000 | r1 = 0x284000;
0x00012434 blx 0x36ec | r0 = asprintf_chk ();
0x00012438 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x0001243a blt.w 0x12670 | goto label_34;
| }
0x0001243e ands r3, r5, 8 | r3 = r5 & 8;
0x00012442 str r3, [r7, 0x18] | var_18h = r3;
| if (r3 != r5) {
0x00012444 bne.w 0x12662 | goto label_35;
| }
| label_4:
0x00012448 ands r3, r5, 0x10 | r3 = r5 & 0x10;
0x0001244c ldr.w sb, [r7, 0x38] | sb = var_38h;
0x00012450 it eq |
| if (r3 != r5) {
0x00012452 streq r3, [r7, 0xc] | var_ch_2 = r3;
| }
| if (r3 != r5) {
0x00012454 beq 0x1246c |
0x00012456 ldr.w r1, [pc, 0x6bc] |
0x0001245a mov r0, sb | r0 = sb;
0x0001245c add r1, pc | r1 = 0x24f76;
0x0001245e bl 0x1af54 | r0 = fcn_0001af54 (r0, r1);
0x00012462 cmp r0, 0 |
| if (r0 == 0) {
0x00012464 beq.w 0x1293e | goto label_36;
| }
0x00012468 movs r3, 1 | r3 = 1;
0x0001246a str r3, [r7, 0xc] | var_ch_2 = r3;
| }
| label_14:
0x0001246c ldr.w r8, [r7, 0x40] | r8 = stream;
0x00012470 cmp.w r8, 0 |
| if (r8 == 0) {
0x00012474 beq.w 0x128e2 | goto label_37;
| }
0x00012478 mov r0, sb | r0 = sb;
0x0001247a movs r2, 1 | r2 = 1;
0x0001247c mov r1, r8 | r1 = r8;
0x0001247e bl 0x18554 | fcn_00018554 (r0, r1, r2, r3, r4);
0x00012482 str r0, [r7, 0x44] | var_44h = r0;
0x00012484 cmp r0, 0 |
| if (r0 == 0) {
0x00012486 beq.w 0x1267a | goto label_38;
| }
0x0001248a mov r0, r8 | r0 = r8;
0x0001248c blx 0x35c4 | fcn_000035c4 ();
| label_11:
0x00012490 ldr.w r3, [pc, 0x684] |
0x00012494 str r0, [r7, 0x3c] | var_38h_2 = r0;
0x00012496 add r3, pc | r3 = 0x24fb2;
0x00012498 str r3, [r7, 0x20] | var_20h = r3;
0x0001249a ldr.w r3, [pc, 0x680] |
0x0001249e add r3, pc | r3 = 0x24fc0;
0x000124a0 str r3, [r7, 4] | var_4h_2 = r3;
0x000124a2 ldr.w r3, [pc, 0x67c] |
0x000124a4 adds r6, 0x7c | r6 += 0x7c;
0x000124a6 add r3, pc | r3 = 0x24fcc;
0x000124a8 str r3, [r7, 8] | var_8h_2 = r3;
0x000124aa movs r3, 0x20 | r3 = 0x20;
0x000124ac str r3, [r7, 0x14] | var_14h = r3;
0x000124ae add.w r3, r7, 0x48 | r3 += var_48h;
0x000124b2 str r3, [r7, 0x24] | var_24h = r3;
0x000124b4 add.w r3, r7, 0x44 | r3 += var_44h;
0x000124b8 str r3, [r7, 0x28] | var_28h = r3;
| do {
| label_6:
0x000124ba movs r1, 1 | r1 = 1;
0x000124bc ldr r2, [r7, 0x24] | r2 = var_24h;
0x000124be ldr r0, [r7, 0x28] | r0 = var_28h;
0x000124c0 bl 0x183bc | r0 = fcn_000183bc (r0, r1, r2);
0x000124c4 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 < r0) {
0x000124c6 blt.w 0x12974 | goto label_39;
| }
| if (r1 == r0) {
0x000124ca beq.w 0x1297e | goto label_40;
| }
0x000124ce ldr r0, [r7, 0x48] | r0 = var_48h;
0x000124d0 blx 0x3548 | r0 = openat64_2 ();
0x000124d4 mov r8, r0 | r8 = r0;
0x000124d6 cmp r0, 0 |
| if (r0 == 0) {
0x000124d8 beq.w 0x12a76 | goto label_41;
| }
0x000124dc ldr r1, [r7, 0x20] | r1 = var_20h;
0x000124de bl 0x18674 | r0 = fcn_00018674 (r0, r1, r2, r3);
0x000124e2 mov sb, r0 | sb = r0;
0x000124e4 cmp r0, 0 |
| if (r0 != 0) {
0x000124e6 bne.w 0x126ca | goto label_42;
| }
0x000124ea ldr r0, [r7, 0x3c] | r0 = var_38h_2;
0x000124ec bl 0x18b40 | r0 = fcn_00018b40 (r0);
0x000124f0 cmp r0, 0 |
| if (r0 == 0) {
0x000124f2 bne 0x1258a |
0x000124f4 ldr r0, [r7, 0x3c] | r0 = var_38h_2;
0x000124f6 bl 0x1834c | r0 = fcn_0001834c ();
0x000124fa mov sb, r0 | sb = r0;
0x000124fc cmp r0, 0 |
| if (r0 == 0) {
0x000124fe beq.w 0x12ab2 | goto label_43;
| }
0x00012502 ldrd sl, fp, [r7, 0x3c] | __asm ("ldrd sl, fp, [var_38h_2]");
0x00012506 cmp.w fp, 0 |
| if (fp != 0) {
0x0001250a beq 0x12524 |
0x0001250c movs r2, 1 | r2 = 1;
0x0001250e mov r1, fp | r1 = fp;
0x00012510 mov r0, sl | r0 = sl;
0x00012512 bl 0x18554 | r0 = fcn_00018554 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x00012516 cbz r0, 0x12524 | goto label_44;
| }
0x00012518 mov r1, fp | r1 = fp;
0x0001251a movs r2, 1 | r2 = 1;
0x0001251c mov r0, sb | r0 = sb;
0x0001251e bl 0x18554 | r0 = fcn_00018554 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x00012522 cbz r0, 0x1258a | goto label_45;
| }
| }
| label_44:
0x00012524 mov r0, sl | r0 = sl;
0x00012526 blx 0x3530 | ferror (r0);
0x00012528 invalid |
0x0001252c str.w sb, [r7, 0x3c] | __asm ("str.w sb, [var_38h_2]");
0x00012530 cmp r3, 0 |
| if (r3 != 0) {
0x00012532 bne.w 0x12abc | goto label_46;
| }
0x00012536 ldr.w r1, [pc, 0x5ec] |
0x0001253a mov.w r2, 0x288000 | r2 = 0x288000;
0x0001253e mov r0, r6 | r0 = r6;
0x00012540 add r1, pc | r1 = 0x2506a;
0x00012542 blx 0x37ec | r0 = fcn_000037ec ();
0x00012546 subs.w sb, r0, 0 | sb = r0 - 0;
| if (sb < r0) {
0x0001254a blt.w 0x12a58 | goto label_47;
| }
0x0001254e ldr r3, [r7, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00012550 cbz r3, 0x1257e |
0x00012552 add.w sl, r7, 0xb8 | sl += var_b8h;
0x00012556 mov r1, sl | r1 = sl;
0x00012558 blx 0x3a30 | r0 = fcn_00003a30 ();
0x0001255c cmp r0, 0 |
| if (r0 < 0) {
0x0001255e blt.w 0x12a58 | goto label_47;
| }
0x00012562 add.w fp, r7, 0x50 |
0x00012566 mov r1, sl | r1 = sl;
0x00012568 mov r0, fp | r0 = fp;
0x0001256a bl 0x12330 | r0 = fcn_00012330 (r0, r1);
0x0001256e cmp r0, 0 |
| if (r0 != 0) {
0x00012570 bne.w 0x12952 | goto label_48;
| }
0x00012572 strh r7, [r5, 0xe] | *((r5 + 0xe)) = r7;
0x00012574 mov r1, sl | r1 = sl;
0x00012576 mov r0, fp | r0 = fp;
0x00012578 movs r2, 0x68 | r2 = 0x68;
0x0001257a blx 0x3578 | mmap64 ()
| }
0x0001257e mov r0, r6 | r0 = r6;
0x00012580 mov r6, sb | r6 = sb;
0x00012582 mov.w sb, 0 | sb = 0;
0x00012584 lsrs r0, r0, 4 | r0 >>= 4;
0x00012586 bl 0x10570 | fcn_00010570 (r0);
| }
| label_45:
0x0001258a mov.w r0, -1 | r0 = -1;
0x0001258e bl 0x10570 | fcn_00010570 (r0);
0x00012592 mov r0, sb | r0 = sb;
0x00012594 mov.w sb, -1 | sb = -1;
0x00012598 blx 0x3530 | ferror (r0);
| label_5:
0x0001259c mov r0, sb | r0 = sb;
0x0001259e bl 0x10570 | fcn_00010570 (r0);
0x000125a2 mov r0, r8 | r0 = r8;
0x000125a4 blx 0x3530 | ferror (r0);
0x000125a8 b 0x124ba |
| } while (1);
| label_30:
0x000125aa ldr r3, [r7, 0x30] | r3 = var_30h;
0x000125ac orrs r3, r6 | r3 |= r6;
| if (r3 == r6) {
0x000125ae beq.w 0x12400 | goto label_1;
| }
0x000125b2 cmp r6, 0 |
| if (r6 == 0) {
0x000125b4 beq.w 0x12418 | goto label_2;
| }
0x000125b8 add.w r1, r7, 0x40 | r1 += stream;
0x000125bc mov r0, r6 | r0 = r6;
0x000125be bl 0x1827c | fcn_0001827c (r0, r1, r2, r3);
0x000125c0 cdp2 p14, 5, c1, c13, c1, 0 | __asm ("cdp2 p14, 5, c1, c13, c1, 0");
| if (r6 < 0) {
0x000125c4 blt 0x1265c | goto label_32;
| }
0x000125c6 ldr.w r1, [pc, 0x560] |
0x000125ca ldr r0, [r7, 0x40] | r0 = stream;
0x000125cc add r1, pc | r1 = 0x250fa;
0x000125ce bl 0x19e5c | fcn_00019e5c (r0, r1);
0x000125d2 ldr r0, [r7, 0x40] | r0 = stream;
0x000125d4 bl 0x1847c | fcn_0001847c (r0, r1, r2);
0x000125d6 vabd.u16 q8, q9, q12 | __asm ("vabd.u16 q8, q9, q12");
| if (r6 >= 0) {
0x000125da bpl.w 0x12418 | goto label_2;
| }
0x000125de ldrb r3, [r4] | r3 = *(r4);
0x000125e0 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x000125e2 bne.w 0x12392 | goto label_0;
| }
0x000125e6 ldr r6, [r7, 0x40] | r6 = stream;
0x000125e8 mov r3, r4 | r3 = r4;
| do {
0x000125ea mov r4, r3 | r4 = r3;
0x000125ec adds r3, 1 | r3++;
0x000125ee ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000125f0 cmp r2, 0x2f |
0x000125f2 beq 0x125ea |
| } while (r2 == 0x2f);
0x000125f4 cmp r6, 0 |
| if (r6 == 0) {
0x000125f6 beq.w 0x12418 | goto label_2;
| }
0x000125fa ldrb r3, [r6] | r3 = *(r6);
0x000125fc cmp r3, 0 |
| if (r3 == 0) {
0x000125fe beq.w 0x12418 | goto label_2;
| }
0x00012602 mov r0, r6 | r0 = r6;
0x00012604 blx 0x37c8 | r0 = fcn_000037c8 ();
0x00012608 mov sb, r0 | sb = r0;
0x0001260a mov r0, r4 | r0 = r4;
0x0001260c blx 0x37c8 | r0 = fcn_000037c8 ();
0x00012610 add.w r3, sb, r0 | r3 = sb + r0;
0x00012614 mov r8, r0 | r8 = r0;
0x00012616 adds r2, r3, 2 | r2 = r3 + 2;
0x00012618 cmp.w r2, 0x400000 |
| if (r2 > 0x400000) {
0x0001261c bhi.w 0x12a42 | goto label_49;
| }
0x00012620 adds r3, 9 | r3 += 9;
0x00012622 mov r1, r6 | r1 = r6;
0x00012624 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00012628 sub.w sp, sp, r3 |
0x0001262c add r6, sp, 0x10 | r6 += var_10h;
0x0001262e mov r0, r6 | r0 = r6;
0x00012630 blx 0x35b4 | r0 = strdup (r0);
0x00012634 cmp r0, r6 |
0x00012636 mov r3, r0 | r3 = r0;
| if (r0 > r6) {
0x00012638 bhi 0x12642 | goto label_50;
| }
0x0001263a b 0x1264e | goto label_15;
| do {
0x0001263c cmp r6, r3 |
| if (r6 == r3) {
0x0001263e beq.w 0x12970 | goto label_51;
| }
| label_50:
0x00012642 ldrb r2, [r3, -0x1] | r2 = *((r3 - 0x1));
0x00012646 mov r0, r3 | r0 = r3;
0x00012648 subs r3, 1 | r3--;
0x0001264a cmp r2, 0x2f |
0x0001264c beq 0x1263c |
| } while (r2 == 0x2f);
| label_15:
0x0001264e mov r1, r4 | r1 = r4;
0x00012650 add.w r2, r8, 1 | r2 = r8 + 1;
0x00012654 mov r4, r6 | r4 = r6;
0x00012656 blx 0x3578 | mmap64 ()
0x0001265a b 0x12418 | goto label_2;
| label_32:
0x0001265c mov.w r6, -1 | r6 = -1;
0x00012660 b 0x1239a | goto label_3;
| label_35:
0x00012662 add.w r1, r7, 0x50 | r1 += var_50h;
0x00012666 blx 0x3a30 | r0 = fcn_00003a30 ();
0x0001266a cmp r0, 0 |
| if (r0 >= 0) {
0x0001266c bge.w 0x12448 | goto label_4;
| }
| label_34:
0x00012670 blx 0x3828 | r0 = fcn_00003828 ();
0x00012674 ldr r1, [r0] | r1 = *(r0);
0x00012676 rsbs r1, r1, 0 | r1 -= ;
0x00012678 b 0x1239a | goto label_3;
| label_38:
0x0001267a tst.w r5, 0x80 |
0x0001267e ite ne |
| if ((r5 & 0x80) == 0) {
0x00012680 movne r5, 4 | r5 = 4;
| }
| if ((r5 & 0x80) != 0) {
0x00012682 moveq r5, 7 | r5 = 7;
| }
0x00012684 bl 0x15ca8 | r0 = fcn_00015ca8 ();
0x00012688 cmp r0, r5 |
0x0001268a it lt |
| if (r0 < r5) {
0x0001268c mvnlt r1, 0x2b | r1 = ~0x2b;
| goto label_52;
| }
| if (r0 < r5) {
| label_52:
0x00012690 blt.w 0x1239a | goto label_3;
| }
0x00012694 strd r4, r8, [sp, 8] | __asm ("strd r4, r8, [src]");
0x00012698 movs r1, 0x2c | r1 = 0x2c;
0x0001269a ldr.w r2, [pc, 0x490] |
0x0001269e movt r1, 0x4000 | r1 = (r1 & 0xFFFF) | 0x40000000;
0x000126a2 ldr.w ip, [pc, 0x48c] |
0x000126a6 mov r0, r5 | r0 = r5;
0x000126a8 ldr.w r4, [pc, 0x488] |
0x000126ac movw r3, 0x387 | r3 = 0x387;
0x000126b0 add r2, pc | r2 = 0x251e2;
0x000126b2 add ip, pc | ip = 0x251e8;
0x000126b4 adds r2, 7 | r2 += 7;
0x000126b6 add r4, pc | r4 = 0x251ee;
0x000126b8 strd r4, ip, [sp] | __asm ("strd r4, ip, [sp]");
0x000126bc bl 0x164ec | r0 = fcn_000164ec (r0, r1, r2);
0x000126c0 subs r1, r0, 0 | r1 = r0 - 0;
0x000126c2 it ge |
| if (r1 < r0) {
0x000126c4 mvnge r1, 0x55 | r1 = ~0x55;
| }
0x000126c8 b 0x1239a | goto label_3;
| label_42:
0x000126ca mov.w r2, 0x288000 | r2 = 0x288000;
0x000126ce mov r1, r8 | r1 = r8;
0x000126d0 mov r0, r6 | r0 = r6;
0x000126d2 blx 0x37ec | r0 = fcn_000037ec ();
0x000126d6 subs.w sb, r0, 0 | sb = r0 - 0;
| if (sb < r0) {
0x000126da blt.w 0x12a18 | goto label_53;
| }
0x000126de add.w sl, r7, 0xb8 | sl += var_b8h;
0x000126e2 mov r1, sl | r1 = sl;
0x000126e4 blx 0x3a30 | r0 = fcn_00003a30 ();
0x000126e8 cmp r0, 0 |
| if (r0 < 0) {
0x000126ea blt.w 0x12a38 | goto label_54;
| }
0x000126ee ldr r3, [r7, 0x18] | r3 = var_18h;
0x000126f0 add.w fp, r7, 0x50 |
0x000126f4 cmp r3, 0 |
| if (r3 != 0) {
0x000126f6 bne.w 0x12828 | goto label_55;
| }
| label_7:
0x000126fa mov r1, sl | r1 = sl;
0x000126fc movs r2, 0x68 | r2 = 0x68;
0x000126fe mov r0, fp | r0 = fp;
0x00012700 blx 0x3578 | mmap64 ()
0x00012702 invalid |
| if (r2 < 0x68) {
0x00012706 bmi.w 0x12846 | goto label_56;
| }
| label_9:
0x0001270a ldr.w r3, [r7, 0xc8] | r3 = var_c8h;
0x0001270e and r3, r3, 0xf000 | r3 &= 0xf000;
0x00012712 cmp.w r3, 0xa000 |
| if (r3 != 0xa000) {
0x00012716 bne 0x127be | goto label_57;
| }
0x00012718 lsls r3, r5, 0x19 | r3 = r5 << 0x19;
| if (r3 < r5) {
0x0001271a bpl 0x12728 |
0x0001271c ldr r3, [r7, 0x44] | r3 = var_44h;
0x0001271e cmp r3, 0 |
| if (r3 == 0) {
0x00012720 beq 0x127be | goto label_57;
| }
0x00012722 ldrb r3, [r3] | r3 = *(r3);
0x00012724 cmp r3, 0 |
| if (r3 == 0) {
0x00012726 beq 0x127be | goto label_57;
| }
| }
0x00012728 movs r3, 0 | r3 = 0;
0x0001272a str r3, [r7, 0x4c] | var_4ch = r3;
0x0001272c ldr r3, [r7, 0x14] | r3 = var_14h;
0x0001272e subs r3, 1 | r3--;
0x00012730 str r3, [r7, 0x14] | var_14h = r3;
| if (r3 == 1) {
0x00012732 beq.w 0x12ac8 | goto label_58;
| }
0x00012736 add.w r3, r7, 0x4c | r3 += var_4ch;
0x0001273a mov r1, r8 | r1 = r8;
0x0001273c mov r2, r3 | r2 = r3;
0x0001273e mov r0, r6 | r0 = r6;
0x00012740 str r3, [r7, 0x10] | var_10h_2 = r3;
0x00012742 bl 0x11e4c | r0 = fcn_00011e4c (r0);
0x00012746 subs r1, r0, 0 | r1 = r0 - 0;
0x00012748 ldr r3, [r7, 0x10] | r3 = var_10h_2;
0x0001274a ldr r0, [r7, 0x4c] | r0 = var_4ch;
| if (r1 < r0) {
0x0001274c blt 0x127ee | goto label_13;
| }
0x0001274e cmp r0, 0 |
| if (r0 == 0) {
0x00012750 beq 0x127ea | goto label_59;
| }
0x00012752 ldrb r2, [r0] | r2 = *(r0);
0x00012754 cmp r2, 0 |
| if (r2 == 0) {
0x00012756 beq 0x127ea | goto label_59;
| }
0x00012758 cmp r2, 0x2f |
| if (r2 == 0x2f) {
0x0001275a beq.w 0x128f0 | goto label_60;
| }
| label_12:
0x0001275e ldr r1, [r7, 0x44] | r1 = var_44h;
0x00012760 mov r0, r3 | r0 = r3;
0x00012762 mov.w r2, -1 | r2 = -1;
0x00012766 bl 0x1812c | r0 = fcn_0001812c (r0, r1);
0x0001276a cmp r0, 0 |
| if (r0 == 0) {
0x0001276c beq.w 0x12ad0 | goto label_61;
| }
0x00012770 ldr r0, [r7, 0x38] | r0 = var_38h;
0x00012772 blx 0x3530 | ferror (r0);
0x00012776 ldr r3, [r7, 0x4c] | r3 = var_4ch;
0x00012778 str r3, [r7, 0x38] | var_38h = r3;
0x0001277a str r3, [r7, 0x44] | var_44h = r3;
0x0001277c ldr r3, [r7, 0x2c] | r3 = var_2ch;
0x0001277e cmp r3, 0 |
| if (r3 == 0) {
0x00012780 beq.w 0x1259c | goto label_5;
| }
0x00012784 mov r0, sb | r0 = sb;
0x00012786 bl 0x10570 | fcn_00010570 (r0);
0x0001278a mov r0, r8 | r0 = r8;
0x0001278c blx 0x3530 | ferror (r0);
0x00012790 ldr r3, [r7, 0x30] | r3 = var_30h;
0x00012792 mov r1, r3 | r1 = r3;
0x00012794 cmp r3, 0 |
| if (r3 == 0) {
0x00012796 beq.w 0x1239a | goto label_3;
| }
0x0001279a movs r1, 1 | r1 = 1;
0x0001279c ldr r0, [r7, 0x28] | r0 = var_28h;
0x0001279e add.w r2, r7, 0xb8 | r2 += var_b8h;
0x000127a2 bl 0x183bc | r0 = fcn_000183bc (r0, r1, r2);
0x000127a6 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 < r0) {
0x000127a8 blt.w 0x1239a | goto label_3;
| }
0x000127ac ldr r0, [r7, 0x3c] | r0 = var_38h_2;
0x000127ae it eq |
| if (r1 != r0) {
0x000127b0 streq r1, [r7, 0x3c] | var_38h_2 = r1;
| }
| if (r1 != r0) {
0x000127b2 bne.w 0x129fc | goto label_62;
| }
| label_19:
0x000127b6 ldr r3, [r7, 0x30] | r3 = var_30h;
0x000127b8 movs r1, 0 | r1 = 0;
0x000127ba str r0, [r3] | *(r3) = r0;
0x000127bc b 0x1239a | goto label_3;
| label_57:
0x000127be mov.w r2, -1 | r2 = -1;
0x000127c2 mov r1, r8 | r1 = r8;
0x000127c4 add.w r0, r7, 0x3c | r0 += var_38h_2;
0x000127c8 bl 0x1812c | r0 = fcn_0001812c (r0, r1);
0x000127cc cmp r0, 0 |
| if (r0 == 0) {
0x000127ce beq.w 0x12aac | goto label_63;
| }
0x000127d2 mov r0, r6 | r0 = r6;
0x000127d4 mov r6, sb | r6 = sb;
0x000127d6 bl 0x10570 | fcn_00010570 (r0);
0x000127da mov.w r0, -1 | r0 = -1;
0x000127de bl 0x10570 | fcn_00010570 (r0);
0x000127e2 mov r0, r8 | r0 = r8;
0x000127e4 blx 0x3530 | ferror (r0);
0x000127e8 b 0x124ba | goto label_6;
| label_59:
0x000127ea mvn r1, 0x15 | r1 = ~0x15;
| label_13:
0x000127ee str r1, [r7, 0x34] | var_34h = r1;
0x000127f0 blx 0x3530 | ferror (r0);
0x000127f4 ldr r1, [r7, 0x34] | r1 = var_34h;
| label_8:
0x000127f6 mov r0, sb | r0 = sb;
0x000127f8 str r1, [r7, 0x34] | var_34h = r1;
0x000127fa bl 0x10570 | fcn_00010570 (r0);
0x000127fe mov r0, r8 | r0 = r8;
0x00012800 blx 0x3530 | ferror (r0);
0x00012804 ldr r1, [r7, 0x34] | r1 = var_34h;
0x00012806 b 0x1239a | goto label_3;
| label_31:
0x00012808 lsls r1, r5, 9 | r1 = r5 << 9;
0x0001280a mov r0, r4 | r0 = r4;
0x0001280c and r1, r1, 0x8000 | r1 &= 0x8000;
0x00012810 orr r1, r1, 0x280000 | r1 |= 0x280000;
0x00012814 blx 0x3810 | r0 = fcn_00003810 ();
0x00012818 cmp r0, 0 |
| if (r0 < 0) {
0x0001281a blt 0x128d4 | goto label_64;
| }
0x0001281c ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001281e mov.w r6, -1 | r6 = -1;
0x00012822 movs r1, 0 | r1 = 0;
0x00012824 str r0, [r3] | *(r3) = r0;
0x00012826 b 0x1239a | goto label_3;
| label_55:
0x00012828 mov r1, sl | r1 = sl;
0x0001282a mov r0, fp | r0 = fp;
0x0001282c bl 0x12330 | r0 = fcn_00012330 (r0, r1);
0x00012830 cmp r0, 0 |
| if (r0 == 0) {
0x00012832 beq.w 0x126fa | goto label_7;
| }
0x00012836 mov r1, sb | r1 = sb;
0x00012838 mov r3, r5 | r3 = r5;
0x0001283a mov r2, r4 | r2 = r4;
0x0001283c mov r0, r6 | r0 = r6;
0x0001283e bl 0x11ce0 | r0 = fcn_00011ce0 (r0, r1, r2, r3);
0x00012842 mov r1, r0 | r1 = r0;
0x00012844 b 0x127f6 | goto label_8;
| label_56:
0x00012846 movw r1, 0x187 | r1 = 0x187;
0x0001284a mov r0, sb | r0 = sb;
0x0001284c bl 0x19ca4 | r0 = fcn_00019ca4 (r0);
0x00012850 cmp r0, 0 |
| if (r0 <= 0) {
0x00012852 ble.w 0x1270a | goto label_9;
| }
0x00012856 lsls r2, r5, 0x18 | r2 = r5 << 0x18;
0x00012858 mov.w r3, 0 | r3 = 0;
0x0001285c str r3, [r7, 0x4c] | var_4ch = r3;
| if (r2 >= r5) {
0x0001285e bpl.w 0x12b00 | goto label_65;
| }
0x00012862 add.w r1, r7, 0x4c | r1 += var_4ch;
0x00012866 mov r0, sb | r0 = sb;
0x00012868 bl 0x10654 | r0 = fcn_00010654 (r0, r1);
0x0001286c bl 0x15ca8 | r0 = fcn_00015ca8 ();
0x00012870 cmp r0, 3 |
| if (r0 <= 3) {
0x00012872 ble.w 0x12b00 | goto label_65;
| }
0x00012876 ldr r1, [r7, 0x4c] | r1 = var_4ch;
0x00012878 cmp r1, 0 |
| if (r1 == 0) {
0x0001287a beq.w 0x12ae4 | goto label_66;
| }
| label_24:
0x0001287e ldr r2, [pc, 0x2b8] |
0x00012880 ldr r3, [pc, 0x2b8] |
0x00012882 ldr r0, [pc, 0x2bc] |
0x00012884 str r1, [sp, 8] | src = r1;
0x00012886 add r2, pc | r2 = 0x253c4;
0x00012888 add r3, pc | r3 = 0x253c8;
0x0001288a movs r1, 0x42 | r1 = 0x42;
0x0001288c add r0, pc | r0 = 0x253d2;
0x0001288e movt r1, 0x4000 | r1 = (r1 & 0xFFFF) | 0x40000000;
0x00012892 str r3, [sp, 4] | var_4h = r3;
0x00012894 adds r2, 7 | r2 += 7;
0x00012896 str r0, [sp] | *(sp) = r0;
0x00012898 mov.w r3, 0x304 | r3 = 0x304;
0x0001289c movs r0, 4 | r0 = 4;
0x0001289e str r4, [sp, 0xc] | var_ch = r4;
0x000128a0 bl 0x164ec | r0 = fcn_000164ec (r0, r1, r2);
0x000128a4 subs r1, r0, 0 | r1 = r0 - 0;
0x000128a6 it ge |
| if (r1 < r0) {
0x000128a8 mvnge r1, 0x55 | r1 = ~0x55;
| }
| label_25:
0x000128ac ldr r0, [r7, 0x4c] | r0 = var_4ch;
0x000128ae str r1, [r7, 0x34] | var_34h = r1;
0x000128b0 blx 0x3530 | ferror (r0);
0x000128b4 ldr r1, [r7, 0x34] | r1 = var_34h;
0x000128b6 b 0x127f6 | goto label_8;
| label_33:
0x000128b8 ldr r0, [pc, 0x288] |
0x000128ba add r0, pc | r0 = 0x25402;
0x000128bc b 0x12430 | goto label_10;
| label_26:
0x000128be ldr r1, [pc, 0x288] |
0x000128c0 movw r2, 0x312 | r2 = 0x312;
0x000128c4 ldr r3, [pc, 0x284] |
0x000128c6 ldr r0, [pc, 0x288] |
0x000128c8 add r1, pc | r1 = 0x25416;
0x000128ca add r3, pc | r3 = 0x2541a;
0x000128cc adds r1, 7 | r1 += 7;
0x000128ce add r0, pc | r0 = 0x25424;
0x000128d0 bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
| label_64:
0x000128d4 blx 0x3828 | r0 = fcn_00003828 ();
0x000128d8 ldr r1, [r0] | r1 = *(r0);
0x000128da mov.w r6, -1 | r6 = -1;
0x000128de rsbs r1, r1, 0 | r1 -= ;
0x000128e0 b 0x1239a | goto label_3;
| label_37:
0x000128e2 ldr r0, [pc, 0x270] |
0x000128e4 str.w sb, [r7, 0x44] | __asm ("str.w sb, [var_44h]");
0x000128e8 add r0, pc | r0 = 0x25442;
0x000128ea blx 0x35c4 | fcn_000035c4 ();
0x000128ee b 0x12490 | goto label_11;
| label_60:
0x000128f0 mov r0, r6 | r0 = r6;
0x000128f2 str r3, [r7, 0x10] | var_10h_2 = r3;
0x000128f4 bl 0x10570 | fcn_00010570 (r0);
0x000128f6 mrc2 p12, 1, r6, c12, c8, 1 | __asm ("mrc2 p12, 1, r6, c12, c8, 1");
0x000128fa ldr r3, [r7, 0x10] | r3 = var_10h_2;
0x000128fc cmp r0, 0 |
| if (r0 == 0) {
0x000128fe beq 0x129f2 | goto label_67;
| }
| label_17:
0x00012900 mov.w r1, 0x284000 | r1 = 0x284000;
0x00012904 str r3, [r7, 0x10] | var_10h_2 = r3;
0x00012906 blx 0x36ec | r0 = asprintf_chk ();
0x0001290a subs r6, r0, 0 | r6 = r0 - 0;
0x0001290c ldr r3, [r7, 0x10] | r3 = var_10h_2;
| if (r6 < r0) {
0x0001290e blt.w 0x12ad8 | goto label_68;
| }
0x00012912 ldr r2, [r7, 0x18] | r2 = var_18h;
0x00012914 cmp r2, 0 |
| if (r2 != 0) {
0x00012916 bne 0x129c0 | goto label_69;
| }
| label_16:
0x00012918 ldr r1, [r7, 0x40] | r1 = stream;
0x0001291a cmp r1, 0 |
| if (r1 == 0) {
0x0001291c beq 0x129f8 | goto label_70;
| }
0x0001291e ldrb r2, [r1] | r2 = *(r1);
0x00012920 cmp r2, 0 |
0x00012922 ldr r2, [r7, 8] | r2 = var_8h_2;
0x00012924 it eq |
| if (r2 != 0) {
0x00012926 moveq r1, r2 | r1 = r2;
| }
| label_18:
0x00012928 add.w r0, r7, 0x3c | r0 += var_38h_2;
0x0001292c str r3, [r7, 0x10] | var_10h_2 = r3;
0x0001292e bl 0x1a050 | fcn_0001a050 (r0, r1);
0x00012932 subs r1, r0, 0 | r1 -= var_38h_2;
0x00012934 ldr r3, [r7, 0x10] | r3 = var_10h_2;
| if (r1 >= var_38h_2) {
0x00012936 bge.w 0x1275e | goto label_12;
| }
0x0001293a ldr r0, [r7, 0x4c] | r0 = var_4ch;
0x0001293c b 0x127ee | goto label_13;
| label_36:
0x0001293e ldr r1, [pc, 0x218] |
0x00012940 mov r0, sb | r0 = sb;
0x00012942 add r1, pc | r1 = 0x254a0;
0x00012944 bl 0x1af54 | r0 = fcn_0001af54 (r0, r1);
0x00012948 subs r3, r0, 0 | r3 = r0 - 0;
0x0001294a it ne |
| if (r3 == r0) {
0x0001294c movne r3, 1 | r3 = 1;
| }
0x0001294e str r3, [r7, 0xc] | var_ch_2 = r3;
0x00012950 b 0x1246c | goto label_14;
| label_48:
0x00012952 mov r1, sb | r1 = sb;
0x00012954 mov r3, r5 | r3 = r5;
0x00012956 mov r2, r4 | r2 = r4;
0x00012958 mov r0, r6 | r0 = r6;
0x0001295a bl 0x11ce0 | r0 = fcn_00011ce0 (r0, r1, r2, r3);
0x0001295e mov r1, r0 | r1 = r0;
| label_20:
0x00012960 mov r0, sb | r0 = sb;
0x00012962 str r1, [r7, 0x34] | var_34h = r1;
0x00012964 mov.w sb, -1 | sb = -1;
0x00012968 bl 0x10570 | fcn_00010570 (r0);
0x0001296c ldr r1, [r7, 0x34] | r1 = var_34h;
0x0001296e b 0x127f6 | goto label_8;
| label_51:
0x00012970 mov r0, r6 | r0 = r6;
0x00012972 b 0x1264e | goto label_15;
| label_39:
0x00012974 mov.w sb, -1 | sb = -1;
0x00012978 mov.w r8, 0 | r8 = 0;
0x0001297c b 0x127f6 | goto label_8;
| label_40:
0x0001297e ldr r3, [r7, 0xc] | r3 = var_ch_2;
0x00012980 cmp r3, 0 |
| if (r3 != 0) {
0x00012982 bne 0x12a62 | goto label_71;
| }
| label_21:
0x00012984 mov.w sb, -1 | sb = -1;
0x00012988 mov.w r8, 0 | r8 = 0;
0x0001298c movs r4, 1 | r4 = 1;
| label_23:
0x0001298e mov r0, sb | r0 = sb;
0x00012990 bl 0x10570 | fcn_00010570 (r0);
0x00012994 mov r0, r8 | r0 = r8;
0x00012996 blx 0x3530 | ferror (r0);
0x0001299a ldr r3, [r7, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x0001299c cbz r3, 0x129a8 |
0x0001299e ldr r3, [r7, 0x3c] | r3 = var_38h_2;
0x000129a0 ldr r2, [r7, 0x30] | r2 = var_30h;
0x000129a2 str r3, [r2] | *(r2) = r3;
0x000129a4 movs r3, 0 | r3 = 0;
0x000129a6 str r3, [r7, 0x3c] | var_38h_2 = r3;
| }
0x000129a8 ldr r3, [r7, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x000129aa cbz r3, 0x129b4 |
0x000129ac ldr r3, [r7, 0x34] | r3 = var_34h;
0x000129ae str r6, [r3] | *(r3) = r6;
0x000129b0 mov.w r6, -1 | r6 = -1;
| }
0x000129b4 ldr r3, [r7, 0x2c] | r3 = var_2ch;
0x000129b6 cmp r3, 0 |
0x000129b8 ite eq |
| if (r3 != 0) {
0x000129ba moveq r1, r4 | r1 = r4;
| }
| if (r3 == 0) {
0x000129bc movne r1, 1 | r1 = 1;
| }
0x000129be b 0x1239a | goto label_3;
| label_69:
0x000129c0 mov r1, sl | r1 = sl;
0x000129c2 str r3, [r7, 0x10] | var_10h_2 = r3;
0x000129c4 blx 0x3a30 | r0 = fcn_00003a30 ();
0x000129c8 cmp r0, 0 |
0x000129ca ldr r3, [r7, 0x10] | r3 = var_10h_2;
| if (r0 < 0) {
0x000129cc blt.w 0x12ad8 | goto label_68;
| }
0x000129d0 mov r1, sl | r1 = sl;
0x000129d2 mov r0, fp | r0 = fp;
0x000129d4 str r3, [r7, 0x10] | var_10h_2 = r3;
0x000129d6 bl 0x12330 | fcn_00012330 (r0, r1);
0x000129da ldr r3, [r7, 0x10] | r3 = var_10h_2;
0x000129dc cmp r0, 0 |
| if (r0 != 0) {
0x000129de bne.w 0x12aee | goto label_72;
| }
0x000129e2 mov r1, sl | r1 = sl;
0x000129e4 mov r0, fp | r0 = fp;
0x000129e6 movs r2, 0x68 | r2 = 0x68;
0x000129e8 str r3, [r7, 0x10] | var_10h_2 = r3;
0x000129ea blx 0x3578 | mmap64 ()
0x000129ee ldr r3, [r7, 0x10] | r3 = var_10h_2;
0x000129f0 b 0x12918 | goto label_16;
| label_67:
0x000129f2 ldr r0, [pc, 0x168] |
0x000129f4 add r0, pc | r0 = 0x25556;
0x000129f6 b 0x12900 | goto label_17;
| label_70:
0x000129f8 ldr r1, [r7, 4] | r1 = var_4h_2;
0x000129fa b 0x12928 | goto label_18;
| label_62:
0x000129fc mov r1, r0 | r1 = r0;
0x000129fe ldr.w r2, [r7, 0xb8] | r2 = var_b8h;
0x00012a02 mov.w r3, -1 | r3 = -1;
0x00012a06 movs r0, 0 | r0 = 0;
0x00012a08 bl 0x1812c | fcn_0001812c (r0, r1);
0x00012a0c mvn r1, 0xb | r1 = ~0xb;
0x00012a10 cmp r0, 0 |
| if (r0 != 0) {
0x00012a12 bne.w 0x127b6 | goto label_19;
| }
0x00012a16 b 0x1239a | goto label_3;
| label_53:
0x00012a18 blx 0x3828 | r0 = fcn_00003828 ();
0x00012a1c ldr r4, [r0] | r4 = *(r0);
0x00012a1e ldr r2, [r7, 0x1c] | r2 = var_1ch;
0x00012a20 sub.w r3, r4, 2 | r3 = r4 - 2;
0x00012a24 clz r3, r3 | r3 &= r3;
0x00012a28 cmp r2, 0 |
0x00012a2a lsr.w r3, r3, 5 | r3 >>= 5;
0x00012a2e it eq |
| if (r2 != 0) {
0x00012a30 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x00012a32 cbnz r3, 0x12a80 | goto label_73;
| }
| label_22:
0x00012a34 rsbs r1, r4, 0 | r1 = r4 - ;
0x00012a36 b 0x127f6 | goto label_8;
| label_54:
0x00012a38 blx 0x3828 | r0 = fcn_00003828 ();
0x00012a3c ldr r1, [r0] | r1 = *(r0);
0x00012a3e rsbs r1, r1, 0 | r1 -= ;
0x00012a40 b 0x127f6 | goto label_8;
| label_49:
0x00012a42 ldr r1, [pc, 0x11c] |
0x00012a44 movw r2, 0x36f | r2 = 0x36f;
0x00012a48 ldr r3, [pc, 0x118] |
0x00012a4a ldr r0, [pc, 0x11c] |
0x00012a4c add r1, pc | r1 = 0x255b2;
0x00012a4e add r3, pc | r3 = 0x255b6;
0x00012a50 adds r1, 7 | r1 += 7;
0x00012a52 add r0, pc | r0 = 0x255c0;
0x00012a54 bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
| label_47:
0x00012a58 blx 0x3828 | r0 = fcn_00003828 ();
0x00012a5c ldr r1, [r0] | r1 = *(r0);
0x00012a5e rsbs r1, r1, 0 | r1 -= ;
0x00012a60 b 0x12960 | goto label_20;
| label_71:
0x00012a62 ldr r2, [pc, 0x108] |
0x00012a64 mov r3, r1 | r3 = r1;
0x00012a66 add.w r0, r7, 0x3c | r0 += var_38h_2;
0x00012a6a add r2, pc | r2 = 0x255dc;
0x00012a6c bl 0x19ed8 | r0 = fcn_00019ed8 (r0);
0x00012a70 mov r8, r0 | r8 = r0;
0x00012a72 cmp r0, 0 |
| if (r0 != 0) {
0x00012a74 bne 0x12984 | goto label_21;
| }
| label_41:
0x00012a76 mov.w sb, -1 | sb = -1;
0x00012a7a mvn r1, 0xb | r1 = ~0xb;
0x00012a7e b 0x127f6 | goto label_8;
| label_73:
0x00012a80 ldr r5, [r7, 0x44] | r5 = var_44h;
| if (r5 == 0) {
0x00012a82 cbz r5, 0x12a94 | goto label_74;
| }
0x00012a84 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00012a86 cbz r3, 0x12a94 | goto label_74;
| }
0x00012a88 movs r1, 0 | r1 = 0;
0x00012a8a mov r0, r5 | r0 = r5;
0x00012a8c bl 0x188b4 | fcn_000188b4 (r0, r1, r2, r3);
0x00012a8e vsub.i16 d2, d2, d0 | __asm ("vsub.i16 d2, d2, d0");
| if (r1 == 0) {
0x00012a92 beq 0x12a34 | goto label_22;
| }
| label_74:
0x00012a94 mov r2, r5 | r2 = r5;
0x00012a96 mov.w r3, -1 | r3 = -1;
0x00012a9a mov r1, r8 | r1 = r8;
0x00012a9c add.w r0, r7, 0x3c | r0 += var_38h_2;
0x00012aa0 movs r4, 0 | r4 = 0;
0x00012aa2 bl 0x1812c | r0 = fcn_0001812c (r0, r1);
0x00012aa6 cmp r0, 0 |
| if (r0 != 0) {
0x00012aa8 bne.w 0x1298e | goto label_23;
| }
| label_63:
0x00012aac mvn r1, 0xb | r1 = ~0xb;
0x00012ab0 b 0x127f6 | goto label_8;
| label_43:
0x00012ab2 mov.w sb, -1 | sb = -1;
0x00012ab6 mvn r1, 0xb | r1 = ~0xb;
0x00012ab8 lsls r3, r1, 4 | r3 = r1 << 4;
0x00012aba b 0x12960 | goto label_20;
| label_46:
0x00012abc mov.w r0, -1 | r0 = -1;
0x00012ac0 mov sb, r0 | sb = r0;
0x00012ac2 bl 0x10570 | fcn_00010570 (r0);
0x00012ac4 ldc2l p6, c14, [r5, -0x174] | __asm ("ldc2l p6, c14, [r5, -0x174]");
| label_58:
0x00012ac8 ldr r0, [r7, 0x14] | r0 = var_14h;
0x00012aca mvn r1, 0x27 | r1 = ~0x27;
0x00012ace b 0x127ee | goto label_13;
| label_61:
0x00012ad0 ldr r0, [r7, 0x4c] | r0 = var_4ch;
0x00012ad2 mvn r1, 0xb | r1 = ~0xb;
0x00012ad6 b 0x127ee | goto label_13;
| label_68:
0x00012ad8 blx 0x3828 | r0 = fcn_00003828 ();
0x00012adc ldr r1, [r0] | r1 = *(r0);
0x00012ade ldr r0, [r7, 0x4c] | r0 = var_4ch;
0x00012ae0 rsbs r1, r1, 0 | r1 -= ;
0x00012ae2 b 0x127ee | goto label_13;
| label_66:
0x00012ae4 ldr r1, [pc, 0x88] |
0x00012ae6 add r1, pc | r1 = 0x2565a;
0x00012ae8 b 0x1287e | goto label_24;
| label_29:
0x00012aea blx 0x35d0 | fcn_000035d0 ();
| label_72:
0x00012aee mov r1, r6 | r1 = r6;
0x00012af0 mov r3, r5 | r3 = r5;
0x00012af2 mov r2, r4 | r2 = r4;
0x00012af4 mov r0, sb | r0 = sb;
0x00012af6 bl 0x11ce0 | r0 = fcn_00011ce0 (r0, r1, r2, r3);
0x00012afa mov r1, r0 | r1 = r0;
0x00012afc ldr r0, [r7, 0x4c] | r0 = var_4ch;
0x00012afe b 0x127ee | goto label_13;
| label_65:
0x00012b00 mvn r1, 0x41 | r1 = ~0x41;
0x00012b04 b 0x128ac | goto label_25;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libudev.so.1.7.2 @ 0x132a0 */
| #include <stdint.h>
|
; (fcn) fcn.000132a0 () | void fcn_000132a0 (int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000132a0 cmp r2, r3 |
0x000132a2 push.w {r4, r5, r6, r7, r8, lr} |
| if (r2 == r3) {
0x000132a6 beq 0x1338e | goto label_5;
| }
0x000132a8 mov r7, r1 | r7 = r1;
0x000132aa adds r1, r2, 5 | r1 = r2 + 5;
0x000132ac mov r4, r2 | r4 = r2;
0x000132ae mov r5, r3 | r5 = r3;
0x000132b0 mov r6, r0 | r6 = r0;
| if (r1 < r2) {
0x000132b2 bls 0x132fc | goto label_6;
| }
0x000132b4 adds r3, r2, 3 | r3 = r2 + 3;
| if (r3 > r2) {
0x000132b6 bhi.w 0x133e0 | goto label_7;
| }
0x000132ba adds r0, r5, 5 | r0 = r5 + 5;
0x000132bc add.w r1, r2, 4 | r1 = r2 + 4;
0x000132c0 add.w r1, r7, r1, lsl 4 | r1 = r7 + (r1 << 4);
| if (r0 < r5) {
0x000132c4 bls 0x1331e | goto label_8;
| }
| do {
0x000132c6 adds r3, r5, 3 | r3 = r5 + 3;
| if (r3 > r5) {
0x000132c8 bhi.w 0x133e0 | goto label_7;
| }
0x000132cc ldr r3, [pc, 0x128] |
0x000132ce add.w r8, r5, 4 | r8 = r5 + 4;
0x000132d2 ldrb.w r2, [r6, 0x27] | r2 = *((r6 + 0x27));
0x000132d6 add.w r8, r7, r8, lsl 4 | r8 = r7 + (r8 << 4);
0x000132da add r3, pc | r3 = 0x266d6;
0x000132dc and r2, r2, 3 | r2 &= 3;
0x000132e0 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x000132e4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
| label_0:
0x000132e6 mov r0, r8 | r0 = r8;
0x000132e8 blx 0x3578 | mmap64 ()
0x000132ec ldrb.w r3, [r6, 0x27] | r3 = *((r6 + 0x27));
0x000132f0 and r2, r3, 3 | r2 = r3 & 3;
0x000132f4 cmp r2, 1 |
| if (r2 == 1) {
0x000132f6 beq 0x1333e | goto label_9;
| }
0x000132f8 pop.w {r4, r5, r6, r7, r8, pc} |
| label_6:
0x000132fc ldrb.w r3, [r0, 0x27] | r3 = *((r0 + 0x27));
0x00013300 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00013302 ldr r2, [pc, 0xf8] |
0x00013304 and r3, r3, 3 | r3 &= 3;
0x00013308 ite mi |
| if (r2 >= r3) {
0x0001330a ldrmi r1, [r0, 4] | r1 = *((r0 + 4));
| }
| if (r2 < r3) {
0x0001330c addpl r1, r0, 4 | r1 = r0 + 4;
| }
0x0001330e adds r0, r5, 5 | r0 = r5 + 5;
0x00013310 add r2, pc | r2 = 0x26712;
0x00013312 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x00013314 asrs r3, r0, 0xc | r3 = r0 >> 0xc;
0x00013316 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00013318 mla r1, r3, r4, r1 | __asm ("mla r1, r3, r4, r1");
0x0001331c bhi 0x132c6 |
| } while (r0 > r5);
| label_8:
0x0001331e ldrb.w r3, [r6, 0x27] | r3 = *((r6 + 0x27));
0x00013322 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00013324 ldr r2, [pc, 0xd8] |
0x00013326 and r3, r3, 3 | r3 &= 3;
0x0001332a ite mi |
| if (r2 >= r3) {
0x0001332c ldrmi r0, [r6, 4] | r0 = *((r6 + 4));
| }
| if (r2 < r3) {
0x0001332e addpl r0, r6, 4 | r0 = r6 + 4;
| }
0x00013330 add r2, pc | r2 = 0x26734;
0x00013332 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x00013336 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00013338 mla r8, r2, r5, r0 | __asm ("mla r8, r2, r5, r0");
0x0001333c b 0x132e6 | goto label_0;
| label_9:
0x0001333e ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x00013342 adds r0, r2, 1 | r0 = r2 + 1;
| if (r0 != r2) {
0x00013344 bne 0x13374 | goto label_10;
| }
0x00013346 ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x0001334a adds r3, r2, 1 | r3 = r2 + 1;
0x0001334c bne 0x13362 |
| while (1) {
| label_1:
0x0001334e ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00013350 cmp r3, r4 |
0x00013352 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x00013354 it eq |
| if (r3 != r4) {
0x00013356 streq r5, [r6, 0x2c] | *((r6 + 0x2c)) = r5;
| }
0x00013358 cmp r3, r4 |
0x0001335a it eq |
| if (r3 != r4) {
0x0001335c streq r5, [r6, 0x30] | *((r6 + 0x30)) = r5;
| }
0x0001335e pop.w {r4, r5, r6, r7, r8, pc} |
| label_2:
0x00013362 adds r0, r2, 5 | r0 = r2 + 5;
| if (r0 < r2) {
0x00013364 bls 0x133a4 | goto label_11;
| }
0x00013366 adds r3, r2, 2 | r3 = r2 + 2;
| if (r3 == r2) {
0x00013368 beq 0x133e0 | goto label_7;
| }
0x0001336a adds r2, 4 | r2 += 4;
0x0001336c add.w r7, r7, r2, lsl 4 | r7 += (r2 << 4);
| label_3:
0x00013370 str r5, [r7, 8] | *((r7 + 8)) = r5;
0x00013372 b 0x1334e |
| }
| label_10:
0x00013374 adds r1, r2, 5 | r1 = r2 + 5;
| if (r1 < r2) {
0x00013376 bls 0x133c4 | goto label_12;
| }
0x00013378 adds r1, r2, 2 | r1 = r2 + 2;
| if (r1 == r2) {
0x0001337a beq 0x133e0 | goto label_7;
| }
0x0001337c adds r2, 4 | r2 += 4;
0x0001337e add.w r2, r7, r2, lsl 4 | r2 = r7 + (r2 << 4);
| label_4:
0x00013382 str r5, [r2, 0xc] | *((r2 + 0xc)) = r5;
0x00013384 ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x00013388 adds r3, r2, 1 | r3 = r2 + 1;
| if (r3 == r2) {
0x0001338a beq 0x1334e | goto label_1;
| }
0x0001338c b 0x13362 | goto label_2;
| label_5:
0x0001338e ldr r1, [pc, 0x74] |
0x00013390 movw r2, 0x1d1 | r2 = 0x1d1;
0x00013394 ldr r3, [pc, 0x70] |
0x00013396 ldr r0, [pc, 0x74] |
0x00013398 add r1, pc | r1 = 0x267a2;
0x0001339a add r3, pc | r3 = 0x267a6;
0x0001339c adds r1, 7 | r1 += 7;
0x0001339e add r0, pc | r0 = 0x267b0;
0x000133a0 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_11:
0x000133a4 ldrb.w r3, [r6, 0x27] | r3 = *((r6 + 0x27));
0x000133a8 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
0x000133aa ldr r1, [pc, 0x64] |
0x000133ac and r3, r3, 3 | r3 &= 3;
0x000133b0 ite mi |
| if (r1 >= r3) {
0x000133b2 ldrmi r7, [r6, 4] | r7 = *((r6 + 4));
| }
| if (r1 < r3) {
0x000133b4 addpl r7, r6, 4 | r7 = r6 + 4;
| }
0x000133b6 add r1, pc | r1 = 0x267cc;
0x000133b8 add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x000133bc ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000133be mla r7, r3, r2, r7 | __asm ("mla r7, r3, r2, r7");
0x000133c2 b 0x13370 | goto label_3;
| label_12:
0x000133c4 ldr r1, [pc, 0x4c] |
0x000133c6 lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
0x000133c8 and r3, r3, 3 | r3 &= 3;
0x000133cc ite mi |
| if (r0 >= r3) {
0x000133ce ldrmi r0, [r6, 4] | r0 = *((r6 + 4));
| }
| if (r0 < r3) {
0x000133d0 addpl r0, r6, 4 | r0 = r6 + 4;
| }
0x000133d2 add r1, pc | r1 = 0x267ea;
0x000133d4 add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x000133d6 asrs r3, r0, 0xc | r3 = r0 >> 0xc;
| do {
0x000133d8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000133da mla r2, r3, r2, r0 | __asm ("mla r2, r3, r2, r0");
0x000133de b 0x13382 | goto label_4;
| label_7:
0x000133e0 ldr r1, [pc, 0x34] |
0x000133e2 mov.w r2, 0x194 | r2 = 0x194;
0x000133e6 ldr r3, [pc, 0x34] |
0x000133e8 ldr r0, [pc, 0x34] |
0x000133ea add r1, pc | r1 = 0x26806;
0x000133ec add r3, pc | r3 = 0x2680e;
0x000133ee adds r1, 7 | r1 += 7;
0x000133f0 add r0, pc | r0 = 0x26814;
0x000133f2 bl 0x16608 | fcn_00016608 (r0, r1, r2, r3);
0x000133f6 nop |
0x000133f8 b 0x133d8 |
| } 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/libudev.so.1.7.2 @ 0x135e0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000135e0 () | void fcn_000135e0 (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x000135e0 ldr r2, [pc, 0x350] |
0x000135e2 ldr r3, [pc, 0x354] | r3 = *(0x1393a);
0x000135e4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000135e6 ldr r7, [pc, 0x3c0] | r7 = *(0x139aa);
0x000135e8 sub sp, 0x34 |
0x000135ea add r2, pc | r2 = 0x26f22;
0x000135ec ldr r3, [r2, r3] |
0x000135ee ldr r3, [r3] | r3 = *(0x26f22);
0x000135f0 str r3, [sp, 0x2c] | var_2ch = r3;
0x000135f2 mov.w r3, 0 | r3 = 0;
0x000135f6 cmp r0, 0 |
| if (r0 == 0) {
0x000135f8 beq.w 0x1375a | goto label_10;
| }
0x000135fc ldrb.w r3, [r0, 0x27] | r3 = *((r0 + 0x27));
0x00013600 mov r4, r0 | r4 = r0;
0x00013602 ands r0, r3, 4 | r0 = r3 & 4;
0x00013606 and r5, r3, 3 | r5 = r3 & 3;
0x0001360a ite ne |
| if (r0 == r3) {
0x0001360c ldrne r2, [r4, 0x18] | r2 = *((r4 + 0x18));
| }
| if (r0 == r3) {
0x0001360e ubfxeq r2, r3, 3, 3 | __asm ("ubfxeq r2, r3, 3, 3");
| }
0x00013612 adds r1, r1, r2 | r1 += r2;
| if (r1 >= r1) {
0x00013614 bhs.w 0x13754 | goto label_11;
| }
0x00013618 ubfx r3, r3, 2, 1 | r3 = (r3 >> 2) & ((1 << 1) - 1);
0x0001361c cbz r3, 0x1366a |
| while (r2 <= r1) {
0x0001361e lsrs r3, r1, 2 | r3 = r1 >> 2;
0x00013620 adds r3, r3, r1 | r3 += r1;
| if (r3 >= r3) {
0x00013622 bhs.w 0x13754 | goto label_11;
| }
0x00013624 strh r7, [r2, 4] | *((r2 + 4)) = r7;
0x00013626 ldr r2, [pc, 0x314] |
0x00013628 add r2, pc | r2 = 0x26f6a;
0x0001362a add.w r2, r2, r5, lsl 4 | r2 += (r5 << 4);
0x0001362e ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x00013630 add.w sb, r6, 1 | sb = r6 + 1;
0x00013634 umull r5, r1, sb, r3 | r5:r1 = sb * r3;
0x00013638 subs r5, r1, 0 | r5 = r1 - 0;
0x0001363a it ne |
| if (r5 == r1) {
0x0001363c movne r5, 1 | r5 = 1;
| }
0x0001363e cmp r1, 0 |
| if (r1 != 0) {
0x00013640 bne.w 0x13754 | goto label_11;
| }
| if (r0 != 0) {
0x00013644 cbnz r0, 0x1367c | goto label_12;
| }
0x00013646 ldr r7, [r2, 0xc] | r7 = *((r2 + 0xc));
0x00013648 cmp r3, r7 |
| if (r3 > r7) {
0x0001364a bhi.w 0x13770 | goto label_13;
| }
| label_0:
0x0001364e ldr r2, [pc, 0x2f0] |
0x00013650 ldr r3, [pc, 0x2e4] | r3 = *(0x13938);
0x00013652 add r2, pc | r2 = 0x26f98;
0x00013654 ldr r3, [r2, r3] | r3 = *(0x26f98);
0x00013656 ldr r2, [r3] | r2 = *(0x26f98);
0x00013658 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0001365a eors r2, r3 | r2 ^= r3;
0x0001365c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00013660 bne.w 0x13930 | goto label_14;
| }
0x00013664 add sp, 0x34 |
0x00013666 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001366a ldr r2, [pc, 0x2d8] |
0x0001366c add r2, pc | r2 = 0x26fb6;
0x0001366e add.w r2, r2, r5, lsl 4 | r2 += (r5 << 4);
0x00013672 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00013674 cmp r2, r1 |
0x00013676 blo 0x1361e |
| }
0x00013678 mov r0, r3 | r0 = r3;
0x0001367a b 0x1364e | goto label_0;
| label_12:
0x0001367c ldr r7, [r4, 0x1c] | r7 = *((r4 + 0x1c));
0x0001367e cmp r3, r7 |
0x00013680 it ls |
| if (r3 <= r7) {
0x00013682 movls r0, r5 | r0 = r5;
| goto label_15;
| }
| if (r3 < r7) {
| label_15:
0x00013684 bls 0x1364e | goto label_0;
| }
0x00013686 mul r3, r3, sb | r3 *= sb;
0x0001368a ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001368c cmp r3, 0x46 |
0x0001368e it lo |
| if (r3 >= 0x46) {
0x00013690 movlo r3, 0x46 | r3 = 0x46;
| }
0x00013692 subs r3, 1 | r3--;
0x00013694 clz r8, r3 | r8 &= r3;
0x00013698 rsb.w r8, r8, 0x20 | r8 = 0x20 - r8;
| label_1:
0x0001369c movs r3, 1 | r3 = 1;
0x0001369e lsl.w r8, r3, r8 | r8 = r3 << r8;
0x000136a2 mov r1, r8 | r1 = r8;
0x000136a4 blx 0x361c | fcn_0000361c ();
0x000136a6 vext.16 d4, d26, d2, 3 | __asm ("vext.16 d4, d26, d2, 3");
0x000136aa cmp r0, 0 |
| if (r0 == 0) {
0x000136ac beq 0x13754 | goto label_11;
| }
0x000136ae ldrb.w fp, [r4, 0x27] | fp = *((r4 + 0x27));
0x000136b2 ubfx fp, fp, 2, 1 | fp = (fp >> 2) & ((1 << 1) - 1);
0x000136b6 cmp.w fp, 0 |
| if (fp == 0) {
0x000136ba beq.w 0x138d6 | goto label_16;
| }
0x000136bc strh r4, [r1, 8] | *((r1 + 8)) = r4;
| label_6:
0x000136be ldr r0, [pc, 0x288] |
0x000136c0 movs r1, 0x10 | r1 = 0x10;
0x000136c2 add r0, pc | r0 = 0x27010;
0x000136c4 bl 0x192b0 | fcn_000192b0 (r0, r1);
0x000136c6 ldc2l p11, c4, [r4, 0x280]! | __asm ("ldc2l p11, c4, [r4, 0x280]!");
0x000136ca movs r2, 1 | r2 = 1;
0x000136cc add r3, pc | r3 += pc;
0x000136ce strb r2, [r3] | *(r3) = r2;
| label_5:
0x000136d0 ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x000136d4 ldr.w ip, [pc, 0x278] |
0x000136d8 orr r3, r3, 4 | r3 |= 4;
0x000136dc add ip, pc | ip = 0x27030;
0x000136de strb.w r3, [r4, 0x27] | *((r4 + 0x27)) = r3;
0x000136e2 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000136e6 str.w sl, [r4, 4] | __asm ("str.w sl, [r4, 4]");
0x000136ea str r0, [r4, 8] | *((r4 + 8)) = r0;
0x000136ec mov r0, r8 | r0 = r8;
0x000136ee str r1, [r4, 0xc] | *((r4 + 0xc)) = r1;
0x000136f0 mov r1, sb | r1 = sb;
0x000136f2 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x000136f4 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000136f6 bl 0x1b450 | fcn_0001b450 (r0, r1, r2);
0x000136fa ldr r2, [pc, 0x258] |
0x000136fc mul r1, r7, r6 | r1 = r7 * r6;
0x00013700 ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x00013704 str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x00013706 add r2, pc |
0x00013708 and ip, r3, 3 |
0x0001370c add.w r2, r2, ip, lsl 4 |
0x00013710 ldr r2, [r2, 4] | r2 = *(0x27064);
0x00013712 mla sb, r2, r0, sl | __asm ("mla sb, r2, r0, sl");
0x00013716 cmp r7, 0 |
| if (r7 == 0) {
0x00013718 beq 0x1378c | goto label_17;
| }
0x0001371a subs r1, 1 | r1--;
0x0001371c add sl, r1 | sl += r1;
0x0001371e subs r1, r7, 1 | r1 = r7 - 1;
0x00013720 add r1, sb | r1 += sb;
0x00013722 add.w r2, sb, -1 | r2 = sb + -1;
0x00013726 b 0x13736 |
| while (r3 != 0xfe) {
0x00013728 cmp r3, 0xff |
0x0001372a it ne |
| if (r3 == 0xff) {
0x0001372c movne r3, 0xfe | r3 = 0xfe;
| }
0x0001372e strb r3, [r2, 1]! | *((r2 += 1)) = r3;
0x00013732 cmp r1, r2 |
| if (r1 == r2) {
0x00013734 beq 0x13788 | goto label_18;
| }
0x00013736 ldrb r3, [sl, 1]! | r3 = *((sl += 1));
0x0001373a cmp r3, 0xfe |
0x0001373c bne 0x13728 |
| }
0x0001373e ldr r1, [pc, 0x218] |
0x00013740 movw r2, 0x477 | r2 = 0x477;
0x00013744 ldr r3, [pc, 0x214] |
0x00013746 ldr r0, [pc, 0x218] |
0x00013748 add r1, pc | r1 = 0x270a6;
0x0001374a add r3, pc | r3 = 0x270aa;
0x0001374c adds r1, 7 | r1 += 7;
0x0001374e add r0, pc | r0 = 0x270b4;
0x00013750 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_11:
0x00013754 mvn r0, 0xb | r0 = ~0xb;
0x00013758 b 0x1364e | goto label_0;
| label_10:
0x0001375a ldr r1, [pc, 0x208] |
0x0001375c movw r2, 0x432 | r2 = 0x432;
0x00013760 ldr r3, [pc, 0x204] |
0x00013762 ldr r0, [pc, 0x208] |
0x00013764 add r1, pc | r1 = 0x270ce;
0x00013766 add r3, pc | r3 = 0x270d2;
0x00013768 adds r1, 7 | r1 += 7;
0x0001376a add r0, pc | r0 = 0x270dc;
0x0001376c bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_13:
0x00013770 mul r3, r3, sb | r3 *= sb;
0x00013774 mov r0, r5 | r0 = r5;
0x00013776 cmp r3, 0x46 |
0x00013778 it lo |
| if (r3 >= 0x46) {
0x0001377a movlo r3, 0x46 | r3 = 0x46;
| }
0x0001377c subs r3, 1 | r3--;
0x0001377e clz r8, r3 | r8 &= r3;
0x00013782 rsb.w r8, r8, 0x20 | r8 = 0x20 - r8;
0x00013786 b 0x1369c | goto label_1;
| label_18:
0x00013788 ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
| label_17:
0x0001378c lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
0x0001378e add.w r8, sb, r7 | r8 = sb + r7;
| if (r1 >= r3) {
0x00013792 bpl.w 0x13912 | goto label_19;
| }
0x00013796 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00013798 subs r2, r2, r7 | r2 -= r7;
0x0001379a mul r1, r2, r6 | r1 = r2 * r6;
| if (r1 != 0) {
0x0001379e cbz r1, 0x137d6 |
0x000137a0 and r3, r3, 3 | r3 &= 3;
0x000137a4 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000137a6 lsls r3, r3, 4 | r3 <<= 4;
| label_7:
0x000137a8 ldr.w sl, [pc, 0x1c4] |
0x000137ac mov r2, r1 | r2 = r1;
0x000137ae movs r1, 0 | r1 = 0;
0x000137b0 add sl, pc | sl = 0x27124;
0x000137b2 add r3, sl | r3 += sl;
0x000137b4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000137b6 mla r0, r3, r7, r0 | __asm ("mla r0, r3, r7, r0");
0x000137ba blx 0x3898 | fcn_00003898 ();
0x000137be ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x000137c2 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x000137c4 itett pl |
| if (r2 < r3) {
0x000137c6 andpl r3, r3, 3 | r3 &= 3;
| }
| if (r2 < r3) {
0x000137ca ldrpl r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
| }
| if (r2 < r3) {
0x000137cc addpl sl, sl, r3, lsl 4 | sl += (r3 << 4);
| }
| if (r2 >= r3) {
0x000137d0 ldr.w r2, [sl, 0xc] | r2 = *(0x27130);
| }
0x000137d4 subs r2, r2, r7 | r2 -= r7;
| }
| label_8:
0x000137d6 mov r0, r8 | r0 = r8;
0x000137d8 movs r1, 0xff | r1 = 0xff;
0x000137da blx 0x3898 | fcn_00003898 ();
0x000137de cmp r7, 0 |
| if (r7 == 0) {
0x000137e0 beq 0x138a6 | goto label_20;
| }
0x000137e2 ldr r3, [pc, 0x190] |
0x000137e4 add.w sb, sb, -1 | sb += -1;
0x000137e8 mov.w sl, 0 | sl = 0;
0x000137ec add r3, pc | r3 = 0x27166;
0x000137ee str r3, [sp] | *(sp) = r3;
0x000137f0 ldr r3, [pc, 0x184] |
0x000137f2 add r3, pc | r3 = 0x2716e;
0x000137f4 str r3, [sp, 4] | var_4h = r3;
0x000137f6 b 0x13808 | goto label_21;
| label_2:
0x000137f8 adds r5, 1 | r5++;
0x000137fa movs r3, 0 | r3 = 0;
0x000137fc strb.w r3, [sb] | *(sb) = r3;
0x000137fe adds r0, 0 | r0 += 0;
| do {
| label_3:
0x00013800 add.w sl, sl, 1 | sl++;
0x00013804 cmp sl, r7 |
| if (sl == r7) {
0x00013806 beq 0x138a8 | goto label_22;
| }
| label_21:
0x00013808 ldrb r3, [sb, 1]! | r3 = *((sb += 1));
| label_9:
0x0001380c cmp r3, 0xfe |
0x0001380e bne 0x13800 |
| } while (r3 != 0xfe);
0x00013810 ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x00013814 ldr r1, [sp] | r1 = *(sp);
0x00013816 lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
0x00013818 and r3, r3, 3 | r3 &= 3;
0x0001381c ite mi |
| if (r0 >= r3) {
0x0001381e ldrmi r2, [r4, 4] | r2 = *((r4 + 4));
| }
| if (r0 < r3) {
0x00013820 addpl r2, r4, 4 | r2 = r4 + 4;
| }
0x00013822 add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x00013824 asrs r3, r0, 0xc | r3 = r0 >> 0xc;
0x00013826 mov r0, r4 | r0 = r4;
0x00013828 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0001382a mul r3, r3, sl | r3 *= sl;
0x0001382e ldr r1, [r2, r3] | r1 = *((r2 + r3));
0x00013830 bl 0x12f20 | r0 = fcn_00012f20 (r0, r1);
0x00013834 cmp sl, r0 |
0x00013836 mov r8, r0 | r8 = r0;
| if (sl == r0) {
0x00013838 beq 0x137f8 | goto label_2;
| }
0x0001383a mov.w r3, -1 | r3 = -1;
0x0001383e add.w fp, sp, 0xc |
0x00013842 mov r1, fp | r1 = fp;
0x00013844 strb.w r3, [sb] | *(sb) = r3;
0x00013848 mov r2, sl | r2 = sl;
0x0001384a mvn r3, 3 | r3 = ~3;
0x0001384e mov r0, r4 | r0 = r4;
0x00013850 bl 0x132a0 | fcn_000132a0 (r0, r1, r2, r3);
0x00013854 mov r1, r8 | r1 = r8;
| if (r6 != 0) {
0x00013856 cbz r6, 0x1387e |
0x00013858 ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x0001385c lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
0x0001385e ldr r1, [sp, 4] | r1 = var_4h;
0x00013860 and r3, r3, 3 | r3 &= 3;
0x00013864 ite mi |
| if (r1 >= r3) {
0x00013866 ldrmi r2, [r4, 4] | r2 = *((r4 + 4));
| }
| if (r1 < r3) {
0x00013868 addpl r2, r4, 4 | r2 = r4 + 4;
| }
0x0001386a add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x0001386e movs r1, 0 | r1 = 0;
0x00013870 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00013872 mla r0, r0, sl, r2 | __asm ("mla r0, r0, sl, r2");
0x00013876 mov r2, r6 | r2 = r6;
0x00013878 blx 0x3898 | fcn_00003898 ();
0x0001387c mov r1, r8 | r1 = r8;
| }
0x0001387e mov r2, fp | r2 = fp;
0x00013880 mov r0, r4 | r0 = r4;
0x00013882 adds r5, 1 | r5++;
0x00013884 bl 0x13424 | r0 = fcn_00013424 (r0, r1, r2, r3);
0x00013888 cmp r0, 0 |
| if (r0 == 0) {
0x0001388a beq 0x13800 | goto label_3;
| }
| label_4:
0x0001388c ldr r1, [sp, 0xc] | r1 = var_ch;
0x0001388e mov r0, r4 | r0 = r4;
0x00013890 bl 0x12f20 | fcn_00012f20 (r0, r1);
0x00013894 mov r2, fp | r2 = fp;
0x00013896 mov r1, r0 | r1 = r0;
0x00013898 mov r0, r4 | r0 = r4;
0x0001389a adds r5, 1 | r5++;
0x0001389c bl 0x13424 | r0 = fcn_00013424 (r0, r1, r2, r3);
0x000138a0 cmp r0, 0 |
| if (r0 == 0) {
0x000138a2 beq 0x13800 | goto label_3;
| }
0x000138a4 b 0x1388c | goto label_4;
| label_20:
0x000138a6 mov r5, r7 | r5 = r7;
| label_22:
0x000138a8 ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x000138ac lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x000138ae ite mi |
| if (r2 >= r3) {
0x000138b0 ldrmi r3, [r4, 0x18] | r3 = *((r4 + 0x18));
| }
| if (r2 >= r3) {
0x000138b2 ubfxpl r3, r3, 3, 3 | __asm ("ubfxpl r3, r3, 3, 3");
| }
0x000138b6 cmp r3, r5 |
0x000138b8 it eq |
| if (r3 == r5) {
0x000138ba moveq r0, 1 | r0 = 1;
| goto label_23;
| }
| if (r3 == r5) {
| label_23:
0x000138bc beq.w 0x1364e | goto label_0;
| }
0x000138c0 ldr r1, [pc, 0xb8] |
0x000138c2 movw r2, 0x4a9 | r2 = 0x4a9;
0x000138c6 ldr r3, [pc, 0xb8] |
0x000138c8 ldr r0, [pc, 0xb8] |
0x000138ca add r1, pc | r1 = 0x2724a;
0x000138cc add r3, pc | r3 = 0x27252;
0x000138ce adds r1, 7 | r1 += 7;
0x000138d0 add r0, pc | r0 = 0x27258;
0x000138d2 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_16:
0x000138d6 mul r2, r7, sb | r2 = r7 * sb;
0x000138da adds r1, r4, 4 | r1 = r4 + 4;
0x000138dc blx 0x3578 | mmap64 ()
0x000138e0 ldr r3, [pc, 0xa4] |
0x000138e2 ldrb.w r1, [r4, 0x27] | r1 = *((r4 + 0x27));
0x000138e6 str.w fp, [r4, 0x20] | __asm ("str.w fp, [r4, 0x20]");
0x000138ea add r3, pc | r3 = 0x27276;
0x000138ec ldrb r3, [r3] | r3 = *(r3);
0x000138ee mov r2, r1 | r2 = r1;
0x000138f0 bfi r2, fp, 3, 3 | value_0 = BIT_MASK (3, 3);
| value_1 = fp & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x000138f4 ubfx r1, r1, 3, 3 | r1 = (r1 >> 3) & ((1 << 3) - 1);
0x000138f8 strb.w r2, [r4, 0x27] | *((r4 + 0x27)) = r2;
0x000138fc ubfx r2, r2, 2, 1 | r2 = (r2 >> 2) & ((1 << 1) - 1);
0x00013900 eor r3, r3, 1 | r3 ^= 1;
0x00013904 str r1, [r4, 0x18] | *((r4 + 0x18)) = r1;
0x00013906 orrs r3, r2 | r3 |= r2;
0x00013908 uxtb r3, r3 | r3 = (int8_t) r3;
0x0001390a cmp r3, 0 |
| if (r3 == 0) {
0x0001390c beq.w 0x136d0 | goto label_5;
| }
0x00013910 b 0x136be | goto label_6;
| label_19:
0x00013912 ldr r2, [pc, 0x78] |
0x00013914 and r3, r3, 3 | r3 &= 3;
0x00013918 lsls r3, r3, 4 | r3 <<= 4;
0x0001391a adds r0, r4, 4 | r0 = r4 + 4;
0x0001391c add r2, pc |
0x0001391e add r2, r3 | r2 += r3;
0x00013920 ldr r2, [r2, 0xc] | r2 = *(0x272ba);
0x00013922 subs r2, r2, r7 | r2 -= r7;
0x00013924 mul r1, r2, r6 | r1 = r2 * r6;
0x00013928 cmp r1, 0 |
| if (r1 != 0) {
0x0001392a bne.w 0x137a8 | goto label_7;
| }
0x0001392e b 0x137d6 | goto label_8;
| label_14:
0x00013930 blx 0x35d0 | fcn_000035d0 ();
0x00013934 b 0x1380c | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libudev.so.1.7.2 @ 0x14974 */
| #include <stdint.h>
|
; (fcn) fcn.00014974 () | void fcn_00014974 (int16_t arg_2a0h, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| uint32_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_1ch_2;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00014974 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00014978 sub sp, 0x2c |
0x0001497a strd r1, r2, [sp, 4] | __asm ("strd r1, r2, [var_8h]");
0x0001497c asrs r1, r0, 8 | r1 = r0 >> 8;
0x0001497e ldr r1, [pc, 0x150] |
0x00014980 ldr r2, [pc, 0x150] | r2 = *(0x14ad4);
0x00014982 add r1, pc | r1 = 0x29458;
0x00014984 ldr r2, [r1, r2] |
0x00014986 ldr r2, [r2] | r2 = *(0x29458);
0x00014988 str r2, [sp, 0x24] | var_24h = r2;
0x0001498a mov.w r2, 0 | r2 = 0;
0x0001498e movs r2, 0 | r2 = 0;
0x00014990 str r2, [sp, 0x14] | var_14h = r2;
0x00014992 str r3, [sp, 0xc] | var_ch = r3;
0x00014994 cmp r3, 0 |
| if (r3 == 0) {
0x00014996 beq.w 0x14ab6 | goto label_8;
| }
0x0001499a mov r5, r0 | r5 = r0;
0x0001499c bl 0x145f0 | r0 = fcn_000145f0 (r0);
0x000149a0 cmp r0, 0 |
| if (r0 == 0) {
0x000149a2 beq 0x14a8e | goto label_9;
| }
0x000149a4 ldr r3, [sp, 4] | r3 = var_4h;
0x000149a6 cmp r3, 0 |
| if (r3 == 0) {
0x000149a8 beq 0x14a9c | goto label_10;
| }
0x000149aa mov r0, r3 | r0 = r3;
0x000149ac blx 0x37c8 | r0 = fcn_000037c8 ();
0x000149b0 mov r6, r0 | r6 = r0;
0x000149b2 cmp r0, 0 |
| if (r0 == 0) {
0x000149b4 beq 0x14a96 | goto label_11;
| }
0x000149b6 ldr r3, [sp, 8] | r3 = var_8h;
0x000149b8 eor r7, r3, 1 | r7 = r3 ^ 1;
0x000149ba lsls r1, r0, 0x1c | r1 = r0 << 0x1c;
| label_4:
0x000149bc ldr r3, [sp, 8] | r3 = var_8h;
0x000149be movs r4, 0 | r4 = 0;
0x000149c0 add.w sb, sp, 0x18 | sb += var_18h;
0x000149c4 add.w r8, sp, 0x1c | r8 += var_1ch;
0x000149c8 add.w fp, sp, 0x14 |
0x000149cc cmp r3, 0 |
0x000149ce mvn r3, 1 | r3 = ~1;
0x000149d2 strd r3, r4, [sp, 0x1c] | __asm ("strd r3, r4, [var_1ch]");
0x000149d6 ite ne |
| if (r3 == 0) {
0x000149d8 movne r3, r6 | r3 = r6;
| }
| if (r3 != 0) {
0x000149da moveq r3, r4 | r3 = r4;
| }
0x000149dc adds r3, 1 | r3++;
0x000149de str r3, [sp] | *(sp) = r3;
| do {
| label_0:
0x000149e0 movs r3, 0 | r3 = 0;
0x000149e2 mov r2, sb | r2 = sb;
0x000149e4 mov r1, r8 | r1 = r8;
0x000149e6 mov r0, r5 | r0 = r5;
0x000149e8 bl 0x13fe8 | r0 = fcn_00013fe8 (r0, r1, r2, r3);
| if (r0 == 0) {
0x000149ec cbz r0, 0x14a46 | goto label_12;
| }
| label_1:
0x000149ee ldr r0, [sp, 0x18] | r0 = var_18h;
0x000149f0 cmp r0, 0 |
0x000149f2 beq 0x149e0 |
| } while (r0 == 0);
0x000149f4 blx 0x37c8 | r0 = fcn_000037c8 ();
0x000149f8 mov sl, r0 | sl = r0;
0x000149fa cmp r0, 0 |
| if (r0 == 0) {
0x000149fc beq 0x149e0 | goto label_0;
| }
0x000149fe ldr r3, [sp] | r3 = *(sp);
0x00014a00 adds r1, r4, r3 | r1 = r4 + r3;
0x00014a02 add r1, r0 | r1 += r0;
0x00014a04 cmp r7, 0 |
| if (r7 != 0) {
0x00014a06 bne 0x14a7a | goto label_13;
| }
0x00014a08 add r1, r6 | r1 += r6;
0x00014a0a movs r2, 1 | r2 = 1;
0x00014a0c mov r0, fp | r0 = fp;
0x00014a0e bl 0xffa4 | r0 = fcn_0000ffa4 (r0, r1, r2);
0x00014a12 cmp r0, 0 |
| if (r0 == 0) {
0x00014a14 beq 0x14a86 | goto label_14;
| }
| if (r6 != 0) {
0x00014a16 cbz r6, 0x14a26 |
0x00014a18 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00014a1a mov r2, r6 | r2 = r6;
0x00014a1c ldr r1, [sp, 4] | r1 = var_4h;
0x00014a1e add r0, r4 | r0 += r4;
0x00014a20 add r4, r6 | r4 += r6;
0x00014a22 blx 0x3578 | mmap64 ()
| }
| label_2:
0x00014a26 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00014a28 mov r2, sl | r2 = sl;
0x00014a2a ldr r1, [sp, 0x18] | r1 = var_18h;
0x00014a2c movs r7, 0 | r7 = 0;
0x00014a2e add r0, r4 | r0 += r4;
0x00014a30 add r4, sl | r4 += sl;
0x00014a32 blx 0x3578 | mmap64 ()
0x00014a34 stc p3, c2, [r2, 0]! | __asm ("stc p3, c2, [r2, 0]!");
0x00014a38 mov r2, sb | r2 = sb;
0x00014a3a mov r1, r8 | r1 = r8;
0x00014a3c mov r0, r5 | r0 = r5;
0x00014a3e bl 0x13fe8 | r0 = fcn_00013fe8 (r0, r1, r2, r3);
0x00014a42 cmp r0, 0 |
| if (r0 != 0) {
0x00014a44 bne 0x149ee | goto label_1;
| }
| label_12:
0x00014a46 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x00014a48 cbnz r3, 0x14aa6 | goto label_15;
| }
| label_5:
0x00014a4a ldr r2, [sp, 0x14] | r2 = var_14h;
0x00014a4c movs r3, 0 | r3 = 0;
0x00014a4e mov r0, r3 | r0 = r3;
0x00014a50 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x00014a52 mov r4, r3 | r4 = r3;
0x00014a54 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00014a56 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00014a58 str r3, [r2] | *(r2) = r3;
| label_3:
0x00014a5a blx 0x3530 | ferror (r0);
0x00014a5e ldr r2, [pc, 0x78] |
0x00014a60 ldr r3, [pc, 0x70] | r3 = *(0x14ad4);
0x00014a62 add r2, pc | r2 = 0x29540;
0x00014a64 ldr r3, [r2, r3] | r3 = *(0x29540);
0x00014a66 ldr r2, [r3] | r2 = *(0x29540);
0x00014a68 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00014a6a eors r2, r3 | r2 ^= r3;
0x00014a6c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014a70 bne 0x14acc | goto label_16;
| }
0x00014a72 mov r0, r4 | r0 = r4;
0x00014a74 add sp, 0x2c |
0x00014a76 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00014a78 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| label_13:
0x00014a7a movs r2, 1 | r2 = 1;
0x00014a7c mov r0, fp | r0 = fp;
0x00014a7e bl 0xffa4 | fcn_0000ffa4 (r0, r1, r2);
0x00014a80 invalid |
| if (r2 != 1) {
0x00014a84 bne 0x14a26 | goto label_2;
| }
| label_14:
0x00014a86 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00014a88 mvn r4, 0xb | r4 = ~0xb;
0x00014a8c b 0x14a5a | goto label_3;
| label_9:
0x00014a8e ldr r2, [sp, 0xc] | r2 = var_ch;
0x00014a90 mov r4, r0 | r4 = r0;
0x00014a92 str r0, [r2] | *(r2) = r0;
0x00014a94 b 0x14a5a | goto label_3;
| label_11:
0x00014a96 movs r7, 1 | r7 = 1;
0x00014a98 str r0, [sp, 8] | var_8h = r0;
0x00014a9a b 0x149bc | goto label_4;
| label_10:
0x00014a9c ldr r3, [sp, 4] | r3 = var_4h;
0x00014a9e movs r7, 1 | r7 = 1;
0x00014aa0 mov r6, r3 | r6 = r3;
0x00014aa2 str r3, [sp, 8] | var_8h = r3;
0x00014aa4 b 0x149bc | goto label_4;
| label_15:
0x00014aa6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00014aa8 mov r2, r6 | r2 = r6;
0x00014aaa ldr r1, [sp, 4] | r1 = var_4h;
0x00014aac add r0, r4 | r0 += r4;
0x00014aae add r4, r6 | r4 += r6;
0x00014ab0 blx 0x3578 | mmap64 ()
0x00014ab4 b 0x14a4a | goto label_5;
| label_8:
0x00014ab6 ldr r1, [pc, 0x24] | r1 = *(0x14ade);
0x00014ab8 movw r2, 0x7cf | r2 = 0x7cf;
0x00014abc ldr r3, [pc, 0x20] | r3 = *(0x14ae0);
0x00014abe ldr r0, [pc, 0x24] | r0 = *(0x14ae6);
| label_7:
0x00014ac0 add r1, pc | r1 += pc;
0x00014ac2 add r3, pc | r3 += pc;
0x00014ac4 adds r1, 7 | r1 += 7;
0x00014ac6 add r0, pc | r0 += pc;
0x00014ac8 bl 0x16594 | r0 = fcn_00016594 (r0, r1, r2, r3, r4);
| label_16:
0x00014acc blx 0x35d0 | fcn_000035d0 ();
| if (r1 <= 7) {
0x00014ad0 blo 0x14a78 | goto label_6;
| }
0x00014ad2 movs r1, r0 | r1 = r0;
0x00014ad4 lsls r4, r5, 9 | r4 = r5 << 9;
0x00014ad6 movs r0, r0 |
| if (r0 >= r0) {
0x00014ad8 bhs 0x14ac0 | goto label_7;
| }
0x00014ada movs r1, r0 | r1 = r0;
0x00014adc add r6, sp, 0x2a0 | r6 += arg_2a0h;
0x00014ade movs r0, r0 |
0x00014ae0 sub sp, 0x118 |
0x00014ae2 movs r0, r0 |
0x00014ae4 strb r2, [r7, 0x1f] | *((r7 + 0x1f)) = r2;
0x00014ae6 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/libudev.so.1.7.2 @ 0x173a8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000173a8 () | void fcn_000173a8 (int16_t arg_70h, int16_t arg_d8h, int16_t arg_128h, int16_t arg_178h, int16_t arg_228h, int16_t arg_270h, int16_t arg_278h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int32_t var_4h_3;
| int16_t var_fh;
| int32_t var_8h_3;
| int32_t var_ch;
| int32_t var_14h;
| int16_t var_20h;
| int16_t var_0h_3;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000173a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000173ac sub sp, 0x24 |
0x000173ae add r7, sp, 8 | r7 += var_8h;
0x000173b0 mov fp, r3 |
0x000173b2 str r2, [r7] | *(r7) = r2;
0x000173b4 ldr r2, [pc, 0x1b0] |
0x000173b6 ldr r3, [pc, 0x1b4] | r3 = *(0x1756e);
0x000173b8 add r2, pc | r2 = 0x2e924;
0x000173ba ldr r3, [r2, r3] |
0x000173bc ldr r2, [r7, 0x48] | r2 = *((r7 + 0x48));
0x000173be ldr r3, [r3] | r3 = *(0x2e924);
0x000173c0 str r3, [r7, 0x14] | var_14h = r3;
0x000173c2 mov.w r3, 0 | r3 = 0;
0x000173c6 ldr r3, [pc, 0x1a8] |
0x000173c8 str r2, [r7, 4] | var_4h_3 = r2;
0x000173ca add r3, pc | r3 = 0x2e940;
0x000173cc cmp r1, 0 |
| if (r1 == 0) {
0x000173ce beq.w 0x17534 | goto label_3;
| }
0x000173d2 ldr r2, [pc, 0x1a0] | r2 = *(0x17576);
0x000173d4 ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x000173d6 ldr r2, [r7, 4] | r2 = var_4h_3;
0x000173d8 cmp r2, r3 |
| if (r2 == r3) {
0x000173da beq.w 0x17548 | goto label_4;
| }
0x000173de mov r8, r0 | r8 = r0;
0x000173e0 mov r5, r1 | r5 = r1;
| if (r0 != 0) {
0x000173e2 cbz r0, 0x173f4 |
0x000173e4 mov r1, r0 | r1 = r0;
0x000173e6 movs r2, 1 | r2 = 1;
0x000173e8 mov r0, r5 | r0 = r5;
0x000173ea bl 0x18554 | r0 = fcn_00018554 (r0, r1, r2, r3, r4);
0x000173ee cmp r0, 0 |
| if (r0 == 0) {
0x000173f0 beq.w 0x1755c | goto label_5;
| }
| }
0x000173f4 movs r1, 0x2f | r1 = 0x2f;
0x000173f6 mov r0, r5 | r0 = r5;
0x000173f8 blx 0x397c | r0 = fcn_0000397c ();
0x000173fc cmp r5, r0 |
0x000173fe it ne |
| if (r5 != r0) {
0x00017400 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00017402 ite eq |
| if (r5 != r0) {
0x00017404 moveq r3, 1 | r3 = 1;
| }
| if (r5 == r0) {
0x00017406 movne r3, 0 | r3 = 0;
| }
0x00017408 str r3, [r7, 8] | var_8h_3 = r3;
| if (r5 == r0) {
0x0001740a beq 0x174b0 | goto label_6;
| }
0x0001740c subs r1, r0, r5 | r1 = r0 - r5;
0x0001740e mov r0, r5 | r0 = r5;
0x00017410 blx 0x3928 | r0 = fcn_00003928 ();
0x00017414 add.w r3, r0, 8 | r3 = r0 + 8;
0x00017418 mov r2, r0 | r2 = r0;
0x0001741a bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0001741e ldr r4, [r7, 8] | r4 = var_8h_3;
0x00017420 sub.w sp, sp, r3 |
0x00017424 mov r1, r5 | r1 = r5;
0x00017426 add.w r0, sp, 0xf | r0 += var_fh;
0x0001742a lsrs r3, r0, 3 | r3 = r0 >> 3;
0x0001742c bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00017430 strb.w r4, [r2, r3, lsl 3] | offset_0 = r3 << 3;
| *((r2 + offset_0)) = r4;
0x00017434 blx 0x3578 | mmap64 ()
0x00017438 movs r1, 1 | r1 = 1;
0x0001743a bl 0x19be4 | r0 = fcn_00019be4 ();
0x0001743e cmp r0, 0 |
| if (r0 > 0) {
0x00017440 bgt 0x174b0 | goto label_6;
| }
| if (r0 == 0) {
0x00017442 beq.w 0x1755c | goto label_5;
| }
0x00017446 ldr.w sb, [pc, 0x130] |
0x0001744a mov r0, r5 | r0 = r5;
0x0001744c add sb, pc | sb = 0x2e9ca;
0x0001744e mov r1, sb | r1 = sb;
0x00017450 blx 0x3afc | r0 = fcn_00003afc ();
0x00017454 adds r4, r5, r0 | r4 = r5 + r0;
| do {
| label_2:
0x00017456 mov r0, r5 | r0 = r5;
0x00017458 mov sl, sp | sl = sp;
0x0001745a blx 0x37c8 | fcn_000037c8 ();
0x0001745e adds r0, 8 | r0 += 8;
0x00017460 mov r1, sb | r1 = sb;
0x00017462 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00017466 sub.w sp, sp, r0 |
0x0001746a mov r0, r4 | r0 = r4;
0x0001746c blx 0x34cc | r0 = fcn_000034cc ();
0x00017470 adds r2, r4, r0 | r2 = r4 + r0;
0x00017472 mov r1, sb | r1 = sb;
0x00017474 mov r0, r2 | r0 = r2;
0x00017476 str r2, [r7, 0xc] | var_ch = r2;
0x00017478 blx 0x3afc | r0 = fcn_00003afc ();
0x0001747a adc.w r8, r0, sl, ror 27 | __asm ("adc.w r8, r0, sl, ror 27");
0x0001747e add r6, sp, 8 | r6 += var_8h;
0x00017480 ldrb r3, [r2, r0] | r3 = *((r2 + r0));
0x00017482 adds r4, r2, r0 | r4 = r2 + r0;
0x00017484 cmp r3, 0 |
| if (r3 == 0) {
0x00017486 beq 0x1752e | goto label_7;
| }
0x00017488 subs r2, r2, r5 | r2 -= r5;
0x0001748a mov r1, r5 | r1 = r5;
0x0001748c mov r0, r6 | r0 = r6;
0x0001748e str r2, [r7, 0xc] | var_ch = r2;
0x00017490 blx 0x3578 | mmap64 ()
0x00017492 ldrd lr, sb, [r2], -0x35c | __asm ("ldrd lr, sb, [r2], -0x35c");
0x00017496 adds r2, 2 | r2 += 2;
0x00017498 strb r3, [r6, r2] | *((r6 + r2)) = r3;
0x0001749a cmp.w r8, 0 |
| if (r8 == 0) {
0x0001749e beq 0x174ce | goto label_8;
| }
0x000174a0 movs r2, 1 | r2 = 1;
0x000174a2 mov r1, r6 | r1 = r6;
0x000174a4 mov r0, r8 | r0 = r8;
0x000174a6 bl 0x18554 | r0 = fcn_00018554 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x000174aa cbz r0, 0x174ce | goto label_8;
| }
| label_0:
0x000174ac mov sp, sl |
0x000174ae b 0x17456 |
| } while (1);
| label_6:
0x000174b0 movs r0, 0 | r0 = 0;
| label_1:
0x000174b2 ldr r2, [pc, 0xc8] |
0x000174b4 ldr r3, [pc, 0xb4] | r3 = *(0x1756c);
0x000174b6 add r2, pc | r2 = 0x2ea38;
0x000174b8 ldr r3, [r2, r3] | r3 = *(0x2ea38);
0x000174ba ldr r2, [r3] | r2 = *(0x2ea38);
0x000174bc ldr r3, [r7, 0x14] | r3 = var_14h;
0x000174be eors r2, r3 | r2 ^= r3;
0x000174c0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000174c4 bne 0x17562 | goto label_9;
| }
0x000174c6 adds r7, 0x1c | r7 += 0x1c;
0x000174c8 mov sp, r7 |
0x000174ca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x000174ce mov r0, fp | r0 = fp;
0x000174d0 bl 0x1aabc | r0 = fcn_0001aabc (r0);
| if (r0 == 0) {
0x000174d4 cbnz r0, 0x174ee |
0x000174d6 ldr r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x000174d8 bl 0x1aabc | fcn_0001aabc (r0);
0x000174dc ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x000174de eor r0, r0, 1 | r0 ^= 1;
0x000174e2 cmp r3, 0 |
0x000174e4 ite ne |
| if (r3 == 0) {
0x000174e6 movne r0, 0 | r0 = 0;
| }
| if (r3 != 0) {
0x000174e8 andeq r0, r0, 1 | r0 &= 1;
| }
| if (r0 != 0) {
0x000174ec cbnz r0, 0x17514 | goto label_10;
| }
| }
0x000174ee ldr r3, [r7, 4] | r3 = var_4h_3;
0x000174f0 mov r0, r6 | r0 = r6;
0x000174f2 mov r2, fp | r2 = fp;
0x000174f4 str r3, [sp, 4] | var_4h_2 = r3;
0x000174f6 ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x000174f8 str r3, [sp] | *(sp) = r3;
0x000174fa ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x000174fc ldr r1, [r7] | r1 = *(r7);
0x000174fe bl 0x17090 | r0 = fcn_00017090 (r0, r1, r2, r3, r4, r5);
0x00017502 adds.w r3, r0, 0x11 | r3 = r0 + 0x11;
0x00017506 it ne |
| if (r3 == r0) {
0x00017508 movne r3, 1 | r3 = 1;
| }
0x0001750a ands.w r3, r3, r0, lsr 31 | r3 &= (r0 >> 31);
| if (r3 == r3) {
0x0001750e beq 0x174ac | goto label_0;
| }
| do {
0x00017510 mov sp, sl |
0x00017512 b 0x174b2 | goto label_1;
| label_10:
0x00017514 ldrd r1, r3, [r7] | __asm ("ldrd r1, r3, [r7]");
0x00017518 mov r0, r6 | r0 = r6;
0x0001751a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
0x0001751c adds.w r3, r0, 0x11 | r3 = r0 + 0x11;
0x00017520 it ne |
| if (r3 == r0) {
0x00017522 movne r3, 1 | r3 = 1;
| }
0x00017524 ands.w r3, r3, r0, lsr 31 | r3 &= (r0 >> 31);
0x00017528 bne 0x17510 |
| } while (r3 != r3);
0x0001752a mov sp, sl |
0x0001752c b 0x17456 | goto label_2;
| label_7:
0x0001752e mov r0, r3 | r0 = r3;
0x00017530 mov sp, sl |
0x00017532 b 0x174b2 | goto label_1;
| label_3:
0x00017534 ldr r1, [pc, 0x48] |
0x00017536 movs r2, 0x65 | r2 = 0x65;
0x00017538 ldr r3, [pc, 0x48] |
0x0001753a ldr r0, [pc, 0x4c] |
0x0001753c add r1, pc | r1 = 0x2eac0;
0x0001753e add r3, pc | r3 = 0x2eac6;
0x00017540 adds r1, 7 | r1 += 7;
0x00017542 add r0, pc | r0 = 0x2ead0;
0x00017544 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_4:
0x00017548 ldr r1, [pc, 0x40] |
0x0001754a movs r2, 0x66 | r2 = 0x66;
0x0001754c ldr r3, [pc, 0x40] |
0x0001754e ldr r0, [pc, 0x44] |
0x00017550 add r1, pc | r1 = 0x2eae0;
0x00017552 add r3, pc | r3 = 0x2eae6;
0x00017554 adds r1, 7 | r1 += 7;
0x00017556 add r0, pc | r0 = 0x2eaf0;
0x00017558 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_5:
0x0001755c mvn r0, 0x13 | r0 = ~0x13;
0x00017560 b 0x174b2 | goto label_1;
| label_9:
0x00017562 blx 0x35d0 | fcn_000035d0 ();
0x00017566 nop |
0x00017568 add r1, sp, 0x270 | r1 += arg_270h;
0x0001756a movs r1, r0 | r1 = r0;
0x0001756c lsls r4, r5, 9 | r4 = r5 << 9;
0x0001756e movs r0, r0 |
0x00017570 add r1, sp, 0x228 | r1 += arg_228h;
0x00017572 movs r1, r0 | r1 = r0;
0x00017574 lsls r0, r1, 0xa | r0 = r1 << 0xa;
0x00017576 movs r0, r0 |
0x00017578 str r0, [r1, 0x64] | *((r1 + 0x64)) = r0;
0x0001757a movs r0, r0 |
0x0001757c add r0, sp, 0x278 | r0 += arg_278h;
0x0001757e movs r1, r0 | r1 = r0;
0x00017580 str r1, [sp, 0x70] | *(arg_70h) = r1;
0x00017582 movs r0, r0 |
0x00017584 str r2, [sp, 0x178] | *(arg_178h) = r2;
0x00017586 movs r0, r0 |
0x00017588 str r6, [r2, 0x44] | *((r2 + 0x44)) = r6;
0x0001758a movs r0, r0 |
0x0001758c str r1, [sp, 0x20] | var_20h = r1;
0x0001758e movs r0, r0 |
0x00017590 str r2, [sp, 0x128] | *(arg_128h) = r2;
0x00017592 movs r0, r0 |
0x00017594 str r2, [sp, 0xd8] | *(arg_d8h) = r2;
0x00017596 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/libudev.so.1.7.2 @ 0x17f74 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00017f74 () | void fcn_00017f74 (int16_t arg_358h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_d8h;
| r0 = arg1;
| r1 = arg2;
0x00017f74 blmi 0xd6a84c | __asm ("blmi aav.0x00019dd6");
0x00017f78 push.w {r4, r5, r6, r7, r8, lr} |
0x00017f7c mov r6, r1 | r6 = r1;
0x00017f7e add r2, pc | r2 += pc;
0x00017f80 ldr r1, [pc, 0xcc] |
0x00017f82 sub sp, 0x10 |
0x00017f84 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00017f86 add r7, sp, 0 | r7 += var_0h;
0x00017f88 add r1, pc | r1 = 0x2ffdc;
0x00017f8a mov r5, r0 | r5 = r0;
0x00017f8c ldr r3, [r3] | r3 = *(r3);
0x00017f8e str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x00017f90 mov.w r3, 0 | r3 = 0;
0x00017f94 blx 0x3afc | r0 = fcn_00003afc ();
0x00017f98 cmp r0, 0 |
| if (r0 == 0) {
0x00017f9a beq 0x18036 | goto label_1;
| }
0x00017f9c ldrb r3, [r5, r0] | r3 = *((r5 + r0));
0x00017f9e mov r4, r0 | r4 = r0;
0x00017fa0 cmp r3, 0x3a |
| if (r3 != 0x3a) {
0x00017fa2 bne 0x18036 | goto label_1;
| }
0x00017fa4 mov r1, r0 | r1 = r0;
0x00017fa6 mov r0, r5 | r0 = r5;
0x00017fa8 blx 0x3928 | r0 = fcn_00003928 ();
0x00017fac add.w r3, r0, 8 | r3 = r0 + 8;
0x00017fb0 mov.w r8, 0 | r8 = 0;
0x00017fb4 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00017fb8 mov r2, r0 | r2 = r0;
0x00017fba sub.w sp, sp, r3 |
0x00017fbe mov r1, r5 | r1 = r5;
0x00017fc0 mov r3, sp | r3 = sp;
0x00017fc2 lsrs r3, r3, 3 | r3 >>= 3;
0x00017fc4 strb.w r8, [r0, r3, lsl 3] | offset_0 = r3 << 3;
| *((r0 + offset_0)) = r8;
0x00017fc8 mov r0, sp | r0 = sp;
0x00017fca blx 0x3578 | mmap64 ()
0x00017fce adds r2, r7, 4 | r2 = r7 + 4;
0x00017fd0 mov r1, r8 | r1 = r8;
0x00017fd2 bl 0x17bd0 | r0 = fcn_00017bd0 (r0, r1, r2);
0x00017fd6 cmp r0, 0 |
| if (r0 < 0) {
0x00017fd8 blt 0x1801a | goto label_0;
| }
0x00017fda adds r4, 1 | r4++;
0x00017fdc add.w r2, r7, 8 | r2 = r7 + 8;
0x00017fe0 mov r1, r8 | r1 = r8;
0x00017fe2 adds r0, r5, r4 | r0 = r5 + r4;
0x00017fe4 bl 0x17bd0 | r0 = fcn_00017bd0 (r0, r1, r2);
0x00017fe8 cmp r0, 0 |
| if (r0 < 0) {
0x00017fea blt 0x1801a | goto label_0;
| }
0x00017fec ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x00017fee cmp.w r1, 0x1000 |
| if (r1 >= 0x1000) {
0x00017ff2 bhs 0x1803c | goto label_2;
| }
0x00017ff4 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00017ff6 cmp.w r3, 0x100000 |
| if (r3 >= 0x100000) {
0x00017ffa bhs 0x1803c | goto label_2;
| }
0x00017ffc mov r2, r8 | r2 = r8;
0x00017ffe uxtb r4, r3 | r4 = (int8_t) r3;
0x00018000 movt r2, 0xfff0 | r2 = (r2 & 0xFFFF) | 0xfff00000;
0x00018004 and.w r2, r2, r3, lsl 12 | r2 &= (r3 << 12);
0x00018008 lsrs r3, r3, 0x14 | r3 >>= 0x14;
0x0001800a orr.w r4, r4, r1, lsl 8 | r4 |= (r1 << 8);
0x0001800e orr.w r3, r3, r1, lsr 24 | r3 |= (r1 >> 24);
0x00018012 mov r0, r8 | r0 = r8;
0x00018014 orrs r2, r4 | r2 |= r4;
0x00018016 str r2, [r6] | *(r6) = r2;
0x00018018 str r3, [r6, 4] | *((r6 + 4)) = r3;
| do {
| label_0:
0x0001801a ldr r2, [pc, 0x38] |
0x0001801c ldr r3, [pc, 0x2c] | r3 = *(0x1804c);
0x0001801e add r2, pc | r2 = 0x30078;
0x00018020 ldr r3, [r2, r3] | r3 = *(0x30078);
0x00018022 ldr r2, [r3] | r2 = *(0x30078);
0x00018024 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00018026 eors r2, r3 | r2 ^= r3;
0x00018028 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001802c bne 0x18042 | goto label_3;
| }
0x0001802e adds r7, 0x10 | r7 += 0x10;
0x00018030 mov sp, r7 |
0x00018032 pop.w {r4, r5, r6, r7, r8, pc} |
| label_1:
0x00018036 mvn r0, 0x15 | r0 = ~0x15;
0x0001803a b 0x1801a |
| } while (1);
| label_2:
0x0001803c mvn r0, 0x21 | r0 = ~0x21;
0x00018040 b 0x1801a | goto label_0;
| label_3:
0x00018042 blx 0x35d0 | fcn_000035d0 ();
0x00018046 nop |
0x00018048 ldr r5, [sp, 0x358] | r5 = *(arg_358h);
0x0001804a movs r1, r0 | r1 = r0;
0x0001804c lsls r4, r5, 9 | r4 = r5 << 9;
0x0001804e movs r0, r0 |
0x00018050 ldrh r4, [r3, 0xe] | r4 = *((r3 + 0xe));
0x00018052 movs r0, r0 |
0x00018054 ldr r5, [sp, 0xd8] | r5 = var_d8h;
0x00018056 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/libudev.so.1.7.2 @ 0x190b8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000190b8 () | void fcn_000190b8 (int16_t arg_50h, int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000190b8 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000190bc mov r8, r2 | r8 = r2;
0x000190be ldr r2, [pc, 0x1c0] |
0x000190c0 sub sp, 0xc |
0x000190c2 ldr r3, [pc, 0x1c0] | r3 = *(0x19286);
0x000190c4 add r2, pc | r2 = 0x3234a;
0x000190c6 ldr r3, [r2, r3] |
0x000190c8 ldr r3, [r3] | r3 = LIBUDEV_247;
0x000190ca str r3, [sp, 4] | var_4h = r3;
0x000190cc mov.w r3, 0 | r3 = 0;
0x000190d0 cmp r1, 0 |
| if (r1 == 0) {
0x000190d2 beq 0x1918c | goto label_4;
| }
0x000190d4 ands r5, r8, 8 | r5 = r8 & 8;
0x000190d8 mov r6, r0 | r6 = r0;
0x000190da mov r4, r1 | r4 = r1;
| if (r5 == r8) {
0x000190dc bne 0x19150 |
| label_0:
0x000190de ldr r3, [pc, 0x1a8] |
0x000190e0 add r3, pc |
0x000190e2 ldr r3, [r3] | r3 = LIBUDEV_247;
| if (r3 != 0) {
0x000190e4 cbz r3, 0x1912e |
0x000190e6 ldr.w sb, [pc, 0x1a4] |
0x000190ea lsr.w sl, r8, 2 | sl = r8 >> 2;
0x000190ee and fp, r8, 2 |
0x000190f2 movs r7, 1 | r7 = 1;
0x000190f4 add sb, pc | sb = 0x32386;
| label_1:
0x000190f6 and r2, sl, 4 | r2 = sl & 4;
0x000190fa mov r1, r4 | r1 = r4;
0x000190fc cmp.w fp, 0 |
0x00019100 it eq |
| if (fp != 0) {
0x00019102 orreq r2, r2, 1 | r2 |= 1;
| }
0x00019106 mov r0, r6 | r0 = r6;
0x00019108 blx 0x3a48 | r0 = fcn_00003a48 ();
0x0001910c cmp r0, 0 |
| if (r0 <= 0) {
0x0001910e ble 0x191b4 | goto label_5;
| }
0x00019110 cmp r4, r0 |
0x00019112 str.w r7, [sb] | __asm ("str.w r7, [sb]");
| if (r4 == r0) {
0x00019116 beq 0x1918c | goto label_4;
| }
0x00019118 cmp r0, r4 |
| if (r0 >= r4) {
0x0001911a bhs 0x19212 | goto label_6;
| }
0x0001911c tst.w r8, 1 |
0x00019120 add r6, r0 | r6 += r0;
0x00019122 sub.w r4, r4, r0 | r4 -= r0;
| if ((r8 & 1) != 0) {
0x00019126 bne 0x19226 | goto label_7;
| }
0x00019128 cmp.w fp, 0 |
| if (fp != 0) {
0x0001912c bne 0x191fa | goto label_8;
| }
| }
| label_2:
0x0001912e ldr r0, [pc, 0x160] |
0x00019130 mov.w r1, 0x100 |
0x00019134 movt r1, 8 | r1 = 0x80100;
0x00019138 add r0, pc | r0 = 0x323ce;
0x0001913a blx 0x36ec | r0 = asprintf_chk ();
0x0001913e subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x00019140 blt 0x191fe | goto label_9;
| }
0x00019142 mov r2, r4 | r2 = r4;
0x00019144 movs r3, 1 | r3 = 1;
0x00019146 mov r1, r6 | r1 = r6;
0x00019148 bl 0x15228 | r0 = fcn_00015228 (r0, r1, r2, r3);
0x0001914c mov r4, r0 | r4 = r0;
0x0001914e b 0x19192 | goto label_3;
| }
0x00019150 movs r5, 0 | r5 = 0;
0x00019152 mov r7, sp | r7 = sp;
0x00019154 b 0x19170 |
| while (r0 >= 0) {
0x00019156 cmp r4, 4 |
0x00019158 mov r5, r4 | r5 = r4;
0x0001915a it hs |
| if (r4 < 4) {
0x0001915c movhs r5, 4 | r5 = 4;
| }
0x0001915e mov r0, r6 | r0 = r6;
0x00019160 mov r2, r5 | r2 = r5;
0x00019162 mov r1, r7 | r1 = r7;
0x00019164 blx 0x3578 | mmap64 ()
0x00019168 subs r4, r4, r5 | r4 -= r5;
0x0001916a add r6, r5 | r6 += r5;
| if (r4 == r4) {
0x0001916c beq 0x1918c | goto label_4;
| }
0x0001916e movs r5, 1 | r5 = 1;
0x00019170 mov r0, r7 | r0 = r7;
0x00019172 bl 0x18fb8 | r0 = fcn_00018fb8 ();
0x00019176 cmp r0, 0 |
0x00019178 bge 0x19156 |
| }
0x0001917a cmp r5, 0 |
| if (r5 == 0) {
0x0001917c beq 0x190de | goto label_0;
| }
0x0001917e tst.w r8, 1 |
| if ((r8 & 1) == 0) {
0x00019182 beq 0x190de | goto label_0;
| }
0x00019184 mov r1, r4 | r1 = r4;
0x00019186 mov r0, r6 | r0 = r6;
0x00019188 bl 0x1907c | fcn_0001907c (r0, r1);
| label_4:
0x0001918c mov.w r5, -1 | r5 = -1;
0x00019190 movs r4, 0 | r4 = 0;
| label_3:
0x00019192 mov r0, r5 | r0 = r5;
0x00019194 bl 0x10570 | fcn_00010570 (r0);
0x00019198 ldr r2, [pc, 0xf8] |
0x0001919a ldr r3, [pc, 0xe8] | r3 = *(0x19286);
0x0001919c add r2, pc | r2 = 0x32434;
0x0001919e ldr r3, [r2, r3] | r3 = LIBUDEV_247;
0x000191a0 ldr r2, [r3] | r2 = LIBUDEV_247;
0x000191a2 ldr r3, [sp, 4] | r3 = var_4h;
0x000191a4 eors r2, r3 | r2 ^= r3;
0x000191a6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000191aa bne 0x1927c | goto label_10;
| }
0x000191ac mov r0, r4 | r0 = r4;
0x000191ae add sp, 0xc |
0x000191b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| if (r2 == r3) {
| label_5:
0x000191b4 beq 0x19236 | goto label_11;
| }
0x000191b6 blx 0x3828 | r0 = fcn_00003828 ();
0x000191ba ldr r3, [r0] | r3 = *(r0);
0x000191bc eor.w r2, r3, r3, asr 31 | r2 = r3 ^ (r3 >> 31);
0x000191c0 sub.w r2, r2, r3, asr 31 | r2 -= (r3 >> 31);
0x000191c4 cmp r2, 0x26 |
| if (r2 == 0x26) {
0x000191c6 beq 0x191f0 | goto label_12;
| }
| if (r2 > 0x26) {
0x000191c8 bgt 0x191ea | goto label_13;
| }
0x000191ca cmp r2, 0x19 |
| if (r2 == 0x19) {
0x000191cc beq 0x191f0 | goto label_12;
| }
| do {
0x000191ce cmp r3, 0xb |
| if (r3 == 0xb) {
0x000191d0 beq 0x19252 | goto label_14;
| }
0x000191d2 cmp r3, 0x16 |
| if (r3 != 0x16) {
0x000191d4 bne 0x19274 | goto label_15;
| }
0x000191d6 tst.w r8, 0x10 |
| if ((r8 & 0x10) == 0) {
0x000191da beq 0x19248 | goto label_16;
| }
0x000191dc bic r8, r8, 0x10 | r8 = BIT_MASK (r8, 0x10);
0x000191e0 lsr.w sl, r8, 2 | sl = r8 >> 2;
0x000191e4 and fp, r8, 2 |
0x000191e8 b 0x190f6 | goto label_1;
| label_13:
0x000191ea subs r2, 0x5d | r2 -= 0x5d;
0x000191ec cmp r2, 4 |
0x000191ee bhi 0x191ce |
| } while (r2 > 4);
| label_12:
0x000191f0 ldr r3, [pc, 0xa4] |
0x000191f2 movs r2, 0 | r2 = 0;
0x000191f4 add r3, pc | r3 = 0x32490;
0x000191f6 str r2, [r3] | *(r3) = r2;
0x000191f8 b 0x1912e | goto label_2;
| label_8:
0x000191fa movs r5, 1 | r5 = 1;
0x000191fc b 0x190f6 | goto label_1;
| label_9:
0x000191fe blx 0x3828 | r0 = fcn_00003828 ();
0x00019202 ldr r4, [r0] | r4 = *(r0);
0x00019204 cmp r4, 2 |
0x00019206 it ne |
| if (r4 == 2) {
0x00019208 rsbne r4, r4, 0 | __asm ("rsbne r4, r4, 0");
| goto label_17;
| }
| if (r4 != 2) {
| label_17:
0x0001920a bne 0x19192 | goto label_3;
| }
0x0001920c mvn r4, 0x25 | r4 = ~0x25;
0x00019210 b 0x19192 | goto label_3;
| label_6:
0x00019212 ldr r1, [pc, 0x88] |
0x00019214 movs r2, 0xe8 | r2 = 0xe8;
0x00019216 ldr r3, [pc, 0x88] |
0x00019218 ldr r0, [pc, 0x88] |
0x0001921a add r1, pc | r1 = 0x324bc;
0x0001921c add r3, pc | r3 = 0x324c2;
0x0001921e adds r1, 7 | r1 += 7;
0x00019220 add r0, pc | r0 = 0x324c8;
0x00019222 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| do {
| label_7:
0x00019226 mov r1, r4 | r1 = r4;
0x00019228 mov r0, r6 | r0 = r6;
0x0001922a mov.w r5, -1 | r5 = -1;
0x0001922e movs r4, 0 | r4 = 0;
0x00019230 bl 0x1907c | fcn_0001907c (r0, r1);
0x00019234 b 0x19192 | goto label_3;
| label_11:
0x00019236 ldr r3, [pc, 0x70] |
0x00019238 movs r2, 1 | r2 = 1;
0x0001923a mov.w r5, -1 | r5 = -1;
0x0001923e mvn r4, 4 | r4 = ~4;
0x00019242 add r3, pc | r3 = 0x324f0;
0x00019244 str r2, [r3] | *(r3) = r2;
0x00019246 b 0x19192 | goto label_3;
| label_16:
0x00019248 mov.w r5, -1 | r5 = -1;
0x0001924c mvn r4, 0x15 | r4 = ~0x15;
0x00019250 b 0x19192 | goto label_3;
| label_14:
0x00019252 ldr r3, [pc, 0x58] |
0x00019254 movs r2, 1 | r2 = 1;
0x00019256 add r3, pc | r3 = 0x32508;
0x00019258 str r2, [r3] | *(r3) = r2;
| if (r5 == 0) {
0x0001925a cbz r5, 0x19262 | goto label_18;
| }
0x0001925c tst.w r8, 1 |
0x00019260 bne 0x19226 |
| } while ((r8 & 1) != 0);
| label_18:
0x00019262 tst.w r8, 4 |
| if ((r8 & 4) == 0) {
0x00019266 beq.w 0x1912e | goto label_2;
| }
0x0001926a mov.w r5, -1 | r5 = -1;
0x0001926e mvn r4, 0x3c | r4 = ~0x3c;
0x00019272 b 0x19192 | goto label_3;
| label_15:
0x00019274 rsbs r4, r3, 0 | r4 = r3 - ;
0x00019276 mov.w r5, -1 | r5 = -1;
0x0001927a b 0x19192 | goto label_3;
| label_10:
0x0001927c blx 0x35d0 | fcn_000035d0 ();
0x00019280 ldrh r0, [r2, 0x24] | r0 = *((r2 + 0x24));
0x00019282 movs r1, r0 | r1 = r0;
0x00019284 lsls r4, r5, 9 | r4 = r5 << 9;
0x00019286 movs r0, r0 |
0x00019288 str r0, [sp, 0x50] | *(arg_50h) = r0;
0x0001928a movs r1, r0 | r1 = r0;
0x0001928c str r0, [sp] | *(sp) = r0;
0x0001928e movs r1, r0 | r1 = r0;
0x00019290 ldrb r0, [r0, 0xb] | r0 = *((r0 + 0xb));
0x00019292 movs r0, r0 |
0x00019294 ldrh r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00019296 movs r1, r0 | r1 = r0;
0x00019298 ldrh r0, [r0, 0x38] | r0 = *((r0 + 0x38));
0x0001929a movs r1, r0 | r1 = r0;
0x0001929c ldrb r6, [r5, 6] | r6 = *((r5 + 6));
0x0001929e movs r0, r0 |
0x000192a0 ldrb r4, [r5, 7] | r4 = *((r5 + 7));
0x000192a2 movs r0, r0 |
0x000192a4 ldrb r0, [r1, 7] | r0 = *((r1 + 7));
0x000192a6 movs r0, r0 |
0x000192a8 ldrh r2, [r6, 0x34] | r2 = *((r6 + 0x34));
0x000192aa movs r1, r0 | r1 = r0;
0x000192ac ldrh r6, [r3, 0x34] | r6 = *((r3 + 0x34));
0x000192ae 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/libudev.so.1.7.2 @ 0x19b1c */
| #include <stdint.h>
|
; (fcn) fcn.00019b1c () | void fcn_00019b1c (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00019b1c tstlt r8, 248, 10 | __asm ("tstlt r8, 248, 10");
0x00019b20 mov r4, r1 | r4 = r1;
| if (r1 != 0) {
0x00019b22 cbz r1, 0x19b8c |
0x00019b24 mov r6, r0 | r6 = r0;
0x00019b26 mov r0, r1 | r0 = r1;
0x00019b28 blx 0x37c8 | r0 = fcn_000037c8 ();
0x00019b2c cmp r0, 1 |
0x00019b2e mov r5, r0 | r5 = r0;
| if (r0 < 1) {
0x00019b30 bls 0x19bb8 | goto label_0;
| }
0x00019b32 ldrb r3, [r4] | r3 = *(r4);
0x00019b34 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x00019b36 beq 0x19b3c |
0x00019b38 cmp r3, 0x40 |
| if (r3 != 0x40) {
0x00019b3a bne 0x19bb8 | goto label_0;
| }
| }
0x00019b3c adds r7, r5, 1 | r7 = r5 + 1;
0x00019b3e cmp r7, 0x6c |
| if (r7 > 0x6c) {
0x00019b40 bhi 0x19bb8 | goto label_0;
| }
0x00019b42 movs r2, 0x6e | r2 = 0x6e;
0x00019b44 movs r1, 0 | r1 = 0;
0x00019b46 mov r0, r6 | r0 = r6;
0x00019b48 blx 0x3898 | fcn_00003898 ();
0x00019b4c movs r3, 1 | r3 = 1;
0x00019b4e strh r3, [r6] | *(r6) = r3;
0x00019b50 ldrb r3, [r4] | r3 = *(r4);
0x00019b52 cmp r3, 0x40 |
| if (r3 != 0x40) {
0x00019b54 beq 0x19b7e |
0x00019b56 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x00019b58 bne 0x19ba2 | goto label_1;
| }
0x00019b5a mov r2, r7 | r2 = r7;
0x00019b5c mov r1, r4 | r1 = r4;
0x00019b5e adds r0, r6, 2 | r0 = r6 + 2;
0x00019b60 blx 0x3578 | mmap64 ()
0x00019b64 adds r0, r5, 3 | r0 = r5 + 3;
0x00019b66 pop {r3, r4, r5, r6, r7, pc} |
0x00019b68 ldr r1, [pc, 0x54] |
0x00019b6a movw r2, 0x4a1 | r2 = 0x4a1;
0x00019b6e ldr r3, [pc, 0x54] |
0x00019b70 ldr r0, [pc, 0x54] |
0x00019b72 add r1, pc | r1 = 0x33736;
0x00019b74 add r3, pc | r3 = 0x3373e;
0x00019b76 adds r1, 7 | r1 += 7;
0x00019b78 add r0, pc | r0 = 0x33744;
0x00019b7a bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| }
0x00019b7e mov r2, r5 | r2 = r5;
0x00019b80 adds r1, r4, 1 | r1 = r4 + 1;
0x00019b82 adds r0, r6, 3 | r0 = r6 + 3;
0x00019b84 blx 0x3578 | mmap64 ()
0x00019b88 adds r0, r5, 2 | r0 = r5 + 2;
0x00019b8a pop {r3, r4, r5, r6, r7, pc} |
| }
0x00019b8c ldr r1, [pc, 0x3c] |
0x00019b8e movw r2, 0x4a2 | r2 = 0x4a2;
0x00019b92 ldr r3, [pc, 0x3c] |
0x00019b94 ldr r0, [pc, 0x3c] |
0x00019b96 add r1, pc | r1 = 0x33766;
0x00019b98 add r3, pc | r3 = 0x3376e;
0x00019b9a adds r1, 7 | r1 += 7;
0x00019b9c add r0, pc | r0 = 0x33774;
0x00019b9e bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_1:
0x00019ba2 ldr r1, [pc, 0x34] |
0x00019ba4 mov.w r2, 0x4c0 | r2 = 0x4c0;
0x00019ba8 ldr r3, [pc, 0x30] |
0x00019baa ldr r0, [pc, 0x34] |
0x00019bac add r1, pc | r1 = 0x3378a;
0x00019bae add r3, pc | r3 = 0x3378e;
0x00019bb0 adds r1, 7 | r1 += 7;
0x00019bb2 add r0, pc | r0 = 0x33798;
0x00019bb4 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_0:
0x00019bb8 mvn r0, 0x15 | r0 = ~0x15;
0x00019bbc pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libudev.so.1.7.2 @ 0x5edc */
| #include <stdint.h>
|
; (fcn) sym.udev_util_encode_string () | void udev_util_encode_string (uint32_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00005edc b.w 0x1b308 |
0x0001b308 cmp r1, 0 |
0x0001b30a it ne |
| if (r1 != 0) {
0x0001b30c cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x0001b30e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001b312 it eq |
| if (r1 != 0) {
0x0001b314 moveq r6, 1 | r6 = 1;
| }
0x0001b316 sub sp, 0xc |
0x0001b318 it ne |
| if (r1 == 0) {
0x0001b31a movne r6, 0 | r6 = 0;
| }
| if (r1 == 0) {
0x0001b31c beq 0x1b3c8 | goto label_2;
| }
0x0001b31e ldrb r3, [r0] | r3 = *(r0);
0x0001b320 mov r7, r0 | r7 = r0;
0x0001b322 mov sb, r2 | sb = r2;
0x0001b324 mov r8, r1 | r8 = r1;
0x0001b326 cmp r3, 0 |
| if (r3 == 0) {
0x0001b328 beq 0x1b3d2 | goto label_3;
| }
0x0001b32a ldr.w sl, [pc, 0xac] |
0x0001b32e mov fp, r0 |
0x0001b330 mov r5, r6 | r5 = r6;
0x0001b332 add sl, pc | sl = 0x36710;
0x0001b334 b 0x1b35a |
| while (r0 > 1) {
0x0001b336 sub.w r3, sb, r6 | r3 = sb - r6;
0x0001b33a cmp r3, r0 |
| if (r3 <= r0) {
0x0001b33c blo 0x1b3c8 | goto label_2;
| }
0x0001b33e subs r5, 1 | r5--;
0x0001b340 add.w r0, r8, r6 | r0 = r8 + r6;
0x0001b344 add r5, r4 | r5 += r4;
0x0001b346 add r6, r4 | r6 += r4;
0x0001b348 mov r2, r4 | r2 = r4;
0x0001b34a mov r1, fp | r1 = fp;
0x0001b34c blx 0x3578 | mmap64 ()
| label_1:
0x0001b350 adds r5, 1 | r5++;
0x0001b352 ldrb r3, [r7, r5] | r3 = *((r7 + r5));
0x0001b354 add.w fp, r7, r5 |
| if (r3 == 0) {
0x0001b358 cbz r3, 0x1b394 | goto label_4;
| }
| label_0:
0x0001b35a mov.w r1, -1 | r1 = -1;
0x0001b35e mov r0, fp | r0 = fp;
0x0001b360 bl 0x1adb4 | r0 = fcn_0001adb4 (r0, r1);
0x0001b364 cmp r0, 1 |
0x0001b366 mov r4, r0 | r4 = r0;
0x0001b368 bgt 0x1b336 |
| }
0x0001b36a ldrb.w r0, [fp] | r0 = *(fp);
0x0001b36e cmp r0, 0x5c |
| if (r0 == 0x5c) {
0x0001b370 beq 0x1b3a6 | goto label_5;
| }
0x0001b372 movs r1, 0 | r1 = 0;
0x0001b374 bl 0x1b2c8 | r0 = fcn_0001b2c8 (r0, r1);
| if (r0 == 0) {
0x0001b378 cbz r0, 0x1b3a6 | goto label_5;
| }
0x0001b37a cmp sb, r6 |
| if (sb == r6) {
0x0001b37c beq 0x1b3c8 | goto label_2;
| }
0x0001b37e ldrb.w r3, [fp] | r3 = *(fp);
0x0001b382 adds r5, 1 | r5++;
0x0001b384 add.w fp, r7, r5 |
0x0001b388 strb.w r3, [r8, r6] | *((r8 + r6)) = r3;
0x0001b38c adds r6, 1 | r6++;
0x0001b38e ldrb r3, [r7, r5] | r3 = *((r7 + r5));
0x0001b390 cmp r3, 0 |
| if (r3 != 0) {
0x0001b392 bne 0x1b35a | goto label_0;
| }
| do {
| label_4:
0x0001b394 cmp sb, r6 |
| if (sb != r6) {
0x0001b396 beq 0x1b3c8 |
0x0001b398 movs r3, 0 | r3 = 0;
0x0001b39a mov r0, r3 | r0 = r3;
0x0001b39c strb.w r3, [r8, r6] | *((r8 + r6)) = r3;
0x0001b3a0 add sp, 0xc |
0x0001b3a2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x0001b3a6 sub.w r3, sb, r6 | r3 = sb - r6;
0x0001b3aa cmp r3, 3 |
| if (r3 < 3) {
0x0001b3ac bls 0x1b3c8 | goto label_2;
| }
0x0001b3ae ldrb.w r4, [fp] | r4 = *(fp);
0x0001b3b2 add.w r0, r8, r6 | r0 = r8 + r6;
0x0001b3b6 mov r3, sl | r3 = sl;
0x0001b3b8 mov.w r2, -1 | r2 = -1;
0x0001b3bc movs r1, 1 | r1 = 1;
0x0001b3be adds r6, 4 | r6 += 4;
0x0001b3c0 str r4, [sp] | *(sp) = r4;
0x0001b3c2 blx 0x384c | fcn_0000384c ();
0x0001b3c6 b 0x1b350 | goto label_1;
| }
| label_2:
0x0001b3c8 mvn r0, 0x15 | r0 = ~0x15;
0x0001b3cc add sp, 0xc |
0x0001b3ce pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x0001b3d2 mov r6, r3 | r6 = r3;
0x0001b3d4 b 0x1b394 |
| } while (1);
| }
[*] Function mmap used 24 times libudev.so.1.7.2