[*] Binary protection state of libudev.so.1.7.2
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function popen 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 @ 0x13990 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00013990 () | void fcn_00013990 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00013990 invalid |
0x00013994 ldrb.w ip, [r0, 0x27] | ip = *((r0 + 0x27));
0x00013998 mov r4, r0 | r4 = r0;
0x0001399a mov r6, r2 | r6 = r2;
0x0001399c ands r1, ip, 4 | r1 = ip & 4;
| if (r1 == ip) {
0x000139a0 beq 0x13a58 | goto label_12;
| }
0x000139a2 ldr r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x000139a4 cmp r5, r2 |
| if (r5 >= r2) {
0x000139a6 bhs 0x13a6a | goto label_13;
| }
| do {
0x000139a8 cmp r3, 0 |
| if (r3 != 0) {
0x000139aa bne 0x13a86 | goto label_14;
| }
0x000139ac cmp r1, 0 |
| if (r1 != 0) {
0x000139ae bne 0x13a80 | goto label_3;
| }
| label_2:
0x000139b0 ldr r3, [pc, 0x14c] |
0x000139b2 and r1, ip, 3 | r1 = ip & 3;
0x000139b6 ubfx r2, ip, 3, 3 | r2 = (ip >> 3) & ((1 << 3) - 1);
0x000139ba add r3, pc | r3 = 0x274be;
0x000139bc add.w r3, r3, r1, lsl 4 | r3 += (r1 << 4);
0x000139c0 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| label_0:
0x000139c2 cmp r3, r2 |
| if (r3 < r2) {
0x000139c4 bls 0x13abc | goto label_15;
| }
0x000139c6 and ip, ip, 3 |
0x000139ca cmp.w ip, 1 |
| if (ip == 1) {
0x000139ce bne 0x13a1c |
0x000139d0 mov.w r3, -1 | r3 = -1;
0x000139d4 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x000139d6 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x000139d8 adds r1, r3, 1 | r1 = r3 + 1;
0x000139da str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
| if (r1 != r3) {
0x000139dc beq 0x13a0e |
0x000139de ldrb.w ip, [r4, 0x27] | ip = *((r4 + 0x27));
0x000139e2 ldr r1, [pc, 0x120] |
0x000139e4 tst.w ip, 4 |
0x000139e8 and ip, ip, 3 |
0x000139ea lsrs r3, r0, 0x10 | r3 = r0 >> 0x10;
0x000139ec add r1, pc | r1 = 0x274f6;
0x000139ee it ne |
| if (r3 == r0) {
0x000139f0 ldrne r2, [r4, 4] | r2 = *((r4 + 4));
| }
0x000139f2 add.w r1, r1, ip, lsl 4 | r1 += (ip << 4);
0x000139f6 it eq |
| if (r3 != r0) {
0x000139f8 addeq r2, r4, 4 | r2 = r4 + 4;
| }
0x000139fa ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x000139fc mla r3, r1, r3, r2 | __asm ("mla r3, r1, r3, r2");
0x00013a00 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00013a02 adds r2, 1 | r2++;
0x00013a04 itt eq |
| if (r2 != 1) {
0x00013a06 mvneq r2, 3 | r2 = ~3;
| }
| if (r2 == 1) {
0x00013a0a str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
| if (r2 != 1) {
0x00013a0c bne 0x13ae8 | goto label_16;
| }
| }
0x00013a0e ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x00013a10 mvn r3, 3 | r3 = ~3;
0x00013a14 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00013a16 adds r2, 1 | r2++;
0x00013a18 it eq |
| if (r2 == 1) {
0x00013a1a streq r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| goto label_17;
| }
| }
| label_17:
0x00013a1c mov r2, r6 | r2 = r6;
0x00013a1e mov r1, r5 | r1 = r5;
0x00013a20 mov r0, r4 | r0 = r4;
0x00013a22 bl 0x13424 | r0 = fcn_00013424 (r0, r1, r2, r3);
0x00013a26 cmp r0, 0 |
| if (r0 != 0) {
0x00013a28 bne 0x13ad2 | goto label_18;
| }
0x00013a2a ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x00013a2e movs r0, 1 | r0 = 1;
0x00013a30 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00013a32 iteee mi |
| if (r2 >= r3) {
0x00013a34 ldrmi r3, [r4, 0x18] | r3 = *((r4 + 0x18));
| }
| if (r2 >= r3) {
0x00013a36 ubfxpl r2, r3, 3, 3 | __asm ("ubfxpl r2, r3, 3, 3");
| }
| if (r2 < r3) {
0x00013a3a addpl r2, 1 | r2++;
| }
| if (r2 >= r3) {
0x00013a3c bfi r3, r2, 3, 3 | value_0 = BIT_MASK (3, 3);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
| }
0x00013a40 itet mi |
| if (r2 >= r3) {
0x00013a42 addmi r3, 1 | r3++;
| }
| if (r2 < r3) {
0x00013a44 strbpl r3, [r4, 0x27] | *((r4 + 0x27)) = r3;
| }
| if (r2 >= r3) {
0x00013a46 addmi r0, 0x27 | r0 += 0x27;
| }
0x00013a48 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00013a4a ldrb.w r3, [r4, 0x27] | r3 = *((r4 + 0x27));
0x00013a4e orr r3, r3, 0x80 | r3 |= 0x80;
0x00013a52 strb.w r3, [r4, 0x27] | *((r4 + 0x27)) = r3;
| label_1:
0x00013a56 pop {r4, r5, r6, pc} |
| label_12:
0x00013a58 ldr r2, [pc, 0xac] |
0x00013a5a and r0, ip, 3 | r0 = ip & 3;
0x00013a5e add r2, pc | r2 = 0x2756a;
0x00013a60 add.w r2, r2, r0, lsl 4 | r2 += (r0 << 4);
0x00013a64 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00013a66 cmp r5, r2 |
0x00013a68 blo 0x139a8 |
| } while (r5 <= r2);
| label_13:
0x00013a6a ldr r1, [pc, 0xa0] |
0x00013a6c movw r2, 0x3f5 | r2 = 0x3f5;
0x00013a70 ldr r3, [pc, 0x9c] |
0x00013a72 ldr r0, [pc, 0xa0] |
0x00013a74 add r1, pc | r1 = 0x27586;
0x00013a76 add r3, pc | r3 = 0x2758a;
0x00013a78 adds r1, 7 | r1 += 7;
0x00013a7a add r0, pc | r0 = 0x27594;
0x00013a7c bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_3:
0x00013a80 ldrd r2, r3, [r4, 0x18] | __asm ("ldrd r2, r3, [r4, 0x18]");
0x00013a84 b 0x139c2 | goto label_0;
| label_14:
0x00013a86 movs r1, 1 | r1 = 1;
0x00013a88 mov r0, r4 | r0 = r4;
0x00013a8a bl 0x135e0 | r0 = fcn_000135e0 (r0, r1);
0x00013a8e cmp r0, 0 |
| if (r0 < 0) {
0x00013a90 blt 0x13a56 | goto label_1;
| }
| if (r0 != 0) {
0x00013a92 bne 0x13aa2 | goto label_19;
| }
0x00013a94 ldrb.w ip, [r4, 0x27] | ip = *((r4 + 0x27));
0x00013a98 and r1, ip, 4 | r1 = ip & 4;
0x00013a9a lsls r4, r0, 4 | r4 = r0 << 4;
0x00013a9c cmp r1, 0 |
| if (r1 == 0) {
0x00013a9e beq 0x139b0 | goto label_2;
| }
0x00013aa0 b 0x13a80 | goto label_3;
| label_19:
0x00013aa2 ldr r1, [r6] | r1 = *(r6);
0x00013aa4 mov r0, r4 | r0 = r4;
0x00013aa6 bl 0x12f20 | fcn_00012f20 (r0, r1);
0x00013aaa ldrb.w ip, [r4, 0x27] | ip = *((r4 + 0x27));
0x00013aae mov r5, r0 | r5 = r0;
0x00013ab0 and r1, ip, 4 | r1 = ip & 4;
0x00013ab4 cmp r1, 0 |
| if (r1 == 0) {
0x00013ab6 beq.w 0x139b0 | goto label_2;
| }
0x00013aba b 0x13a80 | goto label_3;
| label_15:
0x00013abc ldr r1, [pc, 0x58] |
0x00013abe mov.w r2, 0x400 | r2 = 0x400;
0x00013ac2 ldr r3, [pc, 0x58] |
0x00013ac4 ldr r0, [pc, 0x58] |
0x00013ac6 add r1, pc | r1 = 0x275e2;
0x00013ac8 add r3, pc | r3 = 0x275ea;
0x00013aca adds r1, 7 | r1 += 7;
0x00013acc add r0, pc | r0 = 0x275f0;
0x00013ace bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_18:
0x00013ad2 ldr r1, [pc, 0x50] |
0x00013ad4 movw r2, 0x415 | r2 = 0x415;
0x00013ad6 tst r5, r2 |
0x00013ad8 ldr r3, [pc, 0x4c] |
0x00013ada ldr r0, [pc, 0x50] |
0x00013adc add r1, pc | r1 = 0x27606;
0x00013ade add r3, pc | r3 = 0x2760a;
0x00013ae0 adds r1, 7 | r1 += 7;
0x00013ae2 add r0, pc | r0 = 0x27614;
0x00013ae4 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_16:
0x00013ae8 ldr r1, [pc, 0x44] |
0x00013aea movw r2, 0x40c | r2 = 0x40c;
0x00013aec tst r4, r1 |
0x00013aee ldr r3, [pc, 0x44] |
0x00013af0 ldr r0, [pc, 0x44] |
0x00013af2 add r1, pc | r1 = 0x27626;
0x00013af4 add r3, pc | r3 = 0x2762e;
0x00013af6 adds r1, 7 | r1 += 7;
0x00013af8 add r0, pc | r0 = 0x27634;
0x00013afa bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
0x00013afe nop |
0x00013b00 b 0x13d20 |
0x00013d20 mov r6, r1 | r6 = r1;
0x00013d22 ldr r3, [pc, 0x27c] |
0x00013d24 and r2, r7, 3 | r2 = r7 & 3;
0x00013d28 ands sb, r7, 4 | sb = r7 & 4;
0x00013d2c add r3, pc | r3 = 0x27cd2;
0x00013d2e add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00013d32 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00013d34 str r2, [sp] | *(sp) = r2;
| if (sb == r7) {
0x00013d36 beq 0x13d88 | goto label_20;
| }
0x00013d38 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00013d3a ldr.w sl, [r0, 0x1c] | sl = *((r0 + 0x1c));
0x00013d3e str r3, [sp, 4] | var_4h = r3;
0x00013d40 mla r8, r2, sl, r3 | __asm ("mla r8, r2, sl, r3");
0x00013d44 ldrb.w r3, [r8, r1] | r3 = *((r8 + r1));
0x00013d48 cmp r3, 0xff |
| if (r3 == 0xff) {
0x00013d4a beq 0x13d9e | goto label_21;
| }
| label_4:
0x00013d4c add.w fp, r6, 1 |
0x00013d50 mov r1, sl | r1 = sl;
0x00013d52 mov r0, fp | r0 = fp;
0x00013d54 bl 0x1b6ac | fcn_0001b6ac (r0, r1, r2);
0x00013d58 b 0x13d62 |
| while (r1 != r6) {
0x00013d5a adds r0, r1, 1 | r0 = r1 + 1;
0x00013d5c mov r1, sl | r1 = sl;
0x00013d5e bl 0x1b6ac | fcn_0001b6ac (r0, r1, r2);
0x00013d62 ldrb.w r3, [r8, r1] | r3 = *((r8 + r1));
0x00013d66 subs r3, 1 | r3--;
0x00013d68 uxtb r3, r3 | r3 = (int8_t) r3;
0x00013d6a cmp r3, 0xfd |
| if (r3 > 0xfd) {
0x00013d6c bhi 0x13db4 | goto label_22;
| }
0x00013d6e cmp r1, r6 |
0x00013d70 bne 0x13d5a |
| }
0x00013d72 ldr r1, [pc, 0x230] |
0x00013d74 movw r2, 0x21e | r2 = 0x21e;
0x00013d78 ldr r3, [pc, 0x22c] |
0x00013d7a ldr r0, [pc, 0x230] |
0x00013d7c add r1, pc | r1 = 0x27d26;
0x00013d7e add r3, pc | r3 = 0x27d2a;
0x00013d80 adds r1, 7 | r1 += 7;
0x00013d82 add r0, pc | r0 = 0x27d34;
0x00013d84 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_20:
0x00013d88 ldr.w sl, [r3, 0xc] | sl = *((r3 + 0xc));
0x00013d8c adds r3, r0, 4 | r3 = r0 + 4;
0x00013d8e ldr r2, [sp] | r2 = *(sp);
0x00013d90 str r3, [sp, 4] | var_4h = r3;
0x00013d92 mla r8, r2, sl, r3 | __asm ("mla r8, r2, sl, r3");
0x00013d96 ldrb.w r3, [r8, r1] | r3 = *((r8 + r1));
0x00013d9a cmp r3, 0xff |
| if (r3 != 0xff) {
0x00013d9c bne 0x13d4c | goto label_4;
| }
| label_21:
0x00013d9e ldr r1, [pc, 0x210] |
0x00013da0 movw r2, 0x20d | r2 = 0x20d;
0x00013da4 ldr r3, [pc, 0x20c] |
0x00013da6 ldr r0, [pc, 0x210] |
0x00013da8 add r1, pc | r1 = 0x27d5e;
0x00013daa add r3, pc | r3 = 0x27d62;
0x00013dac adds r1, 7 | r1 += 7;
0x00013dae add r0, pc | r0 = 0x27d6c;
0x00013db0 bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_22:
0x00013db4 and r3, r7, 3 | r3 = r7 & 3;
0x00013db8 mov r4, r1 | r4 = r1;
0x00013dba cmp r3, 1 |
| if (r3 == 1) {
0x00013dbc beq 0x13e92 | goto label_23;
| }
| label_8:
0x00013dbe cmp.w sb, 0 |
| if (sb != 0) {
0x00013dc2 bne 0x13e8e | goto label_9;
| }
0x00013dc4 ldr r3, [pc, 0x1f4] |
0x00013dc6 and r2, r7, 3 | r2 = r7 & 3;
0x00013dca add r3, pc | r3 = 0x27d8a;
0x00013dcc add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00013dce asrs r2, r0, 0xc | r2 = r0 >> 0xc;
0x00013dd0 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| label_7:
0x00013dd2 mov r0, fp | r0 = fp;
0x00013dd4 bl 0x1b6ac | fcn_0001b6ac (r0, r1, r2);
0x00013dd8 cmp r4, r1 |
0x00013dda mov sl, r1 | sl = r1;
| if (r4 == r1) {
0x00013ddc beq.w 0x13f9a | goto label_24;
| }
0x00013de0 ldr r3, [pc, 0x1dc] |
0x00013de2 ldrb.w r0, [r8, sl] | r0 = *((r8 + sl));
0x00013de6 ldr.w fp, [pc, 0x1dc] |
0x00013dea add r3, pc | r3 = 0x27dae;
0x00013dec str r3, [sp] | *(sp) = r3;
0x00013dee cmp r0, 0xff |
0x00013df0 ldr r3, [pc, 0x1d4] |
0x00013df2 add fp, pc | fp = 0x27dbc;
0x00013df4 add r3, pc | r3 = 0x27dc0;
0x00013df6 str r3, [sp, 4] | var_4h = r3;
| if (r0 == 0xff) {
0x00013df8 beq 0x13e68 | goto label_25;
| }
| do {
0x00013dfa cmp r0, 0xfc |
| if (r0 > 0xfc) {
0x00013dfc bhi 0x13e6c | goto label_26;
| }
0x00013dfe cmp r0, 0 |
| if (r0 == 0) {
0x00013e00 beq 0x13e78 | goto label_27;
| }
| label_6:
0x00013e02 subs r7, r0, 1 | r7 = r0 - 1;
0x00013e04 cmp r7, 0xfd |
0x00013e06 it hs |
| if (r7 < 0xfd) {
0x00013e08 movhs r7, 0xfd | r7 = 0xfd;
| }
0x00013e0a uxtb r7, r7 | r7 = (int8_t) r7;
| label_5:
0x00013e0c mov r3, r6 | r3 = r6;
0x00013e0e mov r2, sl | r2 = sl;
0x00013e10 movs r1, 0 | r1 = 0;
0x00013e12 mov r0, r5 | r0 = r5;
0x00013e14 bl 0x132a0 | fcn_000132a0 (r0, r1, r2, r3);
0x00013e18 ldrb.w r2, [r5, 0x27] | r2 = *((r5 + 0x27));
0x00013e1a movs r0, 0x27 | r0 = 0x27;
0x00013e1c lsls r3, r2, 0x1d | r3 = r2 << 0x1d;
| if (r3 >= r2) {
0x00013e1e bpl 0x13ef8 | goto label_28;
| }
0x00013e20 ldr r3, [sp] | r3 = *(sp);
0x00013e22 and r2, r2, 3 | r2 &= 3;
0x00013e26 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00013e28 add.w r2, r3, r2, lsl 4 | r2 = r3 + (r2 << 4);
0x00013e2c ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00013e2e ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
| label_10:
0x00013e30 mla r2, r0, r2, r1 | __asm ("mla r2, r0, r2, r1");
0x00013e34 add.w r0, sl, 1 | r0 = sl + 1;
0x00013e38 strb r7, [r2, r6] | *((r2 + r6)) = r7;
0x00013e3a mov r6, sl | r6 = sl;
0x00013e3c ldrb.w sb, [r5, 0x27] | sb = *((r5 + 0x27));
0x00013e40 ands r7, sb, 4 | r7 = sb & 4;
0x00013e44 ittet eq |
| if (r7 != sb) {
0x00013e46 ldreq r2, [sp, 4] | r2 = var_4h;
| }
| if (r7 != sb) {
0x00013e48 andeq r3, sb, 3 | r3 = sb & 3;
| }
| if (r7 != sb) {
0x00013e4c ldreq r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
| }
| if (r7 == sb) {
0x00013e4e add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
| }
0x00013e52 it eq |
| if (r7 != sb) {
0x00013e54 ldreq r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| }
0x00013e56 bl 0x1b6ac | fcn_0001b6ac (r0, r1, r2);
0x00013e58 stc2 p2, c4, [sb], -0x230 | __asm ("stc2 p2, c4, [sb], -0x230");
| if (r7 == sb) {
0x00013e5c beq 0x13f08 | goto label_29;
| }
0x00013e5e mov sl, r1 | sl = r1;
0x00013e60 ldrb.w r0, [r8, sl] | r0 = *((r8 + sl));
0x00013e62 movs r2, r1 | r2 = r1;
0x00013e64 cmp r0, 0xff |
0x00013e66 bne 0x13dfa |
| } while (r0 != 0xff);
| label_25:
0x00013e68 movs r7, 0xfd | r7 = 0xfd;
0x00013e6a b 0x13e0c | goto label_5;
| label_26:
0x00013e6c mov r1, sl | r1 = sl;
0x00013e6e mov r0, r5 | r0 = r5;
0x00013e70 bl 0x130f4 | r0 = fcn_000130f4 (r0, r1);
0x00013e74 cmp r0, 0 |
| if (r0 != 0) {
0x00013e76 bne 0x13e02 | goto label_6;
| }
| label_27:
0x00013e78 ldr r1, [pc, 0x150] |
0x00013e7a mov.w r2, 0x234 | r2 = 0x234;
0x00013e7e ldr r3, [pc, 0x150] |
0x00013e80 ldr r0, [pc, 0x150] |
0x00013e82 add r1, pc | r1 = 0x27e52;
0x00013e84 add r3, pc | r3 = 0x27e5a;
0x00013e86 adds r1, 7 | r1 += 7;
0x00013e88 add r0, pc | r0 = 0x27e60;
0x00013e8a bl 0x16594 | fcn_00016594 (r0, r1, r2, r3, r4);
| label_9:
0x00013e8e ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x00013e90 b 0x13dd2 | goto label_7;
| label_23:
0x00013e92 ldrd r3, r0, [sp] | __asm ("ldrd r3, r0, [sp]");
0x00013e96 mla r3, r3, r6, r0 | __asm ("mla r3, r3, r6, r0");
0x00013e9a ldrd r2, r1, [r3, 8] | __asm ("ldrd r2, r1, [r3, 8]");
0x00013e9e cmp.w r2, -1 |
0x00013ea2 itett ne |
| if (r2 == -1) {
0x00013ea4 ldrne r7, [sp] | r7 = *(sp);
| }
| if (r2 != -1) {
0x00013ea6 streq r1, [r5, 0x30] | *((r5 + 0x30)) = r1;
| }
| if (r2 != -1) {
0x00013ea8 mlane r2, r7, r2, r0 | __asm ("mlane r2, r7, r2, r0");
| }
| if (r2 != -1) {
0x00013eac str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
| }
0x00013eae it ne |
| if (r2 == -1) {
0x00013eb0 ldrbne r7, [r5, 0x27] | r7 = *((r5 + 0x27));
| }
0x00013eb2 strb r7, [r4] | *(r4) = r7;
0x00013eb4 ldrd r0, r2, [r3, 8] | __asm ("ldrd r0, r2, [r3, 8]");
0x00013eb8 it ne |
| if (r2 == -1) {
0x00013eba andne sb, r7, 4 | sb = r7 & 4;
| }
0x00013ebc lsrs r4, r0, 4 | r4 = r0 >> 4;
0x00013ebe adds r1, r2, 1 | r1 = r2 + 1;
0x00013ec0 it eq |
| if (r1 == r2) {
0x00013ec2 streq r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
| goto label_30;
| }
| if (r1 == r2) {
| label_30:
0x00013ec4 beq.w 0x13dbe | goto label_8;
| }
0x00013ec8 adds r3, r5, 4 | r3 = r5 + 4;
0x00013eca cmp.w sb, 0 |
| if (sb != 0) {
0x00013ece beq 0x13ed2 |
0x00013ed0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
| }
0x00013ed2 ldr r1, [pc, 0x104] |
0x00013ed4 and r7, r7, 3 | r7 &= 3;
0x00013ed8 add r1, pc | r1 = 0x27eb6;
0x00013eda add.w r1, r1, r7, lsl 4 | r1 += (r7 << 4);
0x00013ede ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00013ee0 mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
0x00013ee4 str r0, [r3, 8] | *((r3 + 8)) = r0;
0x00013ee6 ldrb.w r7, [r5, 0x27] | r7 = *((r5 + 0x27));
0x00013eea and sb, r7, 4 | sb = r7 & 4;
0x00013eee cmp.w sb, 0 |
| if (sb == 0) {
0x00013ef2 beq.w 0xfffd5dc4 | void (*0xfffd5dc4)() ();
| }
0x00013ef6 b 0x13e8e | goto label_9;
| label_28:
0x00013ef8 and r2, r2, 3 | r2 &= 3;
0x00013efc adds r1, r5, 4 | r1 = r5 + 4;
0x00013efe add.w r2, fp, r2, lsl 4 | r2 = fp + (r2 << 4);
0x00013f02 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00013f04 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00013f06 b 0x13e30 | goto label_10;
| label_29:
0x00013f08 mov r3, sb | r3 = sb;
0x00013f0a mov sb, r7 | sb = r7;
0x00013f0c mov r7, r3 | r7 = r3;
| label_11:
0x00013f0e ldr r3, [pc, 0xcc] |
0x00013f10 and r7, r7, 3 | r7 &= 3;
0x00013f12 lsls r3, r0, 0x1c | r3 = r0 << 0x1c;
0x00013f14 lsls r7, r7, 4 | r7 <<= 4;
0x00013f16 add r3, pc | r3 = 0x27ef8;
0x00013f18 add r3, r7 | r3 += r7;
0x00013f1a ldr r2, [r3, 4] | r2 = *(0x27efc);
| if (r2 != 0) {
0x00013f1c cbz r2, 0x13f48 |
0x00013f1e adds r0, r5, 4 | r0 = r5 + 4;
0x00013f20 cmp.w sb, 0 |
| if (sb != 0) {
0x00013f24 beq 0x13f28 |
0x00013f26 ldr r0, [r5, 4] | r0 = *((r5 + 4));
| }
0x00013f28 mla r0, sl, r2, r0 | __asm ("mla r0, sl, r2, r0");
0x00013f2c movs r1, 0 | r1 = 0;
0x00013f2e blx 0x3898 | fcn_00003898 ();
0x00013f32 ldrb.w sb, [r5, 0x27] | sb = *((r5 + 0x27));
0x00013f36 ldr r3, [pc, 0xa8] |
0x00013f38 and r7, sb, 3 | r7 = sb & 3;
0x00013f3c and sb, sb, 4 | sb &= 4;
0x00013f40 lsls r7, r7, 4 | r7 <<= 4;
0x00013f42 add r3, pc | r3 = 0x27f28;
0x00013f44 add r3, r7 | r3 += r7;
0x00013f46 ldr r2, [r3, 4] | r2 = *(0x27f2c);
| }
0x00013f48 cmp.w sb, 0 |
| if (sb == 0) {
0x00013f4c beq 0x13f8e | goto label_31;
| }
0x00013f4e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00013f50 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
| do {
0x00013f52 mla r3, r2, r1, r3 | __asm ("mla r3, r2, r1, r3");
0x00013f56 movs r2, 0xff | r2 = 0xff;
0x00013f58 strb.w r2, [r3, sl] | *((r3 + sl)) = r2;
0x00013f5c ldrb.w r3, [r5, 0x27] | r3 = *((r5 + 0x27));
0x00013f60 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x00013f62 iteee mi |
| if (r2 >= r3) {
0x00013f64 ldrmi r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| }
| if (r2 >= r3) {
0x00013f66 ubfxpl r2, r3, 3, 3 | __asm ("ubfxpl r2, r3, 3, 3");
| }
| if (r2 < r3) {
0x00013f6a addpl r2, 7 | r2 += 7;
| }
| if (r2 >= r3) {
0x00013f6c bfi r3, r2, 3, 3 | value_2 = BIT_MASK (3, 3);
| value_3 = r2 & value_2;
| value_2 = ~value_2;
| r3 &= value_2;
| r3 |= value_3;
| }
0x00013f70 itet mi |
| if (r2 >= r3) {
0x00013f72 addmi r3, r3, -1 | r3 += -1;
| }
| if (r2 >= r3) {
0x00013f76 strbmi r3, [r5, 0x27] | *((r5 + 0x27)) = r3;
| }
| if (r2 < r3) {
0x00013f7a str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
| }
0x00013f7c ldrb.w r3, [r5, 0x27] | r3 = *((r5 + 0x27));
0x00013f80 orr r3, r3, 0x80 | r3 |= 0x80;
0x00013f84 strb.w r3, [r5, 0x27] | *((r5 + 0x27)) = r3;
0x00013f88 add sp, 0xc |
0x00013f8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_31:
0x00013f8e ldr r1, [pc, 0x54] |
0x00013f90 adds r3, r5, 4 | r3 = r5 + 4;
0x00013f92 add r1, pc |
0x00013f94 add r1, r7 | r1 += r7;
0x00013f96 ldr r1, [r1, 0xc] | r1 = *(0x27f88);
0x00013f98 b 0x13f52 |
| } while (1);
| label_24:
0x00013f9a mov sl, r6 | sl = r6;
0x00013f9c b 0x13f0e | goto label_11;
| }
[*] Function popen used 1 times libudev.so.1.7.2