[*] Binary protection state of libc.so.6
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function sprintf tear down of libc.so.6
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x27eac */
| #include <stdint.h>
|
; (fcn) fcn.00027eac () | void fcn_00027eac (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int32_t var_ch;
| int32_t var_ch_2;
| int16_t var_14h;
| char * src;
| char * dest;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00027eac push {r7, lr} |
0x00027eae mov r6, r0 | r6 = r0;
0x00027eb0 sub sp, 0x20 |
0x00027eb2 ldr r4, [pc, 0xdc] |
0x00027eb4 mov r8, r1 | r8 = r1;
0x00027eb6 movs r0, 1 | r0 = 1;
0x00027eb8 movs r1, 0 | r1 = 0;
0x00027eba mov r5, r2 | r5 = r2;
0x00027ebc mov r7, r3 | r7 = r3;
0x00027ebe ldr.w sb, [sp, 0x28] | sb = *(arg_28h);
0x00027ec2 bl 0x5f740 | pthread_setcancelstate ();
0x00027ec6 ldr r3, [pc, 0xcc] | r3 = *(0x27f96);
0x00027ec8 add r4, pc | r4 = 0x4fe5e;
0x00027eca ldr r3, [r4, r3] | r3 = *(0x4fe5e);
0x00027ecc ldr r2, [r3] | r2 = *(0x4fe5e);
0x00027ece ldrb r3, [r2] | r3 = *(r2);
0x00027ed0 cmp r3, 0 |
| if (r3 == 0) {
0x00027ed2 beq 0x27f6c | goto label_3;
| }
0x00027ed4 ldr r3, [pc, 0xc0] |
0x00027ed6 add r3, pc | r3 = 0x4fe72;
0x00027ed8 cmp.w sb, 0 |
| if (sb == 0) {
0x00027edc beq 0x27f76 | goto label_4;
| }
| label_0:
0x00027ede ldr r1, [pc, 0xbc] |
0x00027ee0 add r1, pc | r1 = 0x4fe82;
| label_1:
0x00027ee2 str r5, [sp] | *(sp) = r5;
0x00027ee4 add r5, sp, 0x1c | r5 += dest;
0x00027ee6 strd r1, r8, [sp, 0xc] | __asm ("strd r1, r8, [var_ch]");
0x00027eea add r0, sp, 0x18 | r0 += src;
0x00027eec mov r1, r6 | r1 = r6;
0x00027eee strd r7, sb, [sp, 4] | __asm ("strd r7, sb, [var_4h]");
0x00027ef2 str r5, [sp, 0x14] | var_14h = r5;
0x00027ef4 bl 0x38ce0 | r0 = asprintf ()
0x00027ef8 cmp r0, 0 |
| if (r0 < 0) {
0x00027efa blt 0x27f80 | goto label_5;
| }
0x00027efc ldr r1, [pc, 0xa0] |
0x00027efe movs r0, 0 | r0 = 0;
0x00027f00 ldr r2, [sp, 0x18] | r2 = src;
0x00027f02 add r1, pc | r1 = 0x4fea6;
0x00027f04 bl 0x4bb90 | fcn_0004bb90 (r0);
0x00027f08 ldr r3, [pc, 0x98] | r3 = *(0x27fa4);
0x00027f0a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00027f0c ldr r0, [r3] | r0 = *(0x27fa4);
0x00027f0e bl 0x4cbcc | fflush ();
0x00027f12 ldr r3, [pc, 0x94] | r3 = *(0x27faa);
0x00027f14 movs r0, 0 | r0 = 0;
0x00027f16 ldr r1, [sp, 0x1c] | r1 = dest;
0x00027f18 mov.w r2, -1 | r2 = -1;
0x00027f1c ldr r4, [r4, r3] | r4 = *((r4 + r3));
0x00027f1e movs r3, 0x22 | r3 = 0x22;
0x00027f20 strd r2, r0, [sp] | __asm ("strd r2, r0, [sp]");
0x00027f24 movs r2, 3 | r2 = 3;
0x00027f26 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x00027f28 add r1, r4 | r1 += r4;
0x00027f2a rsbs r4, r4, 0 | r4 -= ;
0x00027f2c ands r1, r4 | r1 &= r4;
0x00027f2e str r1, [sp, 0x1c] | dest = r1;
0x00027f30 bl 0xa9000 | r0 = mmap ();
0x00027f34 adds r3, r0, 1 | r3 = r0 + 1;
0x00027f36 mov r4, r0 | r4 = r0;
| if (r3 == r0) {
0x00027f38 beq 0x27f62 | goto label_6;
| }
0x00027f3a ldr r3, [sp, 0x1c] | r3 = dest;
0x00027f3c ldr r1, [sp, 0x18] | r1 = src;
0x00027f3e str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x00027f42 bl 0x6a5a0 | strcpy (r0, r1);
0x00027f46 ldr r3, [pc, 0x64] |
0x00027f48 add r3, pc | r3 = 0x4fefa;
| do {
0x00027f4a ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x00027f4e strex r2, r4, [r3] | __asm ("strex r2, r4, [r3]");
0x00027f52 cmp r2, 0 |
0x00027f54 bne 0x27f4a |
| } while (r2 != 0);
0x00027f56 dmb ish | __asm ("dmb ish");
| if (r0 != 0) {
0x00027f5a cbz r0, 0x27f62 |
0x00027f5c ldr r1, [r0] | r1 = *(r0);
0x00027f5e bl 0xa90c0 | munmap ();
| }
| label_6:
0x00027f62 ldr r0, [sp, 0x18] | r0 = src;
0x00027f64 blx 0x1ded4 | fcn_0001ded4 ();
| label_2:
0x00027f68 bl 0x1df88 | abort ();
| label_3:
0x00027f6c ldr r3, [pc, 0x40] |
0x00027f6e add r3, pc | r3 = 0x4ff22;
0x00027f70 cmp.w sb, 0 |
| if (sb != 0) {
0x00027f74 bne 0x27ede | goto label_0;
| }
| label_4:
0x00027f76 ldr.w sb, [pc, 0x3c] | sb = *(0x00027fb4);
0x00027f7a add sb, pc | sb += pc;
0x00027f7c mov r1, sb | r1 = sb;
0x00027f7e b 0x27ee2 | goto label_1;
| label_5:
0x00027f80 ldr r1, [pc, 0x34] |
0x00027f82 movs r2, 0x12 | r2 = 0x12;
0x00027f84 movs r0, 2 | r0 = 2;
0x00027f86 add r1, pc | r1 = 0x4ff42;
0x00027f88 bl 0x9e6c0 | write (r0, r1, r2);
0x00027f8c b 0x27f68 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x28e64 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00028e64 () | void fcn_00028e64 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int32_t var_0h_3;
| int32_t var_8h_2;
| char * src;
| int32_t var_10h;
| size_t n;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_20h_2;
| int32_t var_28h;
| int32_t var_2ch;
| char * s2;
| int32_t var_34h;
| int32_t var_38h;
| int16_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_50h;
| int32_t var_5ch;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00028e64 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00028e68 sub sp, 0x6c |
0x00028e6a ldr.w fp, [pc, 0x308] | fp = *(0x00029174);
0x00028e6e movs r4, 0 | r4 = 0;
0x00028e70 add r7, sp, 8 | r7 += var_8h;
0x00028e72 mov sl, r1 | sl = r1;
0x00028e74 str r4, [r7, 0x38] | var_38h = r4;
0x00028e76 add fp, pc |
0x00028e78 strd r2, r3, [r7, 0x20] | __asm ("strd r2, r3, [var_20h]");
| if (r1 != 0) {
0x00028e7c cbz r1, 0x28ea8 |
0x00028e7e ldr.w r2, [r7, 0x8c] | r2 = *((r7 + 0x8c));
0x00028e82 mov sb, r0 | sb = r0;
0x00028e84 mov r0, r3 | r0 = r3;
0x00028e86 sub.w r3, r2, 6 | r3 = r2 - 6;
0x00028e8a clz r3, r3 | r3 &= r3;
0x00028e8e lsrs r3, r3, 5 | r3 >>= 5;
0x00028e90 cmp r2, 0xc |
0x00028e92 it hi |
| if (r2 <= 0xc) {
0x00028e94 orrhi r3, r3, 1 | r3 |= 1;
| }
| if (r3 == 0) {
0x00028e98 cbz r3, 0x28eb4 | goto label_13;
| }
0x00028e9a ldr.w r2, [r7, 0x88] | r2 = *((r7 + 0x88));
0x00028e9e cmp r2, 1 |
0x00028ea0 it ne |
| if (r2 != 1) {
0x00028ea2 cmpne r0, r4 | __asm ("cmpne r0, r4");
| }
| if (r2 != 1) {
0x00028ea4 bne.w 0x2911e | goto label_14;
| }
| }
| label_2:
0x00028ea8 mov r3, sl | r3 = sl;
| label_0:
0x00028eaa mov r0, r3 | r0 = r3;
0x00028eac adds r7, 0x64 | r7 += 0x64;
0x00028eae mov sp, r7 |
0x00028eb0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00028eb4 ldr r3, [pc, 0x2b0] |
0x00028eb6 mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x00028eba ldr r0, [pc, 0x2bc] |
0x00028ebc add r3, pc |
0x00028ebe ldr r3, [r3] | r3 = *(0x52028);
0x00028ec0 str r2, [r7, 0x18] | var_18h = r2;
0x00028ec2 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00028ec4 add r0, pc | r0 = 0x52042;
0x00028ec6 str r3, [r7, 0x1c] | var_1ch = r3;
0x00028ec8 bl 0x5e7c4 | pthread_rwlock_rdlock ();
0x00028ecc ldr r0, [pc, 0x2ac] |
0x00028ece add r0, pc | r0 = 0x5204e;
0x00028ed0 adds r0, 0x1c | r0 += 0x1c;
0x00028ed2 bl 0x5e7c4 | pthread_rwlock_rdlock ();
0x00028ed6 cmp.w sb, 0 |
| if (sb == 0) {
0x00028eda beq.w 0x291f4 | goto label_15;
| }
| label_8:
0x00028ede ldr r5, [pc, 0x2a0] |
0x00028ee0 ldr.w r3, [r7, 0x8c] | r3 = *((r7 + 0x8c));
0x00028ee4 ldr.w r0, [r7, 0x8c] | r0 = *((r7 + 0x8c));
0x00028ee8 add r5, pc | r5 = 0x5206e;
0x00028eea str.w sl, [r7, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x00028eee add.w r4, r5, 0x3c | r4 = r5 + 0x3c;
0x00028ef2 str r3, [r7, 0x44] | var_44h = r3;
0x00028ef4 movs r3, 0 | r3 = 0;
0x00028ef6 str.w sb, [r7, 0x40] | __asm ("str.w sb, [var_40h]");
0x00028efa str r3, [r7, 0x50] | var_50h = r3;
0x00028efc bl 0x27e0c | fcn_00027e0c (r0);
0x00028f00 str r0, [r7, 0xc] | src = r0;
0x00028f02 str r0, [r7, 0x48] | var_48h = r0;
0x00028f04 mov r0, r4 | r0 = r4;
0x00028f06 bl 0x5e7c4 | pthread_rwlock_rdlock ();
0x00028f0a ldr r2, [pc, 0x278] |
0x00028f0c mov r1, r5 | r1 = r5;
0x00028f0e add.w r0, r7, 0x40 | r0 += var_40h;
0x00028f12 add r2, pc | r2 = 0x5209c;
0x00028f14 bl 0xa9f78 | r0 = tfind ();
0x00028f18 mov r5, r0 | r5 = r0;
0x00028f1a str r0, [r7, 0x10] | var_10h = r0;
0x00028f1c mov r0, r4 | r0 = r4;
0x00028f1e bl 0x5f0ac | pthread_rwlock_unlock ();
| if (r5 != 0) {
0x00028f22 cbz r5, 0x28f36 |
0x00028f24 ldr r3, [pc, 0x260] |
0x00028f26 ldr r4, [r5] | r4 = *(r5);
0x00028f28 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x00028f2c ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00028f2e ldr r3, [r3] | r3 = *(0x29188);
0x00028f30 cmp r2, r3 |
| if (r2 == r3) {
0x00028f32 beq.w 0x29210 | goto label_16;
| }
| }
0x00028f36 ldr r3, [pc, 0x254] | r3 = *(0x2918e);
0x00028f38 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x00028f3c ldr r4, [r3] | r4 = *(0x2918e);
| if (r4 != 0) {
0x00028f3e cbnz r4, 0x28f4e | goto label_17;
| }
0x00028f40 b 0x2932c | goto label_18;
| if (r4 < 0) {
| do {
0x00028f42 blt.w 0x291fe | goto label_19;
| }
0x00028f46 ldr r4, [r4] | r4 = *(r4);
0x00028f48 cmp r4, 0 |
| if (r4 == 0) {
0x00028f4a beq.w 0x29208 | goto label_20;
| }
| label_17:
0x00028f4e add.w r1, r4, 0xc | r1 = r4 + 0xc;
0x00028f52 mov r0, sb | r0 = sb;
0x00028f54 bl 0x69790 | r0 = strcmp (r0, r1);
0x00028f58 subs r1, r0, 0 | r1 = r0 - 0;
0x00028f5a bne 0x28f42 |
| } while (r1 != r0);
0x00028f5c ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x00028f5e ldrb r3, [r6] | r3 = *(r6);
0x00028f60 str r6, [r7, 0x34] | var_34h = r6;
0x00028f62 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x00028f64 bne.w 0x2912a | goto label_21;
| }
| label_4:
0x00028f68 ldr r3, [pc, 0x224] |
0x00028f6a ldr.w r2, [r7, 0x8c] | r2 = *((r7 + 0x8c));
0x00028f6e add r3, pc | r3 = 0x52102;
0x00028f70 ldrb r6, [r3, r2] | r6 = *((r3 + r2));
0x00028f72 mov r0, r2 | r0 = r2;
0x00028f74 ldr r3, [pc, 0x21c] |
0x00028f76 add r3, pc | r3 = 0x5210e;
0x00028f78 add r6, r3 | r6 += r3;
0x00028f7a bl 0x27e0c | r0 = fcn_00027e0c (r0);
0x00028f7e ldrb r3, [r0] | r3 = *(r0);
0x00028f80 mov r8, r0 | r8 = r0;
0x00028f82 cmp r3, 0x43 |
| if (r3 == 0x43) {
0x00028f84 beq.w 0x29156 | goto label_22;
| }
| label_5:
0x00028f88 ldr r0, [pc, 0x20c] |
0x00028f8a add r0, pc | r0 = 0x52126;
0x00028f8c bl 0x2e8f0 | r0 = getenv (r0);
0x00028f90 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00028f92 cbz r0, 0x28f98 |
0x00028f94 ldrb r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x00028f96 cbnz r3, 0x28f9a | goto label_6;
| }
| }
0x00028f98 mov r5, r8 | r5 = r8;
| label_6:
0x00028f9a mov r0, sb | r0 = sb;
0x00028f9c bl 0x6ae40 | r0 = strlen ();
0x00028fa0 mov r8, r0 | r8 = r0;
0x00028fa2 mov r0, r6 | r0 = r6;
0x00028fa4 bl 0x6ae40 | strlen ();
0x00028fa8 mov r3, r8 | r3 = r8;
0x00028faa ldr r2, [pc, 0x1f0] |
0x00028fac adds r3, r0, r3 | r3 = r0 + r3;
0x00028fae mov r1, r6 | r1 = r6;
0x00028fb0 adds r3, 0xc | r3 += 0xc;
0x00028fb2 str.w r8, [r7, 0x14] | __asm ("str.w r8, [n]");
0x00028fb6 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00028fba add r2, pc | r2 = 0x5215c;
0x00028fbc sub.w sp, sp, r3 |
0x00028fc0 str r2, [r7, 0x30] | s2 = r2;
0x00028fc2 add r0, sp, 8 | r0 += var_8h;
0x00028fc4 add.w r2, r7, 0x3c | r2 += var_3ch;
0x00028fc8 str r2, [r7, 0x28] | var_28h = r2;
0x00028fca str r0, [r7, 0x2c] | var_2ch = r0;
0x00028fcc bl 0x6a590 | stpcpy ();
0x00028fd0 ldr r6, [r7, 0x14] | r6 = n;
0x00028fd2 movs r3, 0x2f | r3 = 0x2f;
0x00028fd4 mov r1, sb | r1 = sb;
0x00028fd6 strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x00028fda mov r2, r6 | r2 = r6;
0x00028fdc blx 0x6d540 | memcpy (r0, r1, r2);
0x00028fe0 ldr r2, [pc, 0x1bc] |
0x00028fe2 mov r3, r0 | r3 = r0;
0x00028fe4 add r2, pc | r2 = 0x52188;
0x00028fe6 ldr r0, [r2] | r0 = *(0x52188);
0x00028fe8 str r0, [r3, r6] | *((r3 + r6)) = r0;
0x00028fea mov r0, r5 | r0 = r5;
0x00028fec bl 0x6ae40 | r0 = strlen ();
0x00028ff0 add.w r3, r0, 8 | r3 = r0 + 8;
0x00028ff4 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00028ff8 sub.w sp, sp, r3 |
0x00028ffc add r6, sp, 8 | r6 += var_8h;
| do {
| label_1:
0x00028ffe ldrb r3, [r5] | r3 = *(r5);
0x00029000 cmp r3, 0x3a |
| if (r3 == 0x3a) {
0x00029002 beq.w 0x29162 | goto label_23;
| }
0x00029006 cmp r3, 0 |
| if (r3 != 0) {
0x00029008 bne.w 0x291b8 | goto label_24;
| }
0x0002900c movs r3, 0x43 | r3 = 0x43;
0x0002900e strh r3, [r6] | *(r6) = r3;
| label_7:
0x00029010 ldrb r3, [r6] | r3 = *(r6);
0x00029012 cmp r3, 0x43 |
| if (r3 == 0x43) {
0x00029014 bne 0x2901c |
0x00029016 ldrb r3, [r6, 1] | r3 = *((r6 + 1));
0x00029018 cmp r3, 0 |
| if (r3 == 0) {
0x0002901a beq 0x290ea | goto label_3;
| }
| }
0x0002901c ldr r1, [r7, 0x30] | r1 = s2;
0x0002901e mov r0, r6 | r0 = r6;
0x00029020 bl 0x69790 | r0 = strcmp (r0, r1);
0x00029024 cmp r0, 0 |
| if (r0 == 0) {
0x00029026 beq 0x290ea | goto label_3;
| }
0x00029028 ldr r2, [r7, 0x2c] | r2 = var_2ch;
0x0002902a mov r3, r4 | r3 = r4;
0x0002902c ldr r0, [r7, 0x34] | r0 = var_34h;
0x0002902e mov r1, r6 | r1 = r6;
0x00029030 bl 0x293e0 | r0 = fcn_000293e0 (r0, r1, r2, r3, r4);
0x00029034 mov r8, r0 | r8 = r0;
0x00029036 cmp r0, 0 |
0x00029038 beq 0x28ffe |
| } while (r0 == 0);
0x0002903a ldr r3, [r7, 0x28] | r3 = var_28h;
0x0002903c mov r2, sl | r2 = sl;
0x0002903e mov r1, r4 | r1 = r4;
0x00029040 str r3, [sp] | *(sp) = r3;
0x00029042 movs r3, 1 | r3 = 1;
0x00029044 bl 0x287f4 | r0 = fcn_000287f4 (r0, r1, r2, r3);
0x00029048 mov r3, r0 | r3 = r0;
0x0002904a cmp r0, 0 |
| if (r0 != 0) {
0x0002904c beq 0x290a6 |
0x0002904e adds r2, r0, 1 | r2 = r0 + 1;
| if (r2 == r0) {
0x00029050 beq 0x290ea | goto label_3;
| }
| label_11:
0x00029052 ldr r0, [r7, 0x38] | r0 = var_38h;
0x00029054 str r3, [r7, 0x34] | var_34h = r3;
0x00029056 blx 0x1ded4 | fcn_0001ded4 ();
0x0002905a ldr r2, [r7, 0x10] | r2 = var_10h;
0x0002905c ldr r3, [r7, 0x34] | r3 = var_34h;
0x0002905e cmp r2, 0 |
| if (r2 == 0) {
0x00029060 beq.w 0x29274 | goto label_25;
| }
0x00029064 ldr r1, [pc, 0x120] |
0x00029066 ldr r2, [r7, 0x10] | r2 = var_10h;
0x00029068 ldr.w r1, [fp, r1] | r1 = *((fp + r1));
0x0002906c ldr r2, [r2] | r2 = *(r2);
0x0002906e ldr r1, [r1] | r1 = *(0x29188);
0x00029070 strd r8, r3, [r2, 0x10] | __asm ("strd r8, r3, [r2, 0x10]");
0x00029074 str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
0x00029076 ldr r1, [r7, 0x3c] | r1 = var_3ch;
0x00029078 str r1, [r2, 0x18] | *((r2 + 0x18)) = r1;
| label_10:
0x0002907a ldr r2, [pc, 0xf0] |
0x0002907c ldrd r1, r0, [r7, 0x18] | __asm ("ldrd r1, r0, [var_18h]");
0x00029080 add r2, pc |
0x00029082 ldr r2, [r2] | r2 = *(0x521f2);
0x00029084 str r0, [r1, r2] | *((r1 + r2)) = r0;
0x00029086 ldr r2, [r7, 0x24] | r2 = var_20h_2;
0x00029088 cmp r2, 0 |
| if (r2 != 0) {
0x0002908a bne.w 0x29334 | goto label_26;
| }
| label_12:
0x0002908e ldr r0, [pc, 0x114] |
0x00029090 str r3, [r7, 0x34] | var_34h = r3;
0x00029092 add r0, pc | r0 = 0x5223c;
0x00029094 adds r0, 0x1c | r0 += 0x1c;
0x00029096 bl 0x5f0ac | pthread_rwlock_unlock ();
0x0002909a ldr r0, [pc, 0x10c] |
0x0002909c add r0, pc | r0 = 0x5224a;
0x0002909e bl 0x5f0ac | pthread_rwlock_unlock ();
0x000290a2 ldr r3, [r7, 0x34] | r3 = var_34h;
0x000290a4 b 0x28eaa | goto label_0;
| }
0x000290a6 ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x000290aa cmp r0, 0 |
| if (r0 == 0) {
0x000290ac beq 0x28ffe | goto label_1;
| }
0x000290ae mov r2, r3 | r2 = r3;
0x000290b0 add.w r3, r8, 0x10 | r3 = r8 + 0x10;
0x000290b4 strd r6, r5, [r7] | __asm ("strd r6, r5, [r7]");
0x000290b8 mov r5, r3 | r5 = r3;
0x000290ba str.w r8, [r7, 8] | __asm ("str.w r8, [var_8h_2]");
0x000290be mov r6, r2 | r6 = r2;
0x000290c0 ldr.w r8, [r7, 0x28] | r8 = var_28h;
0x000290c4 b 0x290d8 |
| while (r3 != r0) {
0x000290c6 cmp r0, 0 |
| if (r0 != 0) {
0x000290c8 bne.w 0x29316 | goto label_27;
| }
0x000290cc ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x000290d0 adds r6, 1 | r6++;
0x000290d2 cmp r0, 0 |
| if (r0 == 0) {
0x000290d4 beq.w 0x29326 | goto label_28;
| }
0x000290d8 movs r3, 1 | r3 = 1;
0x000290da mov r2, sl | r2 = sl;
0x000290dc mov r1, r4 | r1 = r4;
0x000290de str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000290e2 bl 0x287f4 | r0 = fcn_000287f4 (r0, r1, r2, r3);
0x000290e6 adds r3, r0, 1 | r3 = r0 + 1;
0x000290e8 bne 0x290c6 |
| }
| label_3:
0x000290ea ldr r0, [r7, 0x38] | r0 = var_38h;
0x000290ec blx 0x1ded4 | fcn_0001ded4 ();
0x000290f0 ldr r0, [pc, 0xb8] |
0x000290f2 add r0, pc | r0 = 0x522a2;
0x000290f4 adds r0, 0x1c | r0 += 0x1c;
0x000290f6 bl 0x5f0ac | pthread_rwlock_unlock ();
0x000290fa ldr r0, [pc, 0xb4] |
0x000290fc add r0, pc | r0 = 0x522b2;
0x000290fe bl 0x5f0ac | pthread_rwlock_unlock ();
0x00029102 ldr r3, [pc, 0x6c] |
0x00029104 ldrd r2, r1, [r7, 0x18] | __asm ("ldrd r2, r1, [var_18h]");
0x00029108 add r3, pc |
0x0002910a ldr r3, [r3] | r3 = *(0x5227e);
0x0002910c str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0002910e ldr r3, [r7, 0x24] | r3 = var_20h_2;
0x00029110 ldr.w r2, [r7, 0x88] | r2 = *((r7 + 0x88));
0x00029114 cmp r2, 1 |
0x00029116 it ne |
| if (r2 == 1) {
0x00029118 cmpne r3, 0 | __asm ("cmpne r3, 0");
| goto label_29;
| }
| if (r2 == 1) {
| label_29:
0x0002911a beq.w 0x28ea8 | goto label_2;
| }
| label_14:
0x0002911e ldr r3, [r7, 0x20] | r3 = var_20h;
0x00029120 adds r7, 0x64 | r7 += 0x64;
0x00029122 mov r0, r3 | r0 = r3;
0x00029124 mov sp, r7 |
0x00029126 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0002912a bl 0x9efc8 | r0 = getcwd ();
0x0002912e mov r5, r0 | r5 = r0;
0x00029130 cmp r0, 0 |
| if (r0 == 0) {
0x00029132 beq 0x290ea | goto label_3;
| }
0x00029134 ldr r1, [pc, 0x7c] |
0x00029136 mov r3, r6 | r3 = r6;
0x00029138 mov r2, r0 | r2 = r0;
0x0002913a add.w r0, r7, 0x38 | r0 += var_38h;
0x0002913e add r1, pc | r1 = 0x522f6;
0x00029140 bl 0x38ce0 | r0 = asprintf ()
0x00029144 mov r6, r0 | r6 = r0;
0x00029146 mov r0, r5 | r0 = r5;
0x00029148 blx 0x1ded4 | fcn_0001ded4 ();
0x0002914c cmp r6, 0 |
| if (r6 < 0) {
0x0002914e blt 0x290ea | goto label_3;
| }
0x00029150 ldr r3, [r7, 0x38] | r3 = var_38h;
0x00029152 str r3, [r7, 0x34] | var_34h = r3;
0x00029154 b 0x28f68 | goto label_4;
| label_22:
0x00029156 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x00029158 cmp r3, 0 |
| if (r3 != 0) {
0x0002915a bne.w 0x28f88 | goto label_5;
| }
0x0002915e mov r5, r8 | r5 = r8;
0x00029160 b 0x28f9a | goto label_6;
| label_23:
0x00029162 adds r5, 1 | r5++;
0x00029164 b 0x28ffe | goto label_1;
| label_24:
0x000291b8 adds r2, r5, 1 | r2 = r5 + 1;
0x000291ba mov r1, r6 | r1 = r6;
| do {
0x000291bc strb r3, [r1], 1 | *(r1) = r3;
| r1++;
0x000291c0 mov r5, r2 | r5 = r2;
0x000291c2 ldrb r3, [r2] | r3 = *(r2);
0x000291c4 adds r2, 1 | r2++;
0x000291c6 cmp r3, 0 |
0x000291c8 it ne |
| if (r3 != 0) {
0x000291ca cmpne r3, 0x3a | __asm ("cmpne r3, 0x3a");
| }
0x000291cc ite ne |
| if (r3 == 0) {
0x000291ce movne r0, 1 | r0 = 1;
| }
| if (r3 != 0) {
0x000291d0 moveq r0, 0 | r0 = 0;
| }
0x000291d2 bne 0x291bc |
| } while (r3 != 0);
0x000291d4 ldr r3, [pc, 0x1a4] |
0x000291d6 strb r0, [r1] | *(r1) = r0;
0x000291d8 ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x000291dc ldr r3, [r3] | r3 = *(0x2937c);
0x000291de cmp r3, 0 |
| if (r3 == 0) {
0x000291e0 beq.w 0x29010 | goto label_7;
| }
0x000291e4 movs r1, 0x2f | r1 = 0x2f;
0x000291e6 mov r0, r6 | r0 = r6;
0x000291e8 bl 0x69630 | r0 = strchr ();
0x000291ec cmp r0, 0 |
| if (r0 != 0) {
0x000291ee bne.w 0x28ffe | goto label_1;
| }
0x000291f2 b 0x29010 | goto label_7;
| label_15:
0x000291f4 ldr r3, [pc, 0x188] |
0x000291f6 add r3, pc | r3 = 0x5257a;
0x000291f8 ldr.w sb, [r3] | sb = *(0x5257a);
0x000291fc b 0x28ede | goto label_8;
| label_19:
0x000291fe ldr r3, [pc, 0x184] |
0x00029200 movs r4, 0 | r4 = 0;
0x00029202 add r3, pc | r3 = 0x5258c;
0x00029204 str r3, [r7, 0x34] | var_34h = r3;
0x00029206 b 0x28f68 | goto label_4;
| label_20:
0x00029208 ldr r3, [pc, 0x17c] |
0x0002920a add r3, pc | r3 = 0x52596;
0x0002920c str r3, [r7, 0x34] | var_34h = r3;
0x0002920e b 0x28f68 | goto label_4;
| label_16:
0x00029210 ldr r2, [r7, 0x24] | r2 = var_20h_2;
0x00029212 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00029214 cbnz r2, 0x2923a |
| while (r0 >= r2) {
| label_9:
0x00029216 ldr r0, [pc, 0x174] |
0x00029218 str r3, [r7, 0x34] | var_34h = r3;
0x0002921a add r0, pc | r0 = 0x525ac;
0x0002921c adds r0, 0x1c | r0 += 0x1c;
0x0002921e bl 0x5f0ac | pthread_rwlock_unlock ();
0x00029222 ldr r0, [pc, 0x16c] |
0x00029224 add r0, pc | r0 = 0x525ba;
0x00029226 bl 0x5f0ac | pthread_rwlock_unlock ();
0x0002922a ldr r2, [pc, 0x14c] |
0x0002922c ldrd r3, r1, [r7, 0x18] | __asm ("ldrd r3, r1, [var_18h]");
0x00029230 add r2, pc |
0x00029232 ldr r2, [r2] | r2 = *(0x525ae);
0x00029234 str r1, [r3, r2] | *((r3 + r2)) = r1;
0x00029236 ldr r3, [r7, 0x34] | r3 = var_34h;
0x00029238 b 0x28eaa | goto label_0;
0x0002923a ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0002923c ldr.w r1, [r7, 0x88] | r1 = *((r7 + 0x88));
0x00029240 str r3, [r7, 0x34] | var_34h = r3;
0x00029242 ldr r6, [r2, 8] | r6 = *((r2 + 8));
0x00029244 ldr r0, [r6, 0x60] | r0 = *((r6 + 0x60));
0x00029246 bl 0x286b4 | fcn_000286b4 (r0, r1);
0x0002924a ldr r2, [r6, 0x64] | r2 = *((r6 + 0x64));
0x0002924c mov r5, r0 | r5 = r0;
0x0002924e ldr r3, [r7, 0x34] | r3 = var_34h;
0x00029250 cmp r0, r2 |
0x00029252 bhs 0x29216 |
| }
0x00029254 ldr r4, [r4, 0x18] | r4 = *((r4 + 0x18));
0x00029256 mov r0, r3 | r0 = r3;
0x00029258 mov r6, r3 | r6 = r3;
0x0002925a add r4, r3 | r4 += r3;
| do {
0x0002925c subs r5, 1 | r5--;
0x0002925e mov.w r1, 0 | r1 = 0;
| if (r5 <= 1) {
0x00029262 blo.w 0x2936e | goto label_30;
| }
0x00029266 bl 0x68ed0 | rawmemchr ();
0x0002926a adds r0, 1 | r0++;
0x0002926c cmp r0, r4 |
0x0002926e blo 0x2925c |
| } while (r0 <= r4);
0x00029270 mov r3, r6 | r3 = r6;
0x00029272 b 0x29216 | goto label_9;
| label_25:
0x00029274 mov r0, sl | r0 = sl;
0x00029276 bl 0x6ae40 | r0 = strlen ();
0x0002927a adds r5, r0, 1 | r5 = r0 + 1;
0x0002927c ldr r0, [r7, 0xc] | r0 = src;
0x0002927e bl 0x6ae40 | strlen ();
0x00029282 ldr r6, [r7, 0x14] | r6 = n;
0x00029284 add.w r2, r6, 0x1e | r2 = r6 + 0x1e;
0x00029288 add r0, r2 | r0 += r2;
0x0002928a add r0, r5 | r0 += r5;
0x0002928c blx 0x1df60 | fcn_0001df60 ();
0x00029290 ldr r3, [r7, 0x34] | r3 = var_34h;
0x00029292 mov r4, r0 | r4 = r0;
0x00029294 cmp r0, 0 |
| if (r0 == 0) {
0x00029296 beq.w 0x2907a | goto label_10;
| }
0x0002929a mov r2, r5 | r2 = r5;
0x0002929c mov r1, sl | r1 = sl;
0x0002929e adds r0, 0x1c | r0 += 0x1c;
0x000292a0 adds r6, 1 | r6++;
0x000292a2 blx 0x6d540 | r0 = memcpy (r0, r1, r2);
0x000292a6 add r5, r0 | r5 += r0;
0x000292a8 mov r2, r6 | r2 = r6;
0x000292aa mov r1, sb | r1 = sb;
0x000292ac adds r6, r5, r6 | r6 = r5 + r6;
0x000292ae mov r0, r5 | r0 = r5;
0x000292b0 blx 0x6d540 | memcpy (r0, r1, r2);
0x000292b4 ldr r1, [r7, 0xc] | r1 = src;
0x000292b6 mov r0, r6 | r0 = r6;
0x000292b8 bl 0x6a5a0 | strcpy (r0, r1);
0x000292bc ldr.w r3, [r7, 0x8c] | r3 = *((r7 + 0x8c));
0x000292c0 ldr r2, [pc, 0xd0] |
0x000292c2 str r5, [r4] | *(r4) = r5;
0x000292c4 strd r3, r6, [r4, 4] | __asm ("strd r3, r6, [r4, 4]");
0x000292c8 ldr.w r2, [fp, r2] | r2 = *((fp + r2));
0x000292cc ldr r5, [pc, 0xc8] |
0x000292ce ldr r3, [r7, 0x34] | r3 = var_34h;
0x000292d0 ldr r2, [r2] | r2 = *(0x29394);
0x000292d2 add r5, pc | r5 = 0x5266e;
0x000292d4 str.w r8, [r4, 0x10] | __asm ("str.w r8, [r4, 0x10]");
0x000292d8 add.w r6, r5, 0x3c | r6 = r5 + 0x3c;
0x000292dc str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000292de str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x000292e0 mov r0, r6 | r0 = r6;
0x000292e2 ldr r2, [r7, 0x3c] | r2 = var_3ch;
0x000292e4 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x000292e6 bl 0x5f248 | pthread_rwlock_wrlock ();
0x000292ea ldr r2, [pc, 0xb0] |
0x000292ec mov r1, r5 | r1 = r5;
0x000292ee mov r0, r4 | r0 = r4;
0x000292f0 add r2, pc | r2 = 0x52692;
0x000292f2 bl 0xa9e70 | r0 = tsearch ();
0x000292f6 mov r5, r0 | r5 = r0;
0x000292f8 mov r0, r6 | r0 = r6;
0x000292fa bl 0x5f0ac | pthread_rwlock_unlock ();
0x000292fe ldr r3, [r7, 0x34] | r3 = var_34h;
| if (r5 == 0) {
0x00029300 cbz r5, 0x2930a | goto label_31;
| }
0x00029302 ldr r2, [r5] | r2 = *(r5);
0x00029304 cmp r2, r4 |
| if (r2 == r4) {
0x00029306 beq.w 0x2907a | goto label_10;
| }
| label_31:
0x0002930a mov r0, r4 | r0 = r4;
0x0002930c str r3, [r7, 0x34] | var_34h = r3;
0x0002930e blx 0x1ded4 | fcn_0001ded4 ();
0x00029312 ldr r3, [r7, 0x34] | r3 = var_34h;
0x00029314 b 0x2907a | goto label_10;
| label_27:
0x00029316 ldr.w r8, [r7, 8] | r8 = var_8h_2;
0x0002931a mov r2, r6 | r2 = r6;
0x0002931c adds r2, 4 | r2 += 4;
0x0002931e mov r3, r0 | r3 = r0;
0x00029320 ldr.w r8, [r8, r2, lsl 2] | offset_0 = r2 << 2;
| r8 = *((r8 + offset_0));
0x00029324 b 0x29052 | goto label_11;
| label_28:
0x00029326 ldrd r6, r5, [r7] | __asm ("ldrd r6, r5, [r7]");
0x0002932a b 0x28ffe | goto label_1;
| label_18:
0x0002932c ldr r3, [pc, 0x70] |
0x0002932e add r3, pc | r3 = 0x526d2;
0x00029330 str r3, [r7, 0x34] | var_34h = r3;
0x00029332 b 0x28f68 | goto label_4;
| label_26:
0x00029334 ldr.w r4, [r8, 8] | r4 = *((r8 + 8));
0x00029338 ldr.w r1, [r7, 0x88] | r1 = *((r7 + 0x88));
0x0002933c str r3, [r7, 0x34] | var_34h = r3;
0x0002933e ldr r0, [r4, 0x60] | r0 = *((r4 + 0x60));
0x00029340 bl 0x286b4 | fcn_000286b4 (r0, r1);
0x00029344 ldr r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x00029346 mov r4, r0 | r4 = r0;
0x00029348 ldr r3, [r7, 0x34] | r3 = var_34h;
0x0002934a cmp r0, r2 |
| if (r0 >= r2) {
0x0002934c bhs.w 0x2908e | goto label_12;
| }
0x00029350 ldr r5, [r7, 0x3c] | r5 = var_3ch;
0x00029352 mov r0, r3 | r0 = r3;
0x00029354 mov r6, r3 | r6 = r3;
0x00029356 add r5, r3 | r5 += r3;
| do {
0x00029358 subs r4, 1 | r4--;
0x0002935a mov.w r1, 0 | r1 = 0;
| if (r4 <= 1) {
0x0002935e blo 0x29372 | goto label_32;
| }
0x00029360 bl 0x68ed0 | rawmemchr ();
0x00029364 adds r0, 1 | r0++;
0x00029366 cmp r0, r5 |
0x00029368 blo 0x29358 |
| } while (r0 <= r5);
0x0002936a mov r3, r6 | r3 = r6;
0x0002936c b 0x2908e | goto label_12;
| label_30:
0x0002936e mov r3, r0 | r3 = r0;
0x00029370 b 0x29216 | goto label_9;
| label_32:
0x00029372 mov r3, r0 | r3 = r0;
0x00029374 b 0x2908e | goto label_12;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x78ad0 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
| ((val & 0x000000000000ff00ull) << 40) | \
| ((val & 0x0000000000ff0000ull) << 24) | \
| ((val & 0x00000000ff000000ull) << 8) | \
| ((val & 0x000000ff00000000ull) >> 8) | \
| ((val & 0x0000ff0000000000ull) >> 24) | \
| ((val & 0x00ff000000000000ull) >> 40) | \
| ((val & 0xff00000000000000ull) >> 56)))
|
; (fcn) fcn.00078ad0 () | void fcn_00078ad0 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t whence;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int32_t var_2ch_2;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_50h;
| int32_t var_50h_2;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int32_t var_68h_2;
| int16_t var_70h;
| int32_t var_70h_2;
| int16_t var_90h;
| int16_t var_b8h;
| int32_t var_b8h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00078ad0 ldr.w r3, [pc, 0x840] | r3 = *(0x00079314);
0x00078ad4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00078ad8 mov.w sb, 0 | sb = 0;
0x00078adc ldr.w r7, [pc, 0x838] |
0x00078ae0 sub sp, 0xdc |
0x00078ae2 add r3, pc | r3 += pc;
0x00078ae4 mov r5, r1 | r5 = r1;
0x00078ae6 ldr.w r8, [r3] | r8 = *(r3);
0x00078aea mov r6, r2 | r6 = r2;
0x00078aec add r7, pc | r7 = 0xf1e08;
0x00078aee str.w sb, [sp, 0x28] | __asm ("str.w sb, [var_28h]");
0x00078af2 str.w sb, [r3] | __asm ("str.w sb, [r3]");
| if (r0 == 0) {
0x00078af6 cbz r0, 0x78b5c | goto label_33;
| }
0x00078af8 ldrb r3, [r0] | r3 = *(r0);
0x00078afa mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x00078afc cbz r3, 0x78b40 |
0x00078afe ldr.w r2, [pc, 0x81c] |
0x00078b02 ldr r2, [r7, r2] | r2 = *((r7 + r2));
0x00078b04 ldr r2, [r2] | r2 = *(0x7931e);
0x00078b06 cmp r2, 0 |
| if (r2 == 0) {
0x00078b08 beq 0x78b9e | goto label_34;
| }
0x00078b0a cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x00078b0c beq 0x78b20 |
0x00078b0e ldr.w r1, [pc, 0x810] | r1 = *(0x00079320);
0x00078b12 add r1, pc | r1 += pc;
0x00078b14 bl 0x6b668 | r0 = strstr ();
0x00078b18 cmp r0, 0 |
| if (r0 == 0) {
0x00078b1a beq 0x78ba2 | goto label_35;
| }
| label_8:
0x00078b1c mov r0, sb | r0 = sb;
0x00078b1e b 0x78b42 | goto label_36;
| }
0x00078b20 ldr.w r1, [pc, 0x800] | r1 = *(0x00079324);
0x00078b24 movs r2, 0xf | r2 = 0xf;
0x00078b26 add r1, pc | r1 += pc;
0x00078b28 bl 0x68404 | r0 = memcmpeq ();
0x00078b2c cmp r0, 0 |
| if (r0 != 0) {
0x00078b2e bne.w 0x78e98 | goto label_37;
| }
| label_7:
0x00078b32 ldr.w r1, [pc, 0x7f4] |
0x00078b36 mov r0, r4 | r0 = r4;
0x00078b38 add r1, pc | r1 = 0xf1e66;
0x00078b3a bl 0x6b668 | r0 = strstr ();
| if (r0 == 0) {
0x00078b3e cbz r0, 0x78b62 | goto label_0;
| }
| }
0x00078b40 movs r0, 0 | r0 = 0;
| do {
| label_36:
0x00078b42 ldr.w r4, [pc, 0x7e8] | r4 = *(0x0007932c);
0x00078b46 blx 0x1ded4 | fcn_0001ded4 ();
0x00078b4a add r4, pc | r4 += pc;
0x00078b4c ldr r0, [r4] | r0 = *(r4);
0x00078b4e blx 0x1ded4 | fcn_0001ded4 ();
0x00078b52 movs r3, 0 | r3 = 0;
0x00078b54 str r3, [r4] | *(r4) = r3;
| label_4:
0x00078b56 add sp, 0xdc |
0x00078b58 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_33:
0x00078b5c ldr.w r4, [pc, 0x7d0] |
0x00078b60 add r4, pc | r4 = 0xf1e94;
| label_0:
0x00078b62 cmp.w r8, 0 |
| if (r8 != 0) {
0x00078b66 beq 0x78b76 |
0x00078b68 add r1, sp, 0x68 | r1 += var_68h;
0x00078b6a mov r0, r4 | r0 = r4;
0x00078b6c bl 0x9db38 | r0 = stat64_time64 ();
0x00078b70 cmp r0, 0 |
| if (r0 == 0) {
0x00078b72 beq.w 0x78e06 | goto label_38;
| }
| }
| label_3:
0x00078b76 ldr.w r1, [pc, 0x7bc] |
0x00078b7a mov r0, r4 | r0 = r4;
0x00078b7c add r1, pc | r1 = 0xf1eb6;
0x00078b7e bl 0x4cff4 | r0 = fopen (r0, r1);
0x00078b82 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00078b84 cbz r0, 0x78b9a |
0x00078b86 bl 0x520ec | fileno_unlocked ();
0x00078b8a add r1, sp, 0x68 | r1 += var_68h;
0x00078b8c bl 0x9db70 | r0 = fstat64_time64 ();
0x00078b90 mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x00078b92 cbz r0, 0x78bd6 | goto label_39;
| }
| label_2:
0x00078b94 mov r0, r4 | r0 = r4;
0x00078b96 bl 0x4c878 | IO_fclose ();
| }
| label_1:
0x00078b9a ldr r0, [sp, 0x28] | r0 = var_28h;
0x00078b9c b 0x78b42 |
| } while (1);
| label_34:
0x00078b9e cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x00078ba0 beq 0x78b62 | goto label_0;
| }
| label_35:
0x00078ba2 ldr.w r0, [pc, 0x794] | r0 = *(0x00079338);
0x00078ba6 add r0, pc | r0 += pc;
0x00078ba8 bl 0x2e8f0 | r0 = getenv (r0);
0x00078bac mov r2, r0 | r2 = r0;
0x00078bae cmp r0, 0 |
| if (r0 == 0) {
0x00078bb0 beq.w 0x78e90 | goto label_40;
| }
0x00078bb4 ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x00078bb6 cbnz r3, 0x78bbe |
0x00078bb8 ldr.w r2, [pc, 0x780] |
0x00078bbc add r2, pc | r2 = "+45 3325-6543";
| }
| label_6:
0x00078bbe ldr.w r1, [pc, 0x780] | r1 = *(0x00079340);
0x00078bc2 mov r3, r4 | r3 = r4;
0x00078bc4 add r0, sp, 0x28 | r0 += var_28h;
0x00078bc6 add r1, pc | r1 += pc;
0x00078bc8 bl 0x38ce0 | asprintf ()
0x00078bcc adds r0, 1 | r0++;
0x00078bce it ne |
| if (r0 != 1) {
0x00078bd0 ldrne r4, [sp, 0x28] | r4 = var_28h;
| goto label_41;
| }
| if (r0 != 1) {
| label_41:
0x00078bd2 bne 0x78b62 | goto label_0;
| }
0x00078bd4 b 0x78b9a | goto label_1;
| label_39:
0x00078bd6 ldr.w fp, [pc, 0x76c] | fp = *(0x00079344);
0x00078bda movs r3, 2 | r3 = 2;
0x00078bdc str r3, [sp, 8] | var_8h = r3;
0x00078bde movw sl, 0x5a54 |
0x00078be2 ldr.w sb, [pc, 0x764] |
0x00078be6 movt sl, 0x6669 | sl = 0x66695a54;
0x00078bea add fp, pc |
0x00078bec ldr.w r0, [fp] | r0 = *(fp);
0x00078bf0 blx 0x1ded4 | fcn_0001ded4 ();
0x00078bf4 ldr.w r3, [pc, 0x754] | r3 = *(0x0007934c);
0x00078bf8 add sb, pc | sb = 0xf1f46;
0x00078bfa vldr d16, [sp, 0x68] | __asm ("vldr d16, [sp, 0x68]");
0x00078bfe add r1, sp, 0x3c | r1 += var_3ch;
0x00078c00 ldr r2, [r4] | r2 = *(r4);
0x00078c02 add r3, pc | r3 += pc;
0x00078c04 ldr r0, [sp, 0xb8] | r0 = var_b8h;
0x00078c06 vstr d16, [r3, 0x10] | __asm ("vstr d16, [r3, 0x10]");
0x00078c0a vldr d16, [sp, 0x70] | __asm ("vldr d16, [sp, 0x70]");
0x00078c0e orr r2, r2, 0x8000 | r2 |= 0x8000;
0x00078c12 str.w r8, [fp] | __asm ("str.w r8, [fp]");
0x00078c16 str r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x00078c18 str r1, [sp, 0xc] | var_ch = r1;
0x00078c1a vstr d16, [r3, 8] | __asm ("vstr d16, [r3, 8]");
0x00078c1e str r2, [r4] | *(r4) = r2;
0x00078c20 strd r5, r6, [sp, 0x10] | __asm ("strd r5, r6, [var_10h]");
| label_5:
0x00078c24 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00078c26 mov r3, r4 | r3 = r4;
0x00078c28 movs r2, 1 | r2 = 1;
0x00078c2a movs r1, 0x2c | r1 = 0x2c;
0x00078c2c bl 0x53d7c | r0 = fread_unlocked ();
0x00078c30 cmp r0, 1 |
0x00078c32 mov fp, r0 |
| if (r0 != 1) {
0x00078c34 bne 0x78b94 | goto label_2;
| }
0x00078c36 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00078c38 cmp r3, sl |
| if (r3 != sl) {
0x00078c3a bne 0x78b94 | goto label_2;
| }
0x00078c3c ldr r2, [sp, 0x58] | r2 = var_58h;
0x00078c3e ldrd r3, r5, [sp, 0x50] | __asm ("ldrd r3, r5, [var_50h]");
0x00078c42 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x00078c44 rev r0, r2 | r2 = SWAP32 (r0);
0x00078c46 ldr r2, [sp, 0x64] | r2 = var_64h;
0x00078c48 rev.w ip, r3 | r3 = SWAPundefined (ip);
0x00078c4c ldr r3, [sp, 0x60] | r3 = var_60h;
0x00078c4e rev r1, r1 | r1 = SWAP32 (r1);
0x00078c50 str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x00078c54 rev r2, r2 | r2 = SWAP32 (r2);
0x00078c56 str.w r1, [sb, 0x1c] | __asm ("str.w r1, [sb, 0x1c]");
0x00078c5a str r2, [sp, 4] | whence = r2;
0x00078c5c rev r2, r5 | r5 = SWAP32 (r2);
0x00078c5e cmp r2, ip |
0x00078c60 rev r3, r3 | r3 = SWAP32 (r3);
0x00078c62 mov lr, r2 | lr = r2;
0x00078c64 it lo |
| if (r2 >= ip) {
0x00078c66 movlo lr, ip | lr = ip;
| }
0x00078c68 cmp lr, r3 |
0x00078c6a str.w r3, [sb, 0x20] | __asm ("str.w r3, [sb, 0x20]");
| if (lr > r3) {
0x00078c6e bhi 0x78b94 | goto label_2;
| }
0x00078c70 ldr r6, [sp, 8] | r6 = var_8h;
0x00078c72 cmp r6, 1 |
| if (r6 != 1) {
0x00078c74 bne.w 0x78e56 | goto label_42;
| }
0x00078c78 ldr.w sl, [sp, 0x90] | sl = var_90h;
0x00078c7c mov r0, r4 | r0 = r4;
0x00078c7e strd ip, r5, [sp, 0x18] | __asm ("strd ip, r5, [var_18h]");
0x00078c82 mov fp, r2 |
0x00078c84 ldrd r5, r6, [sp, 0x10] | __asm ("ldrd r5, r6, [var_10h]");
0x00078c88 bl 0x52e74 | r0 = ftello ();
0x00078c8c subs.w sl, sl, r0 | sl -= r0;
| if (sl < sl) {
0x00078c90 bmi 0x78b94 | goto label_2;
| }
0x00078c92 ldrd r3, ip, [sb, 0x1c] | __asm ("ldrd r3, ip, [sb, 0x1c]");
0x00078c96 add.w r1, ip, ip, lsl 1 | r1 = ip + (ip << 1);
0x00078c9a add.w r2, r3, r3, lsl 3 | r2 = r3 + (r3 << 3);
0x00078c9e add.w r2, r2, r1, lsl 1 | r2 += (r1 << 1);
0x00078ca2 ldr r1, [sp, 4] | r1 = whence;
0x00078ca4 add r2, r1 | r2 += r1;
0x00078ca6 cmp sl, r2 |
| if (sl <= r2) {
0x00078ca8 blo.w 0x78b94 | goto label_2;
| }
0x00078cac ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
0x00078cb0 sub.w sl, sl, r2 | sl -= r2;
0x00078cb4 movw r2, 0x5555 |
0x00078cb8 movt r2, 0x1555 | r2 = 0x15555555;
0x00078cbc cmp r0, r2 |
| if (r0 > r2) {
0x00078cbe bhi.w 0x78b94 | goto label_2;
| }
0x00078cc2 lsls r2, r0, 1 | r2 = r0 << 1;
0x00078cc4 add r0, r2 | r0 += r2;
0x00078cc6 lsls r0, r0, 2 | r0 <<= 2;
0x00078cc8 cmp r0, sl |
| if (r0 > sl) {
0x00078cca bhi.w 0x78b94 | goto label_2;
| }
0x00078cce sub.w r1, sl, r0 | r1 = sl - r0;
0x00078cd2 cmp r1, fp |
| if (r1 <= fp) {
0x00078cd4 blo.w 0x78b94 | goto label_2;
| }
0x00078cd8 subs.w lr, r1, fp | lr = r1 - fp;
| if (lr == r1) {
0x00078cdc beq.w 0x78b94 | goto label_2;
| }
0x00078ce0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00078ce2 add.w r0, lr, -1 | r0 = lr + -1;
0x00078ce6 cmp r0, r1 |
| if (r0 <= r1) {
0x00078ce8 blo.w 0x78b94 | goto label_2;
| }
0x00078cec sub.w r1, lr, r1 | r1 = lr - r1;
0x00078cf0 subs r1, 1 | r1--;
0x00078cf2 str r1, [sp, 0x10] | var_10h = r1;
| if (r1 == 1) {
0x00078cf4 beq.w 0x78b94 | goto label_2;
| }
0x00078cf8 movs r1, 8 | r1 = 8;
0x00078cfa str r1, [sp, 0xc] | var_ch = r1;
| label_17:
0x00078cfc add ip, r3 |
0x00078cfe str r3, [sp, 8] | var_8h = r3;
0x00078d00 add ip, r2 |
0x00078d02 ldr r2, [sp, 4] | r2 = whence;
0x00078d04 add.w sl, r5, r2 | sl = r5 + r2;
0x00078d08 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00078d0a add sl, r2 | sl += r2;
0x00078d0c add sl, r3 | sl += r3;
0x00078d0e add.w sl, sl, ip, lsl 3 | sl += (ip << 3);
0x00078d12 mov r0, sl | r0 = sl;
0x00078d14 blx 0x1df60 | fcn_0001df60 ();
0x00078d18 ldr.w r1, [pc, 0x634] | r1 = *(0x00079350);
0x00078d1c mov r2, r0 | r2 = r0;
0x00078d1e add r1, pc | r1 += pc;
0x00078d20 str r0, [r1] | *(r1) = r0;
0x00078d22 cmp r0, 0 |
| if (r0 == 0) {
0x00078d24 beq.w 0x78b94 | goto label_2;
| }
0x00078d28 adds.w sb, sl, r0 | sb = sl + r0;
0x00078d2c ldr r3, [sp, 8] | r3 = var_8h;
| if (sb >= sl) {
0x00078d2e bhs.w 0x790f6 | goto label_43;
| }
| label_20:
0x00078d32 strd r2, sb, [sp, 0x2c] | __asm ("strd r2, sb, [var_2ch]");
0x00078d36 add.w sl, sp, 0x2c | sl += var_2ch;
0x00078d3a ldr.w sb, [pc, 0x618] |
0x00078d3e movs r2, 8 | r2 = 8;
0x00078d40 mov r1, r2 | r1 = r2;
0x00078d42 mov r0, sl | r0 = sl;
0x00078d44 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078d48 add sb, pc | sb = 0xf20a2;
0x00078d4a movs r2, 8 | r2 = 8;
0x00078d4c ldr.w r3, [sb, 0x24] | r3 = *(0xf20c6);
0x00078d50 movs r1, 0x10 | r1 = 0x10;
0x00078d52 mov r0, sl | r0 = sl;
0x00078d54 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078d58 ldr.w r3, [sb, 0x20] | r3 = *(0xf20c2);
0x00078d5c movs r2, 4 | r2 = 4;
0x00078d5e movs r1, 8 | r1 = 8;
0x00078d60 str.w r0, [sb, 0x28] | __asm ("str.w r0, [sb, 0x28]");
0x00078d64 mov r0, sl | r0 = sl;
0x00078d66 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078d6a movs r2, 1 | r2 = 1;
0x00078d6c ldr.w r3, [sb, 0x1c] | r3 = *(0xf20be);
0x00078d70 mov r1, r2 | r1 = r2;
0x00078d72 str.w r0, [sb, 0x2c] | __asm ("str.w r0, [sb, 0x2c]");
0x00078d76 mov r0, sl | r0 = sl;
0x00078d78 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078d7c movs r2, 1 | r2 = 1;
0x00078d7e ldr r3, [sp, 4] | r3 = whence;
0x00078d80 str.w r0, [sb, 0x30] | __asm ("str.w r0, [sb, 0x30]");
0x00078d84 mov r1, r2 | r1 = r2;
0x00078d86 mov r0, sl | r0 = sl;
0x00078d88 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078d8c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00078d8e str.w r0, [sb, 0x34] | __asm ("str.w r0, [sb, 0x34]");
0x00078d92 cmp r3, 8 |
0x00078d94 it ne |
| if (r3 == 8) {
0x00078d96 movne r0, 0 | r0 = 0;
| }
| if (r3 == 8) {
0x00078d98 beq.w 0x78ebe | goto label_44;
| }
| label_10:
0x00078d9c ldr.w r3, [pc, 0x5b8] |
0x00078da0 add r3, pc | r3 = "func != NULL";
0x00078da2 str r0, [r3, 0x38] | *((r3 + 0x38)) = r0;
0x00078da4 cmp r5, 0 |
| if (r5 != 0) {
0x00078da6 bne.w 0x78eae | goto label_45;
| }
| label_9:
0x00078daa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00078dac lsls r3, r4, 7 | r3 = r4 << 7;
| if (r3 <= r4) {
0x00078dae bgt 0x78db2 |
0x00078db0 lsls r3, r4, 7 | r3 = r4 << 7;
| }
| if (r3 <= r4) {
0x00078db2 bgt 0x78db6 |
0x00078db4 strb r0, [r5, r6] | *((r5 + r6)) = r0;
| }
0x00078db6 ldr.w r3, [pc, 0x5a8] | r3 = *(0x00079360);
0x00078dba ldr r1, [sp, 0xc] | r1 = var_ch;
0x00078dbc add r5, pc | r5 += pc;
0x00078dbe add r3, pc | r3 += pc;
0x00078dc0 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x00078dc2 ldr r0, [r3] | r0 = *(r3);
0x00078dc4 mov r3, r4 | r3 = r4;
0x00078dc6 bl 0x53d7c | fread_unlocked ();
0x00078dca ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00078dcc mov r2, r0 | r2 = r0;
0x00078dce cmp r0, r3 |
| if (r0 != r3) {
0x00078dd0 bne.w 0x78b94 | goto label_2;
| }
0x00078dd4 movs r1, 1 | r1 = 1;
0x00078dd6 ldr r0, [r5, 0x30] | r0 = *((r5 + 0x30));
0x00078dd8 mov r3, r4 | r3 = r4;
0x00078dda bl 0x53d7c | fread_unlocked ();
0x00078dde ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x00078de0 cmp r0, r1 |
| if (r0 != r1) {
0x00078de2 bne.w 0x78b94 | goto label_2;
| }
0x00078de6 ldr r6, [r5, 0x20] | r6 = *((r5 + 0x20));
0x00078de8 cmp r0, 0 |
| if (r0 == 0) {
0x00078dea beq.w 0x7909c | goto label_46;
| }
0x00078dee ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00078df0 subs r0, r1, 1 | r0 = r1 - 1;
0x00078df2 add r0, r3 | r0 += r3;
0x00078df4 subs r3, 1 | r3--;
0x00078df6 b 0x78dfc |
| while (r2 <= r6) {
0x00078df8 cmp r0, r3 |
| if (r0 == r3) {
0x00078dfa beq 0x78ecc | goto label_47;
| }
0x00078dfc ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00078e00 cmp r2, r6 |
0x00078e02 blo 0x78df8 |
| }
0x00078e04 b 0x78b94 | goto label_2;
| label_38:
0x00078e06 ldr.w ip, [pc, 0x55c] | ip = *(0x00079364);
0x00078e0a ldrd r0, r2, [sp, 0x70] | __asm ("ldrd r0, r2, [var_70h]");
0x00078e0c lsls r4, r3, 8 | r4 = r3 << 8;
0x00078e0e add ip, pc |
0x00078e10 ldrd r1, r3, [ip, 8] | __asm ("ldrd r1, r3, [ip, 8]");
0x00078e14 cmp r2, r3 |
0x00078e16 it eq |
| if (r2 != r3) {
0x00078e18 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| goto label_48;
| }
| if (r2 != r3) {
| label_48:
0x00078e1a bne.w 0x78b76 | goto label_3;
| }
0x00078e1e ldrd r0, r2, [sp, 0x68] | __asm ("ldrd r0, r2, [var_68h]");
0x00078e22 ldrd r1, r3, [ip, 0x10] | __asm ("ldrd r1, r3, [ip, 0x10]");
0x00078e26 cmp r2, r3 |
0x00078e28 it eq |
| if (r2 != r3) {
0x00078e2a cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| goto label_49;
| }
| if (r2 != r3) {
| label_49:
0x00078e2c bne.w 0x78b76 | goto label_3;
| }
0x00078e30 ldr.w r3, [ip, 0x18] | r3 = *((ip + 0x18));
0x00078e34 ldrd r1, r2, [sp, 0xb8] | __asm ("ldrd r1, r2, [var_b8h]");
0x00078e38 asrs r0, r3, 0x1f | r0 = r3 >> 0x1f;
0x00078e3a cmp r0, r2 |
0x00078e3c it eq |
| if (r0 != r2) {
0x00078e3e cmpeq r3, r1 | __asm ("cmpeq r3, r1");
| goto label_50;
| }
| if (r0 != r2) {
| label_50:
0x00078e40 bne.w 0x78b76 | goto label_3;
| }
| label_23:
0x00078e44 ldr.w r3, [pc, 0x520] |
0x00078e48 movs r2, 1 | r2 = 1;
0x00078e4a ldr r0, [sp, 0x28] | r0 = var_28h;
0x00078e4c add r3, pc | r3 = 0xf21b8;
0x00078e4e str r2, [r3] | *(r3) = r2;
0x00078e50 blx 0x1ded4 | fcn_0001ded4 ();
0x00078e54 b 0x78b56 | goto label_4;
| label_42:
0x00078e56 ldrb.w lr, [sp, 0x40] | lr = var_40h;
0x00078e5a cmp.w lr, 0 |
| if (lr == 0) {
0x00078e5e beq.w 0x79080 | goto label_51;
| }
0x00078e62 ldr r5, [sp, 4] | r5 = whence;
0x00078e64 add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x00078e68 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00078e6c add r5, r2 | r5 += r2;
0x00078e6e mov r2, r5 | r2 = r5;
0x00078e70 add r2, ip | r2 += ip;
0x00078e72 add r1, r2 | r1 += r2;
0x00078e74 mov r2, fp | r2 = fp;
0x00078e76 add.w r1, r1, r3, lsl 1 | r1 += (r3 << 1);
0x00078e7a add.w r1, r1, r0, lsl 3 | r1 += (r0 << 3);
0x00078e7e mov r0, r4 | r0 = r4;
0x00078e80 bl 0x5239c | r0 = fseek ();
0x00078e84 cmp r0, 0 |
| if (r0 != 0) {
0x00078e86 bne.w 0x78b94 | goto label_2;
| }
0x00078e8a str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x00078e8e b 0x78c24 | goto label_5;
| label_40:
0x00078e90 ldr.w r2, [pc, 0x4d8] |
0x00078e94 add r2, pc | r2 = 0xf2204;
0x00078e96 b 0x78bbe | goto label_6;
| label_37:
0x00078e98 ldr.w r1, [pc, 0x4d4] |
0x00078e9c movs r2, 0x13 | r2 = 0x13;
0x00078e9e mov r0, r4 | r0 = r4;
0x00078ea0 add r1, pc | r1 = "inity";
0x00078ea2 bl 0x68404 | r0 = memcmpeq ();
0x00078ea6 cmp r0, 0 |
| if (r0 == 0) {
0x00078ea8 beq.w 0x78b32 | goto label_7;
| }
0x00078eac b 0x78b1c | goto label_8;
| label_45:
0x00078eae movs r2, 1 | r2 = 1;
0x00078eb0 mov r3, r5 | r3 = r5;
0x00078eb2 mov r0, sl | r0 = sl;
0x00078eb4 mov r1, r2 | r1 = r2;
0x00078eb6 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078eba str r0, [r6] | *(r6) = r0;
0x00078ebc b 0x78daa | goto label_9;
| label_44:
0x00078ebe movs r2, 1 | r2 = 1;
0x00078ec0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00078ec2 mov r1, r2 | r1 = r2;
0x00078ec4 mov r0, sl | r0 = sl;
0x00078ec6 bl 0x67a8c | libc_alloc_buffer_alloc_array ();
0x00078eca b 0x78d9c | goto label_10;
| label_47:
0x00078ecc ldr.w r3, [pc, 0x4a4] |
0x00078ed0 add r3, pc | r3 = 0xf2248;
0x00078ed2 ldr r0, [r3] | r0 = *(0xf2248);
0x00078ed4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00078ed6 cmp r3, 4 |
0x00078ed8 it ne |
| if (r3 == 4) {
0x00078eda addne r1, r0, r1, lsl 3 | r1 = r0 + (r1 << 3);
| }
| if (r3 == 4) {
0x00078ede beq.w 0x79056 | goto label_52;
| }
| do {
0x00078ee2 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00078ee4 ldr r3, [r0] | r3 = *(r0);
0x00078ee6 rev r2, r2 | r2 = SWAP32 (r2);
0x00078ee8 str r2, [r0], 8 | *(r0) = r2;
| r0 += 8;
0x00078eec cmp r1, r0 |
0x00078eee rev r3, r3 | r3 = SWAP32 (r3);
0x00078ef0 str r3, [r0, -0x4] | *((r0 - 0x4)) = r3;
0x00078ef4 bne 0x78ee2 |
| } while (r1 != r0);
| label_15:
0x00078ef6 ldr.w sb, [pc, 0x480] |
0x00078efa movs r6, 0 | r6 = 0;
0x00078efc ldr.w r5, [pc, 0x47c] | r5 = *(0x0007937c);
0x00078f00 add.w sl, sp, 0x34 | sl += var_34h;
0x00078f04 str r7, [sp, 8] | var_8h = r7;
0x00078f06 ldr r7, [sp, 4] | r7 = whence;
0x00078f08 add sb, pc | sb = 0xf2286;
0x00078f0a add r5, pc | r5 += pc;
| label_11:
0x00078f0c mov r3, r4 | r3 = r4;
0x00078f0e movs r2, 4 | r2 = 4;
0x00078f10 movs r1, 1 | r1 = 1;
0x00078f12 mov r0, sl | r0 = sl;
0x00078f14 bl 0x53d7c | r0 = fread_unlocked ();
0x00078f18 cmp r0, 4 |
| if (r0 != 4) {
0x00078f1a bne.w 0x78b94 | goto label_2;
| }
0x00078f1e ldrd r2, r1, [r4, 4] | __asm ("ldrd r2, r1, [r4, 4]");
0x00078f22 cmp r2, r1 |
| if (r2 >= r1) {
0x00078f24 bhs.w 0x7904e | goto label_53;
| }
0x00078f28 adds r1, r2, 1 | r1 = r2 + 1;
0x00078f2a str r1, [r4, 4] | *((r4 + 4)) = r1;
0x00078f2c ldrb r0, [r2] | r0 = *(r2);
| label_14:
0x00078f2e cmp r0, 1 |
| if (r0 > 1) {
0x00078f30 bhi.w 0x78b94 | goto label_2;
| }
0x00078f34 ldr.w r2, [sb, 0x2c] | r2 = *((sb + 0x2c));
0x00078f38 lsls r1, r6, 3 | r1 = r6 << 3;
0x00078f3a add r2, r1 | r2 += r1;
0x00078f3c strb r0, [r2, 4] | *((r2 + 4)) = r0;
0x00078f3e ldrd r2, r0, [r4, 4] | __asm ("ldrd r2, r0, [r4, 4]");
0x00078f42 cmp r2, r0 |
| if (r2 >= r0) {
0x00078f44 bhs.w 0x79072 | goto label_54;
| }
0x00078f48 adds r0, r2, 1 | r0 = r2 + 1;
0x00078f4a str r0, [r4, 4] | *((r4 + 4)) = r0;
0x00078f4c ldrb r2, [r2] | r2 = *(r2);
| label_16:
0x00078f4e cmp r2, r7 |
| if (r2 > r7) {
0x00078f50 bhi.w 0x78b94 | goto label_2;
| }
0x00078f54 ldr r0, [r5, 0x2c] | r0 = *((r5 + 0x2c));
0x00078f56 adds r6, 1 | r6++;
0x00078f58 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00078f5a add.w ip, r0, r1 |
0x00078f5e strb.w r2, [ip, 5] | *((ip + 5)) = r2;
0x00078f62 cmp r3, r6 |
0x00078f64 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00078f66 rev r2, r2 | r2 = SWAP32 (r2);
0x00078f68 str r2, [r0, r1] | *((r0 + r1)) = r2;
| if (r3 > r6) {
0x00078f6a bhi 0x78f0c | goto label_11;
| }
0x00078f6c ldr r7, [sp, 8] | r7 = var_8h;
| label_18:
0x00078f6e ldr.w r5, [pc, 0x410] |
0x00078f72 mov r3, r4 | r3 = r4;
0x00078f74 ldr r6, [sp, 4] | r6 = whence;
0x00078f76 movs r1, 1 | r1 = 1;
0x00078f78 add r5, pc | r5 = 0xf22fe;
0x00078f7a ldr r0, [r5, 0x34] | r0 = *(0xf2332);
0x00078f7c mov r2, r6 | r2 = r6;
0x00078f7e bl 0x53d7c | r0 = fread_unlocked ();
0x00078f82 cmp r0, r6 |
| if (r0 != r6) {
0x00078f84 bne.w 0x78b94 | goto label_2;
| }
0x00078f88 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00078f8a cmp r3, 0 |
| if (r3 == 0) {
0x00078f8c beq 0x7900c | goto label_55;
| }
0x00078f8e ldr r6, [pc, 0x3f4] |
0x00078f90 mov.w sb, 0 | sb = 0;
0x00078f94 ldr r3, [pc, 0x3f0] |
0x00078f96 add.w sl, sp, 0x34 | sl += var_34h;
0x00078f9a str.w r8, [sp, 8] | __asm ("str.w r8, [var_8h]");
0x00078f9e ldr.w r8, [sp, 0xc] | r8 = var_ch;
0x00078fa2 add r6, pc | r6 = 0xf232c;
0x00078fa4 add r3, pc | r3 = "int_no <= (uintmax_t) (exponent < 0 ? (INTMAX_MAX - bits + 1) / 4 : (INTMAX_MAX - exponent - bits + 1) / 4)";
0x00078fa6 str r3, [sp, 4] | whence = r3;
| label_12:
0x00078fa8 mov r3, r4 | r3 = r4;
0x00078faa mov r2, r8 | r2 = r8;
0x00078fac movs r1, 1 | r1 = 1;
0x00078fae mov r0, sl | r0 = sl;
0x00078fb0 bl 0x53d7c | r0 = fread_unlocked ();
0x00078fb4 cmp r8, r0 |
| if (r8 != r0) {
0x00078fb6 bne.w 0x78b94 | goto label_2;
| }
0x00078fb8 add r5, sp, 0x3b4 | r5 = sp + 0x3b4;
0x00078fba ldr r3, [sp, 4] | r3 = whence;
0x00078fbc cmp.w r8, 4 |
0x00078fc0 it ne |
| if (r8 == 4) {
0x00078fc2 ldrne r0, [sp, 0x34] | r0 = var_34h;
| }
0x00078fc4 lsl.w r5, sb, 4 | r5 = sb << 4;
0x00078fc8 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x00078fca itee eq |
| if (r8 != 4) {
0x00078fcc ldreq r3, [sp, 0x34] | r3 = var_34h;
| }
| if (r8 != 4) {
0x00078fce revne r0, r0 | __asm ("revne r0, r0");
| }
| if (r8 == 4) {
0x00078fd0 ldrne r3, [sp, 0x38] | r3 = var_38h;
| }
0x00078fd2 add.w r1, r2, r5 | r1 = r2 + r5;
0x00078fd6 itte eq |
| if (r8 == 4) {
0x00078fd8 reveq r3, r3 | __asm ("reveq r3, r3");
| }
| if (r8 == 4) {
0x00078fda asreq r0, r3, 0x1f | __asm ("asreq r0, r3, 0x1f");
| }
| if (r8 != 4) {
0x00078fdc revne r3, r3 | __asm ("revne r3, r3");
| }
0x00078fde str r3, [r2, r5] | *((r2 + r5)) = r3;
0x00078fe0 mov r3, r4 | r3 = r4;
0x00078fe2 str r0, [r1, 4] | *((r1 + 4)) = r0;
0x00078fe4 movs r2, 4 | r2 = 4;
0x00078fe6 movs r1, 1 | r1 = 1;
0x00078fe8 mov r0, sl | r0 = sl;
0x00078fea bl 0x53d7c | r0 = fread_unlocked ();
0x00078fee cmp r0, 4 |
| if (r0 != 4) {
0x00078ff0 bne.w 0x78b94 | goto label_2;
| }
0x00078ff4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00078ff6 add.w sb, sb, 1 | sb++;
0x00078ffa rev r2, r3 | r3 = SWAP32 (r2);
0x00078ffc ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x00078ffe add r3, r5 | r3 += r5;
0x00079000 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00079002 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00079004 cmp r3, sb |
| if (r3 > sb) {
0x00079006 bhi 0x78fa8 | goto label_12;
| }
0x00079008 ldr.w r8, [sp, 8] | r8 = var_8h;
| label_55:
0x0007900c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007900e mov r5, r3 | r5 = r3;
0x00079010 cmp r3, 0 |
| if (r3 == 0) {
0x00079012 beq 0x790a4 | goto label_56;
| }
0x00079014 ldr r6, [pc, 0x374] |
0x00079016 movs r5, 0 | r5 = 0;
0x00079018 add r6, pc | r6 = "numsize < RETURN_LIMB_SIZE";
0x0007901a b 0x79030 |
| while (r3 <= r2) {
| label_13:
0x0007901c ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0007901e subs r3, 0 |
0x00079020 it ne |
| if (r3 == 0) {
0x00079022 movne r3, 1 | r3 = 1;
| }
0x00079024 add.w r2, r2, r5, lsl 3 | r2 += (r5 << 3);
0x00079028 adds r5, 1 | r5++;
0x0007902a cmp r5, fp |
0x0007902c strb r3, [r2, 6] | *((r2 + 6)) = r3;
| if (r5 >= fp) {
0x0007902e bhs 0x790a4 | goto label_56;
| }
0x00079030 ldrd r3, r2, [r4, 4] | __asm ("ldrd r3, r2, [r4, 4]");
0x00079034 cmp r3, r2 |
0x00079036 ittt lo |
| if (r3 >= r2) {
0x00079038 addlo r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 >= r2) {
0x0007903a strlo r2, [r4, 4] | *((r4 + 4)) = r2;
| }
| if (r3 >= r2) {
0x0007903c ldrblo r3, [r3] | r3 = *(r3);
| }
0x0007903e blo 0x7901c |
| }
0x00079040 mov r0, r4 | r0 = r4;
0x00079042 bl 0x55e5c | r0 = uflow ();
0x00079046 adds r1, r0, 1 | r1 = r0 + 1;
0x00079048 mov r3, r0 | r3 = r0;
| if (r1 != r0) {
0x0007904a bne 0x7901c | goto label_13;
| }
0x0007904c b 0x78b94 | goto label_2;
| label_53:
0x0007904e mov r0, r4 | r0 = r4;
0x00079050 bl 0x55e5c | uflow ();
0x00079054 b 0x78f2e | goto label_14;
| label_52:
0x00079056 lsls r2, r1, 2 | r2 = r1 << 2;
0x00079058 adds r5, r0, r2 | r5 = r0 + r2;
0x0007905a add r2, r5 | r2 += r5;
| do {
0x0007905c ldr r3, [r5, -0x4]! | r3 = *((r5 -= 0x4));
0x00079060 rev r3, r3 | r3 = SWAP32 (r3);
0x00079062 cmp r0, r5 |
0x00079064 str r3, [r2, -0x8]! | *((r2 -= 0x8)) = r3;
0x00079068 asr.w r3, r3, 0x1f | r3 >>= 0x1f;
0x0007906c str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0007906e bne 0x7905c |
| } while (r0 != r5);
0x00079070 b 0x78ef6 | goto label_15;
| label_54:
0x00079072 mov r0, r4 | r0 = r4;
0x00079074 str r1, [sp, 0x14] | var_14h = r1;
0x00079076 bl 0x55e5c | uflow ();
0x0007907a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007907c mov r2, r0 | r2 = r0;
0x0007907e b 0x78f4e | goto label_16;
| label_51:
0x00079080 str.w ip, [sp, 0x18] | __asm ("str.w ip, [var_18h]");
0x00079084 mov ip, r3 |
0x00079086 mov r3, r1 | r3 = r1;
0x00079088 movs r1, 4 | r1 = 4;
0x0007908a mov fp, r2 |
0x0007908c str r5, [sp, 0x1c] | var_1ch = r5;
0x0007908e lsls r2, r0, 1 | r2 = r0 << 1;
0x00079090 ldrd r5, r6, [sp, 0x10] | __asm ("ldrd r5, r6, [var_10h]");
0x00079094 str r1, [sp, 0xc] | var_ch = r1;
0x00079096 str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h]");
0x0007909a b 0x78cfc | goto label_17;
| label_46:
0x0007909c cmp r6, 0 |
| if (r6 != 0) {
0x0007909e bne.w 0x78ef6 | goto label_15;
| }
0x000790a2 b 0x78f6e | goto label_18;
| label_56:
0x000790a4 ldr r3, [pc, 0x2e8] |
0x000790a6 movs r0, 0 | r0 = 0;
0x000790a8 add r3, pc | r3 = 0xf243c;
0x000790aa ldr r2, [r3, 0x2c] | r2 = *(0xf2468);
0x000790ac ldr r1, [r3, 0x20] | r1 = *(0xf245c);
0x000790ae subs r3, r2, 2 | r3 = r2 - 2;
0x000790b0 b 0x790b8 |
| while (r1 > r5) {
0x000790b2 adds r5, 1 | r5++;
0x000790b4 strb.w r0, [r3, r5, lsl 3] | offset_0 = r5 << 3;
| *((r3 + offset_0)) = r0;
0x000790b8 cmp r1, r5 |
0x000790ba bhi 0x790b2 |
| }
0x000790bc ldr r6, [pc, 0x2d4] |
0x000790be movs r5, 0 | r5 = 0;
0x000790c0 add r6, pc | r6 = 0xf2458;
0x000790c2 b 0x790da |
| while (r3 <= r2) {
0x000790c4 adds r2, r3, 1 | r2 = r3 + 1;
0x000790c6 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x000790c8 ldrb r3, [r3] | r3 = *(r3);
| label_19:
0x000790ca ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x000790cc subs r3, 0 |
0x000790ce it ne |
| if (r3 == 0) {
0x000790d0 movne r3, 1 | r3 = 1;
| }
0x000790d2 add.w r2, r2, r5, lsl 3 | r2 += (r5 << 3);
0x000790d6 adds r5, 1 | r5++;
0x000790d8 strb r3, [r2, 7] | *((r2 + 7)) = r3;
0x000790da ldr r3, [sp, 0x18] | r3 = var_18h;
0x000790dc cmp r5, r3 |
| if (r5 == r3) {
0x000790de beq 0x79108 | goto label_57;
| }
0x000790e0 ldrd r3, r2, [r4, 4] | __asm ("ldrd r3, r2, [r4, 4]");
0x000790e4 cmp r3, r2 |
0x000790e6 blo 0x790c4 |
| }
0x000790e8 mov r0, r4 | r0 = r4;
0x000790ea bl 0x55e5c | r0 = uflow ();
0x000790ee adds r2, r0, 1 | r2 = r0 + 1;
0x000790f0 mov r3, r0 | r3 = r0;
| if (r2 != r0) {
0x000790f2 bne 0x790ca | goto label_19;
| }
0x000790f4 b 0x78b94 | goto label_2;
| label_43:
0x000790f6 mov r1, sl | r1 = sl;
0x000790f8 str r0, [sp, 8] | var_8h = r0;
0x000790fa bl 0x67b88 | libc_alloc_buffer_create_failure ();
0x000790fe ldr r3, [pc, 0x298] |
0x00079100 ldr r2, [sp, 8] | r2 = var_8h;
0x00079102 add r3, pc |
0x00079104 ldr r3, [r3, 0x1c] | r3 = "____strtof_l_internal";
0x00079106 b 0x78d32 | goto label_20;
| label_57:
0x00079108 ldr r3, [pc, 0x290] |
0x0007910a movs r0, 0 | r0 = 0;
0x0007910c add r3, pc | r3 = 0xf24ac;
0x0007910e ldr r2, [r3, 0x2c] | r2 = *(0xf24d8);
0x00079110 ldr r1, [r3, 0x20] | r1 = *(0xf24cc);
0x00079112 subs r3, r2, 1 | r3 = r2 - 1;
0x00079114 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00079116 b 0x7911e |
| while (r1 > r2) {
0x00079118 adds r2, 1 | r2++;
0x0007911a strb.w r0, [r3, r2, lsl 3] | offset_1 = r2 << 3;
| *((r3 + offset_1)) = r0;
0x0007911e cmp r1, r2 |
0x00079120 bhi 0x79118 |
| }
0x00079122 ldr r3, [pc, 0x27c] |
0x00079124 add r3, pc |
0x00079126 ldr r3, [r3, 0x38] | r3 = *(0xf2502);
| if (r3 != 0) {
0x00079128 cbz r3, 0x7914c |
0x0007912a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007912c cmp r3, 0 |
| if (r3 == 0) {
0x0007912e beq.w 0x79238 | goto label_58;
| }
0x00079132 ldrd r3, r2, [r4, 4] | __asm ("ldrd r3, r2, [r4, 4]");
0x00079136 cmp r3, r2 |
| if (r3 >= r2) {
0x00079138 bhs 0x7922e | goto label_59;
| }
0x0007913a adds r2, r3, 1 | r2 = r3 + 1;
0x0007913c str r2, [r4, 4] | *((r4 + 4)) = r2;
0x0007913e ldrb r3, [r3] | r3 = *(r3);
| label_26:
0x00079140 cmp r3, 0xa |
| if (r3 == 0xa) {
0x00079142 beq 0x79202 | goto label_60;
| }
| label_24:
0x00079144 ldr r3, [pc, 0x25c] |
0x00079146 movs r2, 0 | r2 = 0;
0x00079148 add r3, pc | r3 = 0xf24f0;
0x0007914a str r2, [r3, 0x38] | *((r3 + 0x38)) = r2;
| }
| label_25:
0x0007914c mov r0, r4 | r0 = r4;
0x0007914e ldr r4, [pc, 0x258] |
0x00079150 movs r5, 0 | r5 = 0;
0x00079152 add r4, pc | r4 = 0xf2500;
0x00079154 bl 0x4c878 | IO_fclose ();
0x00079158 b 0x79172 | goto label_61;
| label_21:
0x0007915a ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0007915c ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0007915e add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
0x00079162 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00079164 add r0, r3 | r0 += r3;
0x00079166 bl 0x7863c | r0 = fcn_0007863c (r0);
0x0007916a cmp r0, 0 |
| if (r0 == 0) {
0x0007916c beq.w 0x78b9a | goto label_1;
| }
0x00079170 adds r5, 1 | r5++;
| label_61:
0x00079172 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00079174 cmp r3, r5 |
| if (r3 > r5) {
0x00079176 bhi 0x7915a | goto label_21;
| }
0x00079178 ldr r3, [pc, 0x230] | r3 = *(0x793ac);
0x0007917a ldr.w sb, [pc, 0x234] | sb = *(0x000793b0);
0x0007917e ldr r6, [r4, 0x1c] | r6 = *((r4 + 0x1c));
0x00079180 ldr r4, [r7, r3] | r4 = *((r7 + r3));
0x00079182 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00079186 add sb, pc | sb += pc;
0x00079188 vst1.32 {d16}, [r4] | __asm ("vst1.32 {d16}, [r4]");
| do {
| if (r6 == 0) {
| label_22:
0x0007918c cbz r6, 0x791c4 | goto label_62;
| }
0x0007918e ldr.w r3, [sb, 0x30] | r3 = *((sb + 0x30));
0x00079192 subs r6, 1 | r6--;
0x00079194 ldrb r2, [r3, r6] | r2 = *((r3 + r6));
0x00079196 ldr.w r3, [sb, 0x2c] | r3 = *((sb + 0x2c));
0x0007919a add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x0007919e ldrb r5, [r3, 4] | r5 = *((r3 + 4));
0x000791a0 ldr.w r2, [r4, r5, lsl 2] | offset_2 = r5 << 2;
| r2 = *((r4 + offset_2));
0x000791a4 cmp r2, 0 |
0x000791a6 bne 0x7918c |
| } while (r2 != 0);
0x000791a8 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x000791aa ldr.w r0, [sb, 0x34] | r0 = *((sb + 0x34));
0x000791ae add r0, r3 | r0 += r3;
0x000791b0 bl 0x7863c | fcn_0007863c (r0);
0x000791b4 str.w r0, [r4, r5, lsl 2] | __asm ("str.w r0, [r4, r5, lsl 2]");
0x000791b8 rsb.w r5, r5, 1 | r5 = 1 - r5;
0x000791bc ldr.w r3, [r4, r5, lsl 2] | offset_3 = r5 << 2;
| r3 = *((r4 + offset_3));
0x000791c0 cmp r3, 0 |
| if (r3 == 0) {
0x000791c2 beq 0x7918c | goto label_22;
| }
| label_62:
0x000791c4 ldr r3, [r4] | r3 = *(r4);
0x000791c6 cmp r3, 0 |
| if (r3 == 0) {
0x000791c8 beq 0x7924c | goto label_63;
| }
| label_27:
0x000791ca ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000791cc cmp r3, 0 |
| if (r3 == 0) {
0x000791ce beq 0x792b8 | goto label_64;
| }
| label_29:
0x000791d0 ldr r2, [pc, 0x1e0] |
0x000791d2 add r2, pc | r2 = 0xf258a;
0x000791d4 ldr r4, [r2, 0x1c] | r4 = *(0xf25a6);
0x000791d6 ldr r5, [r2, 0x2c] | r5 = *(0xf25b6);
0x000791d8 cmp r4, 0 |
| if (r4 != 0) {
0x000791da bne 0x7925a | goto label_65;
| }
0x000791dc ldr r3, [r5] | r3 = *(r5);
0x000791de strd r3, r3, [r2, 0x3c] | __asm ("strd r3, r3, [r2, 0x3c]");
| label_28:
0x000791e2 ldr r2, [pc, 0x1d4] |
0x000791e4 ldr r0, [pc, 0x1d4] | r0 = *(0x793bc);
0x000791e6 ldr r1, [pc, 0x1d8] | r1 = *(0x793c2);
0x000791e8 add r2, pc | r2 = 0xf25a6;
0x000791ea ldrd r2, r3, [r2, 0x3c] | __asm ("ldrd r2, r3, [r2, 0x3c]");
0x000791ee ldr r0, [r7, r0] | r0 = *((r7 + r0));
0x000791f0 subs r2, r2, r3 | r2 -= r3;
0x000791f2 rsb.w r3, r3, 0 | r3 -= ;
0x000791f6 it ne |
| if (r2 == r2) {
0x000791f8 movne r2, 1 | r2 = 1;
| }
0x000791fa str r2, [r0] | *(r0) = r2;
0x000791fc ldr r2, [r7, r1] | r2 = *((r7 + r1));
0x000791fe str r3, [r2] | *(r2) = r3;
0x00079200 b 0x78e44 | goto label_23;
| label_60:
0x00079202 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00079204 movs r1, 1 | r1 = 1;
0x00079206 ldr r5, [pc, 0x1bc] |
0x00079208 subs r6, r3, 1 | r6 = r3 - 1;
0x0007920a mov r3, r4 | r3 = r4;
0x0007920c add r5, pc | r5 = 0xf25d6;
0x0007920e mov r2, r6 | r2 = r6;
0x00079210 ldr r0, [r5, 0x38] | r0 = *(0xf260e);
0x00079212 bl 0x53d7c | r0 = fread_unlocked ();
0x00079216 cmp r6, r0 |
| if (r6 != r0) {
0x00079218 bne 0x79144 | goto label_24;
| }
0x0007921a ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0007921c movs r2, 0 | r2 = 0;
0x0007921e strb r2, [r3, r6] | *((r3 + r6)) = r2;
0x00079220 cmp r3, 0 |
| if (r3 == 0) {
0x00079222 beq 0x7914c | goto label_25;
| }
0x00079224 ldrb r3, [r3] | r3 = *(r3);
0x00079226 cmp r3, 0 |
| if (r3 != 0) {
0x00079228 bne 0x7914c | goto label_25;
| }
0x0007922a str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x0007922c b 0x7914c | goto label_25;
| label_59:
0x0007922e mov r0, r4 | r0 = r4;
0x00079230 bl 0x55e5c | r0 = uflow ();
0x00079234 mov r3, r0 | r3 = r0;
0x00079236 b 0x79140 | goto label_26;
| label_58:
0x00079238 ldr r3, [pc, 0x18c] |
0x0007923a mov.w r2, 0x186 | r2 = 0x186;
0x0007923e ldr r1, [pc, 0x18c] |
0x00079240 ldr r0, [pc, 0x18c] |
0x00079242 add r3, pc | r3 = 0xf260e;
0x00079244 add r1, pc | r1 = 0xf2616;
0x00079246 add r0, pc | r0 = 0xf261a;
0x00079248 bl 0x27fbc | assert_fail ();
| label_63:
0x0007924c ldr r3, [pc, 0x184] |
0x0007924e add r3, pc | r3 = 0xf2626;
0x00079250 ldr r0, [r3, 0x34] | r0 = *(0xf265a);
0x00079252 bl 0x7863c | fcn_0007863c (r0);
0x00079256 str r0, [r4] | *(r4) = r0;
0x00079258 b 0x791ca | goto label_27;
| label_65:
0x0007925a ldr r6, [r2, 0x30] | r6 = *((r2 + 0x30));
0x0007925c movs r3, 0 | r3 = 0;
0x0007925e mov r0, r3 | r0 = r3;
0x00079260 mov r1, r3 | r1 = r3;
0x00079262 strd r3, r3, [r2, 0x3c] | __asm ("strd r3, r3, [r2, 0x3c]");
0x00079266 add r4, r6 | r4 += r6;
| do {
0x00079268 cmp.w r8, 0 |
| if (r8 != 0) {
0x0007926c bne 0x792e4 | goto label_66;
| }
0x0007926e ldrb ip, [r4, -0x1] | ip = *((r4 - 0x1));
0x00079272 add.w r2, r5, ip, lsl 3 | r2 = r5 + (ip << 3);
0x00079276 ldrb.w lr, [r2, 4] |
0x0007927a cmp.w lr, 0 |
| if (lr != 0) {
0x0007927e bne 0x792d6 | goto label_67;
| }
0x00079280 ldr.w r2, [r5, ip, lsl 3] | offset_4 = ip << 3;
| r2 = *((r5 + offset_4));
0x00079284 movs r1, 1 | r1 = 1;
0x00079286 mov r8, r1 | r8 = r1;
0x00079288 str r2, [sp, 0x20] | var_20h = r2;
| label_31:
0x0007928a tst.w r8, r3 |
| if ((r8 & r3) != 0) {
0x0007928e bne 0x792be | goto label_68;
| }
| label_30:
0x00079290 subs r4, 1 | r4--;
0x00079292 cmp r4, r6 |
0x00079294 bne 0x79268 |
| } while (r4 != r6);
| if (r0 != 0) {
0x00079296 cbz r0, 0x792a0 |
0x00079298 ldr r2, [pc, 0x13c] |
0x0007929a ldr r0, [sp, 0x24] | r0 = var_24h;
0x0007929c add r2, pc | r2 = 0xf2678;
0x0007929e str r0, [r2, 0x3c] | *((r2 + 0x3c)) = r0;
| }
| if (r1 != 0) {
0x000792a0 cbz r1, 0x792aa |
0x000792a2 ldr r2, [pc, 0x138] |
0x000792a4 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000792a6 add r2, pc | r2 = "Signal generated by the completion of an asynchronous I/O request";
0x000792a8 str r1, [r2, 0x40] | *((r2 + 0x40)) = r1;
| }
0x000792aa cmp r3, 0 |
| if (r3 != 0) {
0x000792ac bne 0x791e2 | goto label_28;
| }
0x000792ae ldr r3, [pc, 0x130] |
0x000792b0 add r3, pc | r3 = 0xf2696;
0x000792b2 ldr r2, [r3, 0x40] | r2 = *(0xf26d6);
0x000792b4 str r2, [r3, 0x3c] | *((r3 + 0x3c)) = r2;
0x000792b6 b 0x791e2 | goto label_28;
| label_64:
0x000792b8 ldr r3, [r4] | r3 = *(r4);
0x000792ba str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000792bc b 0x791d0 | goto label_29;
| if (r0 != 0) {
| label_68:
0x000792be cbz r0, 0x792c8 |
0x000792c0 ldr r3, [pc, 0x120] |
0x000792c2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000792c4 add r3, pc | r3 = 0xf26ac;
0x000792c6 str r2, [r3, 0x3c] | *((r3 + 0x3c)) = r2;
| }
0x000792c8 cmp r1, 0 |
| if (r1 == 0) {
0x000792ca beq 0x791e2 | goto label_28;
| }
0x000792cc ldr r3, [pc, 0x118] |
0x000792ce ldr r2, [sp, 0x20] | r2 = var_20h;
0x000792d0 add r3, pc | r3 = 0xf26bc;
0x000792d2 str r2, [r3, 0x40] | *((r3 + 0x40)) = r2;
0x000792d4 b 0x791e2 | goto label_28;
| label_67:
0x000792d6 cmp r3, 0 |
| if (r3 != 0) {
0x000792d8 bne 0x79290 | goto label_30;
| }
| label_32:
0x000792da ldr r3, [r2] | r3 = *(r2);
0x000792dc movs r0, 1 | r0 = 1;
0x000792de str r3, [sp, 0x24] | var_24h = r3;
0x000792e0 mov r3, r0 | r3 = r0;
0x000792e2 b 0x7928a | goto label_31;
| if (r3 == 0) {
| label_66:
0x000792e4 cbz r3, 0x79300 | goto label_69;
| }
| if (r0 != 0) {
0x000792e6 cbz r0, 0x792f0 |
0x000792e8 ldr r3, [pc, 0x100] |
0x000792ea ldr r2, [sp, 0x24] | r2 = var_24h;
0x000792ec add r3, pc | r3 = 0xf26dc;
0x000792ee str r2, [r3, 0x3c] | *((r3 + 0x3c)) = r2;
| }
0x000792f0 cmp r1, 0 |
| if (r1 == 0) {
0x000792f2 beq.w 0x791e2 | goto label_28;
| }
0x000792f6 ldr r3, [pc, 0xf8] |
0x000792f8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000792fa add r3, pc | r3 = 0xf26f0;
0x000792fc str r2, [r3, 0x40] | *((r3 + 0x40)) = r2;
0x000792fe b 0x791e2 | goto label_28;
| label_69:
0x00079300 ldrb r2, [r4, -0x1] | r2 = *((r4 - 0x1));
0x00079304 add.w r2, r5, r2, lsl 3 | r2 = r5 + (r2 << 3);
0x00079308 ldrb.w ip, [r2, 4] | ip = *((r2 + 4));
0x0007930c cmp.w ip, 0 |
| if (ip == 0) {
0x00079310 beq 0x79290 | goto label_30;
| }
0x00079312 b 0x792da | goto label_32;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xc28b8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000c28b8 () | void fcn_000c28b8 (int16_t arg1, int16_t arg2, int16_t arg4, char * s1) {
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
| r2 = s1;
0x000c28b8 push.w {r4, r5, r6, r7, r8, lr} |
0x000c28bc mov r6, r1 | r6 = r1;
0x000c28be ldr r1, [pc, 0x84] |
0x000c28c0 mov r4, r2 | r4 = r2;
0x000c28c2 sub sp, 0x10 |
0x000c28c4 mov r8, r0 | r8 = r0;
0x000c28c6 ldr r7, [pc, 0x80] |
0x000c28c8 movs r2, 2 | r2 = 2;
0x000c28ca add r1, pc | r1 = 0x185214;
0x000c28cc mov r0, r4 | r0 = r4;
0x000c28ce mov r5, r3 | r5 = r3;
0x000c28d0 add r7, pc | r7 = 0x18521e;
0x000c28d2 bl 0x6af1c | r0 = strncasecmp ();
| if (r0 != 0) {
0x000c28d6 cbnz r0, 0xc28ea | goto label_1;
| }
0x000c28d8 ldr r2, [pc, 0x70] | r2 = *(0xc294c);
0x000c28da adds r0, r4, 2 | r0 = r4 + 2;
0x000c28dc ldr r1, [r7, r2] | r1 = *((r7 + r2));
0x000c28de ldr r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x000c28e0 orrs r2, r5 | r2 |= r5;
0x000c28e2 str r2, [r1, 0x2c] | *((r1 + 0x2c)) = r2;
| do {
0x000c28e4 add sp, 0x10 |
0x000c28e6 pop.w {r4, r5, r6, r7, r8, pc} |
| label_1:
0x000c28ea ldr r1, [pc, 0x64] |
0x000c28ec movs r2, 3 | r2 = 3;
0x000c28ee mov r0, r4 | r0 = r4;
0x000c28f0 add r1, pc | r1 = 0x185246;
0x000c28f2 bl 0x6af1c | r0 = strncasecmp ();
| if (r0 == 0) {
0x000c28f6 cbnz r0, 0xc290c |
0x000c28f8 ldr r3, [pc, 0x50] | r3 = *(0xc294c);
0x000c28fa adds r0, r4, 3 | r0 = r4 + 3;
0x000c28fc ldr r2, [r7, r3] | r2 = *((r7 + r3));
0x000c28fe ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000c2900 bic.w r3, r3, r5 | r3 = BIT_MASK (r3, r5);
0x000c2904 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000c2906 add sp, 0x10 |
0x000c2908 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x000c290c ldr r1, [pc, 0x44] |
0x000c290e movs r2, 5 | r2 = 5;
0x000c2910 ldr r0, [pc, 0x44] |
0x000c2912 add r1, pc | r1 = 0x18526a;
0x000c2914 add r0, pc | r0 = 0x185270;
0x000c2916 bl 0x28688 | dcgettext (r0, r1);
0x000c291a mov r3, r6 | r3 = r6;
0x000c291c mov r1, r0 | r1 = r0;
0x000c291e mov r2, r8 | r2 = r8;
0x000c2920 add r0, sp, 0xc | r0 += var_ch;
0x000c2922 str r4, [sp] | *(sp) = r4;
0x000c2924 bl 0x38ce0 | r0 = asprintf ()
0x000c2928 cmp r0, 0 |
| if (r0 >= 0) {
0x000c292a bge 0xc2930 | goto label_2;
| }
| label_0:
0x000c292c movs r0, 0 | r0 = 0;
0x000c292e b 0xc28e4 |
| } while (1);
| label_2:
0x000c2930 ldr r1, [pc, 0x28] |
0x000c2932 movs r0, 0 | r0 = 0;
0x000c2934 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000c2936 add r1, pc | r1 = 0x185296;
0x000c2938 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000c293c ldr r0, [sp, 0xc] | r0 = var_ch;
0x000c293e blx 0x1ded4 | fcn_0001ded4 ();
0x000c2942 b 0xc292c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xc2960 */
| #include <stdint.h>
|
; (fcn) fcn.000c2960 () | void fcn_000c2960 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000c2960 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000c2964 mov r4, r0 | r4 = r0;
0x000c2966 ldrb r3, [r2] | r3 = *(r2);
0x000c2968 mov r0, r2 | r0 = r2;
0x000c296a sub sp, 0x14 |
0x000c296c mov sb, r1 | sb = r1;
0x000c296e ldr r2, [pc, 0x138] |
0x000c2970 add r2, pc | r2 = 0x18541e;
0x000c2972 cmp r3, 0 |
| if (r3 == 0) {
0x000c2974 beq.w 0xc2a96 | goto label_4;
| }
0x000c2978 ldr r1, [pc, 0x130] | r1 = *(0xc2aac);
0x000c297a mrc p15, 0, ip, c13, c0, 3 | __asm ("mrc p15, 0, ip, c13, c0, 3");
0x000c297e ldr r7, [r2, r1] | r7 = *((r2 + r1));
| label_0:
0x000c2980 ldr r2, [pc, 0x11c] |
0x000c2982 mov r6, r0 | r6 = r0;
0x000c2984 add r2, pc |
0x000c2986 ldr r2, [r2] | r2 = *(0x185428);
0x000c2988 ldr.w r1, [ip, r2] | r1 = *((ip + r2));
0x000c298c b 0xc2994 |
| while (r3 != r3) {
0x000c298e ldrb r3, [r6, 1]! | r3 = *((r6 += 1));
| if (r3 == 0) {
0x000c2992 cbz r3, 0xc29ae | goto label_5;
| }
0x000c2994 ldrh.w ip, [r1, r3, lsl 1] | offset_0 = r3 << 1;
| ip = *((r1 + offset_0));
0x000c2998 cmp r3, 0x23 |
0x000c299a it ne |
| if (r3 != 0x23) {
0x000c299c cmpne r3, 0x2c | __asm ("cmpne r3, 0x2c");
| }
0x000c299e ite ne |
| if (r3 == 0x23) {
0x000c29a0 movne r3, 1 | r3 = 1;
| }
| if (r3 != 0x23) {
0x000c29a2 moveq r3, 0 | r3 = 0;
| }
0x000c29a4 eor ip, ip, 0x2000 |
0x000c29a8 ands.w r3, r3, ip, lsr 13 | r3 &= (ip >> 13);
0x000c29ac bne 0xc298e |
| }
| label_5:
0x000c29ae subs r1, r6, r0 | r1 = r6 - r0;
| label_3:
0x000c29b0 ldr r5, [r7, 0x18] | r5 = *((r7 + 0x18));
0x000c29b2 cmp r5, 3 |
| if (r5 > 3) {
0x000c29b4 bgt 0xc2a28 | goto label_6;
| }
0x000c29b6 adds r3, r5, 1 | r3 = r5 + 1;
0x000c29b8 add.w r8, r7, r5, lsl 2 | r8 = r7 + (r5 << 2);
0x000c29bc str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000c29be bl 0x6b0b8 | strndup ();
0x000c29c2 ldr r2, [pc, 0xe0] |
0x000c29c4 mrc p15, 0, ip, c13, c0, 3 | __asm ("mrc p15, 0, ip, c13, c0, 3");
0x000c29c8 str.w r0, [r8, 0x1c] | __asm ("str.w r0, [r8, 0x1c]");
0x000c29cc ldrb r3, [r6] | r3 = *(r6);
0x000c29ce add r2, pc |
0x000c29d0 ldr r2, [r2] | r2 = *(0x185478);
0x000c29d2 ldr.w r1, [ip, r2] | r1 = *((ip + r2));
0x000c29d6 ldrh.w r2, [r1, r3, lsl 1] | offset_1 = r3 << 1;
| r2 = *((r1 + offset_1));
0x000c29da lsls r0, r2, 0x12 | r0 = r2 << 0x12;
| if (r0 >= r2) {
0x000c29dc bpl 0xc29ea | goto label_7;
| }
| do {
0x000c29de ldrb r3, [r6, 1]! | r3 = *((r6 += 1));
0x000c29e2 ldrh.w r2, [r1, r3, lsl 1] | offset_2 = r3 << 1;
| r2 = *((r1 + offset_2));
0x000c29e6 lsls r2, r2, 0x12 | r2 <<= 0x12;
0x000c29e8 bmi 0xc29de |
| } while (r2 < r2);
| label_7:
0x000c29ea cmp r3, 0x2c |
| if (r3 != 0x2c) {
0x000c29ec beq 0xc29f4 |
0x000c29ee subs r3, 0x3a | r3 -= 0x3a;
0x000c29f0 cmp r3, 1 |
| if (r3 > 1) {
0x000c29f2 bhi 0xc2a24 | goto label_8;
| }
| }
0x000c29f4 ldrb r3, [r6, 1] | r3 = *((r6 + 1));
0x000c29f6 adds r0, r6, 1 | r0 = r6 + 1;
0x000c29f8 ldrh.w r2, [r1, r3, lsl 1] | offset_3 = r3 << 1;
| r2 = *((r1 + offset_3));
0x000c29fc lsls r5, r2, 0x12 | r5 = r2 << 0x12;
| if (r5 >= r2) {
0x000c29fe bpl 0xc2a0c | goto label_9;
| }
| do {
0x000c2a00 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000c2a04 ldrh.w r2, [r1, r3, lsl 1] | offset_4 = r3 << 1;
| r2 = *((r1 + offset_4));
0x000c2a08 lsls r2, r2, 0x12 | r2 <<= 0x12;
0x000c2a0a bmi 0xc2a00 |
| } while (r2 < r2);
| label_9:
0x000c2a0c cmp r3, 0x23 |
0x000c2a0e it ne |
| if (r3 != 0x23) {
0x000c2a10 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 == 0x23) {
0x000c2a12 beq 0xc2a64 | goto label_10;
| }
| label_1:
0x000c2a14 ldrb r3, [r0] | r3 = *(r0);
0x000c2a16 cmp r3, 0 |
0x000c2a18 it ne |
| if (r3 == 0) {
0x000c2a1a cmpne r3, 0x23 | __asm ("cmpne r3, 0x23");
| goto label_11;
| }
| if (r3 != 0) {
| label_11:
0x000c2a1c bne 0xc2980 | goto label_0;
| }
0x000c2a1e add sp, 0x14 |
0x000c2a20 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_8:
0x000c2a24 mov r0, r6 | r0 = r6;
0x000c2a26 b 0xc2a14 | goto label_1;
| label_6:
0x000c2a28 ldr r1, [pc, 0x84] |
0x000c2a2a movs r2, 5 | r2 = 5;
0x000c2a2c ldr r0, [pc, 0x84] |
0x000c2a2e movs r6, 4 | r6 = 4;
0x000c2a30 add r1, pc | r1 = 0x1854e4;
0x000c2a32 add r0, pc | r0 = 0x1854ea;
0x000c2a34 bl 0x28688 | dcgettext (r0, r1);
0x000c2a38 mov r3, sb | r3 = sb;
0x000c2a3a mov r1, r0 | r1 = r0;
0x000c2a3c mov r2, r4 | r2 = r4;
0x000c2a3e add r0, sp, 0xc | r0 += var_ch;
0x000c2a40 str r6, [sp] | *(sp) = r6;
0x000c2a42 bl 0x38ce0 | r0 = asprintf ()
0x000c2a46 cmp r0, 0 |
| if (r0 < 0) {
0x000c2a48 blt 0xc2a5c | goto label_2;
| }
0x000c2a4a ldr r1, [pc, 0x6c] |
0x000c2a4c movs r0, 0 | r0 = 0;
0x000c2a4e ldr r2, [sp, 0xc] | r2 = var_ch;
0x000c2a50 add r1, pc | r1 = 0x18550e;
0x000c2a52 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000c2a56 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000c2a58 blx 0x1ded4 | fcn_0001ded4 ();
| do {
| label_2:
0x000c2a5c movs r0, 0 | r0 = 0;
0x000c2a5e add sp, 0x14 |
0x000c2a60 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_10:
0x000c2a64 ldr r1, [pc, 0x54] |
0x000c2a66 movs r2, 5 | r2 = 5;
0x000c2a68 ldr r0, [pc, 0x54] |
0x000c2a6a add r1, pc | r1 = 0x18552a;
0x000c2a6c add r0, pc | r0 = 0x185530;
0x000c2a6e bl 0x28688 | dcgettext (r0, r1);
0x000c2a72 mov r3, sb | r3 = sb;
0x000c2a74 mov r1, r0 | r1 = r0;
0x000c2a76 mov r2, r4 | r2 = r4;
0x000c2a78 add r0, sp, 0xc | r0 += var_ch;
0x000c2a7a bl 0x38ce0 | r0 = asprintf ()
0x000c2a7e cmp r0, 0 |
0x000c2a80 blt 0xc2a5c |
| } while (r0 < 0);
0x000c2a82 ldr r1, [pc, 0x40] |
0x000c2a84 movs r0, 0 | r0 = 0;
0x000c2a86 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000c2a88 add r1, pc | r1 = 0x185552;
0x000c2a8a bl 0x4bb90 | fcn_0004bb90 (r0);
0x000c2a8e ldr r0, [sp, 0xc] | r0 = var_ch;
0x000c2a90 blx 0x1ded4 | fcn_0001ded4 ();
0x000c2a94 b 0xc2a5c | goto label_2;
| label_4:
0x000c2a96 mov r1, r3 | r1 = r3;
0x000c2a98 ldr r3, [pc, 0x10] | r3 = *(0xc2aac);
0x000c2a9a mov r6, r0 | r6 = r0;
0x000c2a9c ldr r7, [r2, r3] | r7 = *((r2 + r3));
0x000c2a9e b 0xc29b0 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xc8a28 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000c8a28 () | void fcn_000c8a28 (char * s1) {
| void * s2;
| char * var_4h;
| int16_t var_5h;
| int32_t var_8h;
| int32_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_11ch;
| r0 = s1;
0x000c8a28 ldr r1, [pc, 0x264] |
0x000c8a2a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c8a2e sub sp, 0x11c |
0x000c8a30 ldr.w r8, [pc, 0x260] |
0x000c8a34 add.w r6, r0, 0x10c | r6 = r0 + 0x10c;
0x000c8a38 add r7, sp, 0 | r7 += s2;
0x000c8a3a str r0, [r7, 4] | var_4h = r0;
0x000c8a3c add r1, pc | r1 = 0x1916d0;
0x000c8a3e mov r0, r6 | r0 = r6;
0x000c8a40 add r8, pc | r8 = 0x1916d8;
0x000c8a42 bl 0x69790 | r0 = strcmp (r0, r1);
0x000c8a46 cmp r0, 0 |
| if (r0 == 0) {
0x000c8a48 beq 0xc8b12 | goto label_7;
| }
0x000c8a4a ldr r1, [pc, 0x24c] |
0x000c8a4c mov r0, r6 | r0 = r6;
0x000c8a4e add r1, pc | r1 = 0x1916ec;
0x000c8a50 bl 0x69790 | r0 = strcmp (r0, r1);
0x000c8a54 cmp r0, 0 |
| if (r0 == 0) {
0x000c8a56 beq 0xc8afa | goto label_8;
| }
0x000c8a58 ldr r3, [pc, 0x240] |
0x000c8a5a add.w r0, r7, 0x18 | r0 += var_18h;
0x000c8a5e ldr r1, [pc, 0x240] |
0x000c8a60 mov r2, r6 | r2 = r6;
0x000c8a62 mov r5, r0 | r5 = r0;
0x000c8a64 str r0, [r7] | *(r7) = r0;
0x000c8a66 add r3, pc | r3 = 0x191706;
0x000c8a68 adds r3, 0xf | r3 += 0xf;
0x000c8a6a add r1, pc | r1 = 0x191710;
0x000c8a6c bl 0x38ce0 | r0 = asprintf ()
0x000c8a70 cmp r0, 0 |
| if (r0 < 0) {
0x000c8a72 blt 0xc8aec | goto label_9;
| }
0x000c8a74 movs r1, 2 | r1 = 2;
0x000c8a76 ldr r0, [r5] | r0 = *(r5);
0x000c8a78 movt r1, 0x8000 | r1 = (r1 & 0xFFFF) | 0x80000000;
0x000c8a7c bl 0xd9f68 | r0 = fcn_000d9f68 (r0, r1);
0x000c8a80 mov sb, r0 | sb = r0;
0x000c8a82 str r0, [r7, 0xc] | var_ch = r0;
0x000c8a84 ldr r0, [r5] | r0 = *(r5);
0x000c8a86 blx 0x1ded4 | fcn_0001ded4 ();
0x000c8a8a mov r3, sb | r3 = sb;
0x000c8a8c cmp r3, 0 |
| if (r3 == 0) {
0x000c8a8e beq.w 0xc8b9c | goto label_10;
| }
0x000c8a92 ldr.w sl, [pc, 0x210] | sl = *(0x000c8ca4);
0x000c8a96 add.w r4, r7, 0x14 | r4 += var_14h;
0x000c8a9a ldr r3, [pc, 0x20c] |
0x000c8a9c ldr r5, [r7] | r5 = *(r7);
0x000c8a9e add sl, pc | sl += pc;
0x000c8aa0 add r3, pc | r3 = 0x19174e;
0x000c8aa2 add.w fp, sl, 0x4c0 |
0x000c8aa6 mov sb, sl | sb = sl;
0x000c8aa8 str r3, [r7, 8] | var_8h = r3;
0x000c8aaa mov sl, r8 | sl = r8;
0x000c8aac b 0xc8ad0 |
| while (r2 >= 0) {
0x000c8aae ldr r1, [r4] | r1 = *(r4);
0x000c8ab0 bl 0xd9fb0 | r0 = fcn_000d9fb0 (r0, r1);
0x000c8ab4 mov r8, r0 | r8 = r0;
0x000c8ab6 ldr r0, [r4] | r0 = *(r4);
0x000c8ab8 blx 0x1ded4 | fcn_0001ded4 ();
0x000c8abc ldr r2, [pc, 0x1ec] | r2 = *(0xc8cac);
0x000c8abe cmp fp, sb |
0x000c8ac0 ldr.w r2, [sl, r2] | r2 = *((sl + r2));
0x000c8ac4 ldr r0, [r2] | r0 = *(0xc8cac);
0x000c8ac6 eor.w r1, r8, r0 | r1 = r8 ^ r0;
0x000c8aca str r1, [r5], 4 | *(r5) = r1;
| r5 += 4;
| if (fp == sb) {
0x000c8ace beq 0xc8b44 | goto label_11;
| }
0x000c8ad0 mov r3, sb | r3 = sb;
0x000c8ad2 mov r2, r6 | r2 = r6;
0x000c8ad4 ldr r1, [r7, 8] | r1 = var_8h;
0x000c8ad6 mov r0, r4 | r0 = r4;
0x000c8ad8 bl 0x38ce0 | r0 = asprintf ()
0x000c8adc mov r2, r0 | r2 = r0;
0x000c8ade add.w sb, sb, 0x13 | sb += 0x13;
0x000c8ae2 cmp r2, 0 |
0x000c8ae4 ldr r0, [r7, 0xc] | r0 = var_ch;
0x000c8ae6 bge 0xc8aae |
| }
0x000c8ae8 bl 0xda0b4 | fcn_000da0b4 (r0);
| label_9:
0x000c8aec movs r4, 0 | r4 = 0;
0x000c8aee add.w r7, r7, 0x11c | r7 += var_11ch;
0x000c8af2 mov r0, r4 | r0 = r4;
0x000c8af4 mov sp, r7 |
0x000c8af6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x000c8afa ldr r1, [pc, 0x1b4] |
0x000c8afc ldr r0, [r7, 4] | r0 = var_4h;
0x000c8afe add r1, pc | r1 = 0x1917b4;
0x000c8b00 bl 0xc897c | r0 = fcn_000c897c (r0, r1);
0x000c8b04 mov r4, r0 | r4 = r0;
| label_0:
0x000c8b06 mov r0, r4 | r0 = r4;
0x000c8b08 add.w r7, r7, 0x11c | r7 += var_11ch;
0x000c8b0c mov sp, r7 |
0x000c8b0e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x000c8b12 ldr r3, [pc, 0x1a0] |
0x000c8b14 add r3, pc | r3 = 0x1917ce;
0x000c8b16 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x000c8b18 cbnz r2, 0xc8b32 |
| while (1) {
0x000c8b1a ldr r1, [pc, 0x19c] |
0x000c8b1c ldr r0, [r7, 4] | r0 = var_4h;
0x000c8b1e add r1, pc | r1 = 0x1917dc;
0x000c8b20 bl 0xc897c | r0 = fcn_000c897c (r0, r1);
0x000c8b24 mov r4, r0 | r4 = r0;
0x000c8b26 add.w r7, r7, 0x11c | r7 += var_11ch;
0x000c8b2a mov r0, r4 | r0 = r4;
0x000c8b2c mov sp, r7 |
0x000c8b2e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000c8b32 ldr r2, [pc, 0x178] | r2 = *(0xc8cae);
0x000c8b34 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x000c8b36 ldr.w r3, [r8, r2] | r3 = *((r8 + r2));
0x000c8b3a ldr r3, [r3] | r3 = *(r3);
0x000c8b3c eors r0, r3 | r0 ^= r3;
0x000c8b3e bl 0xcd228 | nss_files_init ();
0x000c8b42 b 0xc8b1a |
| }
| label_11:
0x000c8b44 ldr r4, [pc, 0x174] |
0x000c8b46 add r4, pc | r4 = 0x191806;
0x000c8b48 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x000c8b4a cmp r3, 0 |
| if (r3 != 0) {
0x000c8b4c bne 0xc8bf8 | goto label_12;
| }
| label_2:
0x000c8b4e ldr r0, [pc, 0x170] |
0x000c8b50 movs r3, 1 | r3 = 1;
0x000c8b52 add r0, pc | r0 = 0x191818;
| do {
0x000c8b54 ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x000c8b58 cmp r2, 0 |
| if (r2 != 0) {
0x000c8b5a bne 0xc8b68 | goto label_13;
| }
0x000c8b5c strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x000c8b60 cmp r1, 0 |
0x000c8b62 bne 0xc8b54 |
| } while (r1 != 0);
0x000c8b64 dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_13:
0x000c8b68 bne.w 0xc8c7c | goto label_14;
| }
| label_4:
0x000c8b6c ldr r3, [r7, 4] | r3 = var_4h;
0x000c8b6e ldr r3, [r3] | r3 = *(r3);
0x000c8b70 dmb ish | __asm ("dmb ish");
0x000c8b74 cmp r3, 1 |
| if (r3 == 1) {
0x000c8b76 beq 0xc8bf0 | goto label_15;
| }
0x000c8b78 bics r3, r3, 2 | __asm ("bics r3, r3, 2");
| if (r3 == 1) {
0x000c8b7c beq 0xc8c5e | goto label_16;
| }
| label_1:
0x000c8b7e ldr r0, [pc, 0x144] |
0x000c8b80 movs r2, 0 | r2 = 0;
0x000c8b82 dmb ish | __asm ("dmb ish");
0x000c8b86 add r0, pc | r0 = 0x191850;
| do {
0x000c8b88 ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x000c8b8c strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x000c8b90 cmp r1, 0 |
0x000c8b92 bne 0xc8b88 |
| } while (r1 != 0);
0x000c8b94 cmp r3, 1 |
| if (r3 > 1) {
0x000c8b96 bgt 0xc8c88 | goto label_17;
| }
| label_6:
0x000c8b98 movs r4, 1 | r4 = 1;
0x000c8b9a b 0xc8b06 | goto label_0;
| label_10:
0x000c8b9c ldr r0, [pc, 0x128] |
0x000c8b9e movs r3, 1 | r3 = 1;
0x000c8ba0 add r0, pc | r0 = 0x19186c;
| do {
0x000c8ba2 ldrex r2, [r0] | __asm ("ldrex r2, [r0]");
0x000c8ba6 cmp r2, 0 |
| if (r2 != 0) {
0x000c8ba8 bne 0xc8bb6 | goto label_18;
| }
0x000c8baa strex r1, r3, [r0] | __asm ("strex r1, r3, [r0]");
0x000c8bae cmp r1, 0 |
0x000c8bb0 bne 0xc8ba2 |
| } while (r1 != 0);
0x000c8bb2 dmb ish | __asm ("dmb ish");
| if (r1 != 0) {
| label_18:
0x000c8bb6 bne 0xc8c82 | goto label_19;
| }
| label_5:
0x000c8bb8 ldr r3, [r7, 4] | r3 = var_4h;
0x000c8bba ldr r3, [r3] | r3 = *(r3);
0x000c8bbc dmb ish | __asm ("dmb ish");
0x000c8bc0 cmp r3, 1 |
0x000c8bc2 it eq |
| if (r3 != 1) {
0x000c8bc4 moveq r4, r3 | r4 = r3;
| }
| if (r3 != 1) {
0x000c8bc6 beq 0xc8bd0 |
0x000c8bc8 cmp r3, 2 |
| if (r3 == 2) {
0x000c8bca beq 0xc8c5a | goto label_20;
| }
0x000c8bcc cmp r3, 0 |
| if (r3 == 0) {
0x000c8bce beq 0xc8c50 | goto label_21;
| }
| }
| label_3:
0x000c8bd0 ldr r0, [pc, 0xf8] |
0x000c8bd2 movs r2, 0 | r2 = 0;
0x000c8bd4 dmb ish | __asm ("dmb ish");
0x000c8bd8 add r0, pc | r0 = 0x1918a8;
| do {
0x000c8bda ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x000c8bde strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x000c8be2 cmp r1, 0 |
0x000c8be4 bne 0xc8bda |
| } while (r1 != 0);
0x000c8be6 cmp r3, 1 |
| if (r3 <= 1) {
0x000c8be8 ble 0xc8b06 | goto label_0;
| }
0x000c8bea bl 0x57f44 | lll_lock_wake_private ();
0x000c8bee b 0xc8b06 | goto label_0;
| label_15:
0x000c8bf0 ldr r0, [r7, 0xc] | r0 = var_ch;
0x000c8bf2 bl 0xda0b4 | fcn_000da0b4 (r0);
0x000c8bf6 b 0xc8b7e | goto label_1;
| label_12:
0x000c8bf8 mov r0, r6 | r0 = r6;
0x000c8bfa str r2, [r7, 8] | var_8h = r2;
0x000c8bfc bl 0x6ae40 | r0 = strlen ();
0x000c8c00 add.w r3, r0, 0x12 | r3 = r0 + 0x12;
0x000c8c04 ldr r0, [pc, 0xc8] |
0x000c8c06 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x000c8c0a mov r5, sp | r5 = sp;
0x000c8c0c sub.w sp, sp, r3 |
0x000c8c10 mov r1, r6 | r1 = r6;
0x000c8c12 add r0, pc |
0x000c8c14 ldr r6, [pc, 0xbc] |
0x000c8c16 mov r3, r0 | r3 = r0;
0x000c8c18 ldr r0, [r0] | r0 = *(0x1918e6);
0x000c8c1a ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x000c8c1c add r6, pc | r6 = 0x1918f4;
0x000c8c1e str r0, [sp] | *(sp) = r0;
0x000c8c20 add.w r0, sp, 5 | r0 += var_5h;
0x000c8c24 strb.w r3, [sp, 4] | var_4h = r3;
0x000c8c28 bl 0x6a590 | r0 = stpcpy ();
0x000c8c2c mov r3, r0 | r3 = r0;
0x000c8c2e ldr r0, [r6] | r0 = *(0x1918f4);
0x000c8c30 mov r1, sp | r1 = sp;
0x000c8c32 str r0, [r3] | *(r3) = r0;
0x000c8c34 ldrh r0, [r6, 4] | r0 = *((r6 + 4));
0x000c8c36 strh r0, [r3, 4] | *((r3 + 4)) = r0;
0x000c8c38 ldr r0, [r7, 0xc] | r0 = var_ch;
0x000c8c3a bl 0xd9fb0 | r0 = fcn_000d9fb0 (r0, r1);
0x000c8c3e mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x000c8c40 cbz r0, 0xc8c4c |
0x000c8c42 ldr r2, [r7, 8] | r2 = var_8h;
0x000c8c44 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000c8c46 ldr r2, [r2] | r2 = *(r2);
0x000c8c48 eors r0, r2 | r0 ^= r2;
0x000c8c4a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
| }
0x000c8c4c mov sp, r5 |
0x000c8c4e b 0xc8b4e | goto label_2;
| label_21:
0x000c8c50 dmb ish | __asm ("dmb ish");
0x000c8c54 movs r3, 2 | r3 = 2;
0x000c8c56 ldr r2, [r7, 4] | r2 = var_4h;
0x000c8c58 str r3, [r2] | *(r2) = r3;
| label_20:
0x000c8c5a movs r4, 0 | r4 = 0;
0x000c8c5c b 0xc8bd0 | goto label_3;
| label_16:
0x000c8c5e ldrd r1, r4, [r7] | __asm ("ldrd r1, r4, [r7]");
0x000c8c62 mov.w r2, 0x100 | r2 = 0x100;
0x000c8c66 adds r0, r4, 4 | r0 = r4 + 4;
0x000c8c68 blx 0x6d540 | memcpy (r0, r1, r2);
0x000c8c6c ldr r1, [r7, 0xc] | r1 = var_ch;
0x000c8c6e movs r3, 1 | r3 = 1;
0x000c8c70 str.w r1, [r4, 0x104] | __asm ("str.w r1, aav.0x000000ff");
0x000c8c74 dmb ish | __asm ("dmb ish");
0x000c8c78 str r3, [r4] | *(r4) = r3;
0x000c8c7a b 0xc8b7e | goto label_1;
| label_14:
0x000c8c7c bl 0x57ea8 | lll_lock_wait_private ();
0x000c8c80 b 0xc8b6c | goto label_4;
| label_19:
0x000c8c82 bl 0x57ea8 | lll_lock_wait_private ();
0x000c8c86 b 0xc8bb8 | goto label_5;
| label_17:
0x000c8c88 bl 0x57f44 | lll_lock_wake_private ();
0x000c8c8c b 0xc8b98 | goto label_6;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xd1bd4 */
| #include <stdint.h>
|
; (fcn) sym.clnt_spcreateerror () | void clnt_spcreateerror (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| r0 = arg1;
0x000d1bd4 push {r4, r5, r6, r7, lr} |
0x000d1bd6 subw sp, sp, 0x414 | __asm ("subw sp, sp, aav.0x000000ff");
0x000d1bda mov r5, r0 | r5 = r0;
0x000d1bdc bl 0xd3580 | r0 = rpc_thread_createerr ();
0x000d1be0 mov r4, r0 | r4 = r0;
0x000d1be2 ldr r0, [r0] | r0 = *(r0);
0x000d1be4 cmp r0, 0xc |
| if (r0 == 0xc) {
0x000d1be6 beq 0xd1c40 | goto label_1;
| }
0x000d1be8 cmp r0, 0xe |
| if (r0 != 0xe) {
0x000d1bea bne 0xd1c38 | goto label_2;
| }
0x000d1bec ldr r7, [pc, 0x68] |
0x000d1bee ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000d1bf0 bl 0xd19d0 | r0 = clnt_sperrno ();
0x000d1bf4 mov r3, r0 | r3 = r0;
0x000d1bf6 add r7, pc | r7 = 0x1a3852;
0x000d1bf8 ldr r0, [r4] | r0 = *(r4);
0x000d1bfa mov r4, r3 | r4 = r3;
| do {
| label_0:
0x000d1bfc bl 0xd19d0 | clnt_sperrno ();
0x000d1c00 ldr r1, [pc, 0x58] |
0x000d1c02 add r6, sp, 0xc | r6 += var_ch;
0x000d1c04 mov r3, r0 | r3 = r0;
0x000d1c06 mov r2, r5 | r2 = r5;
0x000d1c08 mov r0, r6 | r0 = r6;
0x000d1c0a str r4, [sp, 4] | var_4h = r4;
0x000d1c0c add r1, pc | r1 = 0x1a386c;
0x000d1c0e str r7, [sp] | *(sp) = r7;
0x000d1c10 bl 0x38ce0 | r0 = asprintf ()
0x000d1c14 cmp r0, 0 |
0x000d1c16 it lt |
| if (r0 >= 0) {
0x000d1c18 movlt r0, 0 | r0 = 0;
| }
| if (r0 >= 0) {
0x000d1c1a blt 0xd1c32 |
0x000d1c1c bl 0xd34d8 | fcn_000d34d8 ();
0x000d1c20 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000d1c22 mov r3, r0 | r3 = r0;
0x000d1c24 ldr.w r0, [r0, 0x98] | r0 = *((r0 + 0x98));
0x000d1c28 str.w r2, [r3, 0x98] | __asm ("str.w r2, [r3, 0x98]");
0x000d1c2c blx 0x1ded4 | fcn_0001ded4 ();
0x000d1c30 ldr r0, [sp, 0xc] | r0 = var_ch;
| }
0x000d1c32 addw sp, sp, 0x414 | __asm ("addw sp, var_0h");
0x000d1c36 pop {r4, r5, r6, r7, pc} |
| label_2:
0x000d1c38 ldr r4, [pc, 0x24] |
0x000d1c3a add r4, pc | r4 = 0x1a389e;
0x000d1c3c mov r7, r4 | r7 = r4;
0x000d1c3e b 0xd1bfc |
| } while (1);
| label_1:
0x000d1c40 ldr r7, [pc, 0x20] |
0x000d1c42 mov.w r2, 0x400 | r2 = 0x400;
0x000d1c46 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000d1c48 add r1, sp, 0x10 | r1 += var_10h;
0x000d1c4a bl 0x67bc4 | r0 = strerror_r ();
0x000d1c4e mov r3, r0 | r3 = r0;
0x000d1c50 add r7, pc | r7 = 0x1a38b8;
0x000d1c52 ldr r0, [r4] | r0 = *(r4);
0x000d1c54 mov r4, r3 | r4 = r3;
0x000d1c56 b 0xd1bfc | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xd1a18 */
| #include <stdint.h>
|
; (fcn) sym.clnt_sperror () | void clnt_sperror (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_4h_2;
| int32_t var_4h_3;
| int16_t var_18h;
| int32_t var_98h;
| int16_t var_418h;
| r0 = arg1;
| r1 = arg2;
0x000d1a18 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000d1a1a push.w {r4, r5, r6, r7, r8, lr} |
0x000d1a1e sub.w sp, sp, 0x418 |
0x000d1a22 add r4, sp, 0xc | r4 += var_ch;
0x000d1a24 mov r6, r1 | r6 = r1;
0x000d1a26 mov r1, r4 | r1 = r4;
0x000d1a28 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000d1a2a blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000d1a2c ldr r0, [r4] | r0 = *(r4);
0x000d1a2e bl 0xd19d0 | clnt_sperrno ();
0x000d1a32 ldr r5, [r4] | r5 = *(r4);
0x000d1a34 mov r7, r0 | r7 = r0;
0x000d1a36 cmp r5, 0x11 |
| if (r5 > 0x11) {
0x000d1a38 bhi 0xd1b1a | goto label_1;
| }
0x000d1a3a cmp r5, 4 |
| if (r5 < 4) {
0x000d1a3c bls 0xd1a88 | goto label_2;
| }
0x000d1a3e subs r3, r5, 5 | r3 = r5 - 5;
0x000d1a40 mov.w ip, 1 |
0x000d1a44 lsl.w ip, ip, r3 |
0x000d1a48 movw r3, 0x1fe9 | r3 = 0x1fe9;
0x000d1a4c tst.w ip, r3 |
| if ((ip & r3) == 0) {
0x000d1a50 beq 0xd1aac | goto label_3;
| }
| do {
0x000d1a52 ldr r1, [pc, 0x120] |
0x000d1a54 add r5, sp, 8 | r5 += var_8h;
0x000d1a56 mov r3, r7 | r3 = r7;
0x000d1a58 mov r2, r6 | r2 = r6;
0x000d1a5a mov r0, r5 | r0 = r5;
0x000d1a5c add r1, pc | r1 = 0x1a35d6;
0x000d1a5e bl 0x38ce0 | r0 = asprintf ()
| label_0:
0x000d1a62 cmp r0, 0 |
0x000d1a64 it lt |
| if (r0 >= 0) {
0x000d1a66 movlt r0, 0 | r0 = 0;
| }
| if (r0 >= 0) {
0x000d1a68 blt 0xd1a80 |
0x000d1a6a bl 0xd34d8 | fcn_000d34d8 ();
0x000d1a6e ldr r2, [r5] | r2 = *(r5);
0x000d1a70 mov r3, r0 | r3 = r0;
0x000d1a72 ldr.w r0, [r0, 0x98] | r0 = var_98h;
0x000d1a76 str.w r2, [r3, 0x98] | __asm ("str.w r2, [var_98h]");
0x000d1a7a blx 0x1ded4 | fcn_0001ded4 ();
0x000d1a7e ldr r0, [r5] | r0 = *(r5);
| }
0x000d1a80 add.w sp, sp, 0x418 |
0x000d1a84 pop.w {r4, r5, r6, r7, r8, pc} |
| label_2:
0x000d1a88 cmp r5, 2 |
0x000d1a8a bls 0xd1a52 |
| } while (r5 < 2);
0x000d1a8c add r1, sp, 0x18 | r1 += var_18h;
0x000d1a8e ldr r0, [r4, 4] | r0 = var_4h_2;
0x000d1a90 mov.w r2, 0x400 | r2 = 0x400;
0x000d1a94 add r5, sp, 8 | r5 += var_8h;
0x000d1a96 bl 0x67bc4 | strerror_r ();
0x000d1a9a ldr r1, [pc, 0xdc] |
0x000d1a9c mov r3, r7 | r3 = r7;
0x000d1a9e str r0, [sp] | *(sp) = r0;
0x000d1aa0 mov r2, r6 | r2 = r6;
0x000d1aa2 mov r0, r5 | r0 = r5;
0x000d1aa4 add r1, pc | r1 = 0x1a3622;
0x000d1aa6 bl 0x38ce0 | asprintf ()
0x000d1aaa b 0xd1a62 | goto label_0;
| label_3:
0x000d1aac ands ip, ip, 0x12 |
| if (ip != ip) {
0x000d1ab0 beq 0xd1ad8 |
0x000d1ab2 ldr r1, [pc, 0xc8] |
0x000d1ab4 movs r2, 5 | r2 = 5;
0x000d1ab6 ldr r0, [pc, 0xc8] |
0x000d1ab8 add r5, sp, 8 | r5 += var_8h;
0x000d1aba add r1, pc | r1 = 0x1a363c;
0x000d1abc add r0, pc | r0 = 0x1a3642;
0x000d1abe bl 0x28688 | r0 = dcgettext (r0, r1);
0x000d1ac2 mov r1, r0 | r1 = r0;
0x000d1ac4 ldr r0, [r4, 8] | r0 = var_4h_3;
0x000d1ac6 mov r3, r7 | r3 = r7;
0x000d1ac8 mov r2, r6 | r2 = r6;
0x000d1aca str r0, [sp, 4] | var_4h = r0;
0x000d1acc ldr r0, [r4, 4] | r0 = var_4h_2;
0x000d1ace str r0, [sp] | *(sp) = r0;
0x000d1ad0 mov r0, r5 | r0 = r5;
0x000d1ad2 bl 0x38ce0 | asprintf ()
0x000d1ad6 b 0xd1a62 | goto label_0;
| }
0x000d1ad8 cmp r5, 7 |
| if (r5 != 7) {
0x000d1ada bne 0xd1b1a | goto label_1;
| }
0x000d1adc ldr r1, [pc, 0xa4] |
0x000d1ade ldr r0, [r4, 4] | r0 = var_4h_2;
0x000d1ae0 add r1, pc | r1 = 0x1a3668;
0x000d1ae2 add.w r2, r1, 0x254 | r2 = r1 + 0x254;
| do {
0x000d1ae6 ldr.w r3, [r2, ip, lsl 3] | offset_0 = ip << 3;
| r3 = *((r2 + offset_0));
0x000d1aea cmp r0, r3 |
| if (r0 == r3) {
0x000d1aec beq 0xd1b34 | goto label_4;
| }
0x000d1aee add.w ip, ip, 1 |
0x000d1af2 cmp.w ip, 8 |
0x000d1af6 bne 0xd1ae6 |
| } while (ip != 8);
| do {
0x000d1af8 ldr r1, [pc, 0x8c] |
0x000d1afa movs r2, 5 | r2 = 5;
0x000d1afc ldr r0, [pc, 0x8c] |
0x000d1afe add r5, sp, 8 | r5 += var_8h;
0x000d1b00 add r1, pc | r1 = 0x1a368c;
0x000d1b02 add r0, pc | r0 = 0x1a3692;
0x000d1b04 bl 0x28688 | dcgettext (r0, r1);
0x000d1b08 ldr r4, [r4, 4] | r4 = var_4h_2;
0x000d1b0a mov r1, r0 | r1 = r0;
0x000d1b0c mov r3, r7 | r3 = r7;
0x000d1b0e mov r2, r6 | r2 = r6;
0x000d1b10 mov r0, r5 | r0 = r5;
0x000d1b12 str r4, [sp] | *(sp) = r4;
0x000d1b14 bl 0x38ce0 | asprintf ()
0x000d1b18 b 0xd1a62 | goto label_0;
| label_1:
0x000d1b1a ldrd r0, r1, [r4, 4] | __asm ("ldrd r0, r1, [var_4h_2]");
0x000d1b1e add r5, sp, 8 | r5 += var_8h;
0x000d1b20 mov r3, r7 | r3 = r7;
0x000d1b22 mov r2, r6 | r2 = r6;
0x000d1b24 str r1, [sp, 4] | var_4h = r1;
0x000d1b26 ldr r1, [pc, 0x68] |
0x000d1b28 str r0, [sp] | *(sp) = r0;
0x000d1b2a mov r0, r5 | r0 = r5;
0x000d1b2c add r1, pc | r1 = 0x1a36c2;
0x000d1b2e bl 0x38ce0 | asprintf ()
0x000d1b32 b 0xd1a62 | goto label_0;
| label_4:
0x000d1b34 add.w ip, r1, ip, lsl 3 |
0x000d1b38 ldr r5, [pc, 0x58] |
0x000d1b3a add.w r1, r1, 0x298 | r1 += 0x298;
0x000d1b3e ldr.w r3, [ip, 0x258] | r3 = *((ip + 0x258));
0x000d1b42 movs r2, 5 | r2 = 5;
0x000d1b44 add r5, pc | r5 = 0x1a36dc;
0x000d1b46 mov r0, r5 | r0 = r5;
0x000d1b48 add r1, r3 | r1 += r3;
0x000d1b4a bl 0x28688 | dcgettext (r0, r1);
0x000d1b4c ldc2 p6, c4, [sp, 0x200] | __asm ("ldc2 p6, c4, aav.0x000000ff");
0x000d1b50 cmp r0, 0 |
0x000d1b52 beq 0xd1af8 |
| } while (r0 == 0);
0x000d1b54 ldr r1, [pc, 0x40] |
0x000d1b56 movs r2, 5 | r2 = 5;
0x000d1b58 mov r0, r5 | r0 = r5;
0x000d1b5a add r5, sp, 8 | r5 += var_8h;
0x000d1b5c add r1, pc | r1 = 0x1a36f8;
0x000d1b5e bl 0x28688 | dcgettext (r0, r1);
0x000d1b62 mov r3, r7 | r3 = r7;
0x000d1b64 mov r1, r0 | r1 = r0;
0x000d1b66 mov r2, r6 | r2 = r6;
0x000d1b68 mov r0, r5 | r0 = r5;
0x000d1b6a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000d1b6c strh r0, [r0] | *(r0) = r0;
0x000d1b6e bl 0x38ce0 | asprintf ()
0x000d1b72 b 0xd1a62 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x5725c */
| #include <stdint.h>
|
; (fcn) sym.dlerror () | void dlerror () {
| int16_t var_0h;
| int16_t var_ch;
0x0005725c ldr r3, [pc, 0x138] |
0x0005725e ldr r2, [pc, 0x13c] | r2 = *(0x5739e);
0x00057260 push.w {r4, r5, r6, r7, r8, lr} |
0x00057264 sub sp, 0x10 |
0x00057266 add r3, pc | r3 = 0xae602;
0x00057268 ldr r6, [r3, r2] | r6 = *(0xae602);
0x0005726a ldr.w r5, [r6, 0x1c4] | r5 = *(0xae7c6);
| if (r5 != 0) {
0x0005726e cbz r5, 0x5727a |
0x00057270 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00057272 add sp, 0x10 |
0x00057274 pop.w {r4, r5, r6, r7, r8, lr} |
0x00057278 bx r3 | return uint32_t (*r3)() ();
| }
0x0005727a ldr r3, [pc, 0x108] |
0x0005727c mrc p15, 0, r7, c13, c0, 3 | __asm ("mrc p15, 0, r7, c13, c0, 3");
0x00057280 add r3, pc |
0x00057282 ldr r3, [r3] | r3 = *(0xae60a);
0x00057284 ldr r4, [r7, r3] | r4 = *((r7 + r3));
| if (r4 == 0) {
0x00057286 cbz r4, 0x572e0 | goto label_0;
| }
0x00057288 adds r3, r4, 1 | r3 = r4 + 1;
| if (r3 == r4) {
0x0005728a beq 0x57334 | goto label_3;
| }
0x0005728c ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
| if (r1 == 0) {
0x0005728e cbz r1, 0x572e0 | goto label_0;
| }
0x00057290 ldrb r3, [r4, 5] | r3 = *((r4 + 5));
0x00057292 cmp r3, 0 |
| if (r3 != 0) {
0x00057294 bne 0x5735a | goto label_4;
| }
0x00057296 ldr r3, [r4] | r3 = *(r4);
0x00057298 ldr r5, [r4, 8] | r5 = *((r4 + 8));
| if (r3 == 0) {
0x0005729a cbz r3, 0x572e8 | goto label_5;
| }
0x0005729c ldr r2, [pc, 0xe8] |
0x0005729e add r2, pc |
0x000572a0 ldr r2, [r2] | r2 = *(0xae62a);
0x000572a2 str r3, [r7, r2] | *((r7 + r2)) = r3;
0x000572a4 ldrb r3, [r5] | r3 = *(r5);
0x000572a6 cmp r3, 0 |
| if (r3 != 0) {
0x000572a8 bne 0x57342 | goto label_6;
| }
0x000572aa ldr.w r8, [pc, 0xf4] | r8 = *(0x000573a0);
0x000572ae add r8, pc | r8 += pc;
| label_1:
0x000572b0 ldr r0, [pc, 0xf0] |
0x000572b2 movs r2, 5 | r2 = 5;
0x000572b4 add r0, pc | r0 = 0xae65c;
0x000572b6 bl 0x28688 | dcgettext (r0, r1);
0x000572ba ldr r1, [pc, 0xec] |
0x000572bc mov r3, r8 | r3 = r8;
0x000572be mov r2, r5 | r2 = r5;
0x000572c0 str r0, [sp] | *(sp) = r0;
0x000572c2 add r0, sp, 0xc | r0 += var_ch;
0x000572c4 add r1, pc | r1 = 0xae672;
0x000572c6 bl 0x38ce0 | asprintf ()
0x000572ca ldr r3, [pc, 0xc0] |
0x000572cc cmp r0, 0 |
0x000572ce ldr r2, [r4] | r2 = *(r4);
0x000572d0 add r3, pc |
0x000572d2 ldr r3, [r3] | r3 = *(0xae662);
0x000572d4 str r2, [r7, r3] | *((r7 + r3)) = r2;
0x000572d6 mov.w r3, 1 | r3 = 1;
0x000572da strb r3, [r4, 5] | *((r4 + 5)) = r3;
| if (r0 >= 0) {
0x000572dc bge 0x57314 | goto label_7;
| }
| do {
0x000572de ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
| label_0:
0x000572e0 mov r0, r5 | r0 = r5;
0x000572e2 add sp, 0x10 |
0x000572e4 pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x000572e8 ldrb r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x000572ea cbnz r3, 0x5734a | goto label_8;
| }
0x000572ec ldr r7, [pc, 0xbc] |
0x000572ee add r7, pc | r7 = 0xae69e;
| label_2:
0x000572f0 ldr r0, [pc, 0xbc] |
0x000572f2 movs r2, 5 | r2 = 5;
0x000572f4 add r0, pc | r0 = 0xae6a8;
0x000572f6 bl 0x28688 | dcgettext (r0, r1);
0x000572fa ldr r1, [pc, 0xb8] |
0x000572fc mov r3, r7 | r3 = r7;
0x000572fe str r0, [sp] | *(sp) = r0;
0x00057300 mov r2, r5 | r2 = r5;
0x00057302 add r0, sp, 0xc | r0 += var_ch;
0x00057304 add r1, pc | r1 = 0xae6be;
0x00057306 bl 0x38ce0 | r0 = asprintf ()
0x0005730a cmp r0, 0 |
0x0005730c mov.w r3, 1 | r3 = 1;
0x00057310 strb r3, [r4, 5] | *((r4 + 5)) = r3;
0x00057312 blt 0x572de |
| } while (r0 < 0);
| label_7:
0x00057314 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x00057316 cmp r3, 1 |
| if (r3 == 1) {
0x00057318 beq 0x57350 | goto label_9;
| }
0x0005731a cmp r3, 2 |
| if (r3 != 2) {
0x0005731c bne 0x57324 | goto label_10;
| }
0x0005731e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00057320 blx 0x1ded4 | fcn_0001ded4 ();
| do {
| label_10:
0x00057324 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00057326 movs r3, 2 | r3 = 2;
0x00057328 strb r3, [r4, 4] | *((r4 + 4)) = r3;
0x0005732a mov r0, r5 | r0 = r5;
0x0005732c str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x0005732e add sp, 0x10 |
0x00057330 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00057334 ldr r3, [pc, 0x58] |
0x00057336 add r3, pc |
0x00057338 ldr r3, [r3] | r3 = *(0xae6ca);
0x0005733a str r5, [r7, r3] | *((r7 + r3)) = r5;
0x0005733c ldr r5, [pc, 0x78] |
0x0005733e add r5, pc | r5 = 0xae6fa;
0x00057340 b 0x572e0 | goto label_0;
| label_6:
0x00057342 ldr.w r8, [pc, 0x78] | r8 = *(0x000573bc);
0x00057346 add r8, pc | r8 += pc;
0x00057348 b 0x572b0 | goto label_1;
| label_8:
0x0005734a ldr r7, [pc, 0x74] |
0x0005734c add r7, pc | r7 = 0xae712;
0x0005734e b 0x572f0 | goto label_2;
| label_9:
0x00057350 ldr.w r3, [r6, 0x1b4] | r3 = *((r6 + 0x1b4));
0x00057354 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00057356 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00057358 b 0x57324 |
| } while (1);
| label_4:
0x0005735a ldr r3, [pc, 0x38] |
0x0005735c add r3, pc |
0x0005735e ldr r3, [r3] | r3 = *(0xae6f6);
0x00057360 str r5, [r7, r3] | *((r7 + r3)) = r5;
0x00057362 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x00057364 cmp r3, 1 |
| if (r3 == 1) {
0x00057366 beq 0x5737a | goto label_11;
| }
0x00057368 cmp r3, 2 |
| if (r3 != 2) {
0x0005736a bne 0x57372 | goto label_12;
| }
0x0005736c mov r0, r1 | r0 = r1;
0x0005736e blx 0x1ded4 | fcn_0001ded4 ();
| do {
| label_12:
0x00057372 mov r0, r4 | r0 = r4;
0x00057374 blx 0x1ded4 | fcn_0001ded4 ();
0x00057378 b 0x572e0 | goto label_0;
| label_11:
0x0005737a ldr.w r3, [r6, 0x1b4] | r3 = *((r6 + 0x1b4));
0x0005737e mov r0, r1 | r0 = r1;
0x00057380 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00057382 b 0x57372 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x3c534 */
| #include <stdint.h>
|
; (fcn) sym.psignal () | void psignal (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0003c534 push {r4, r5, r6, r7, lr} |
0x0003c536 mov r5, r0 | r5 = r0;
0x0003c538 sub sp, 0x14 |
0x0003c53a cmp r1, 0 |
| if (r1 == 0) {
0x0003c53c beq 0x3c5b6 | goto label_2;
| }
0x0003c53e mov r4, r1 | r4 = r1;
0x0003c540 ldrb r3, [r1] | r3 = *(r1);
| if (r3 == 0) {
0x0003c542 cbz r3, 0x3c574 | goto label_3;
| }
0x0003c544 ldr r6, [pc, 0x88] |
0x0003c546 add r6, pc | r6 = 0x78b1a;
| label_0:
0x0003c548 cmp r5, 0x40 |
| if (r5 > 0x40) {
0x0003c54a bhi 0x3c57e | goto label_4;
| }
| do {
0x0003c54c ldr r3, [pc, 0x84] |
0x0003c54e add r3, pc | r3 = 0x78b26;
0x0003c550 ldr.w r1, [r3, r5, lsl 2] | r1 = *(0x78b26);
| if (r1 == 0) {
0x0003c554 cbz r1, 0x3c57e | goto label_4;
| }
0x0003c556 ldr r0, [pc, 0x80] |
0x0003c558 movs r2, 5 | r2 = 5;
0x0003c55a add r0, pc | r0 = 0x78b38;
0x0003c55c bl 0x28688 | dcgettext (r0, r1);
0x0003c560 ldr r1, [pc, 0x78] |
0x0003c562 add r1, pc | r1 = 0x78b42;
| label_1:
0x0003c564 str r0, [sp] | *(sp) = r0;
0x0003c566 mov r3, r6 | r3 = r6;
0x0003c568 mov r2, r4 | r2 = r4;
0x0003c56a movs r0, 0 | r0 = 0;
0x0003c56c bl 0x4bb90 | fcn_0004bb90 (r0);
0x0003c570 add sp, 0x14 |
0x0003c572 pop {r4, r5, r6, r7, pc} |
| label_3:
0x0003c574 ldr r6, [pc, 0x68] |
0x0003c576 cmp r5, 0x40 |
0x0003c578 add r6, pc | r6 = 0x78b5c;
0x0003c57a mov r4, r6 | r4 = r6;
0x0003c57c bls 0x3c54c |
| } while (r5 < 0x40);
| label_4:
0x0003c57e ldr r7, [pc, 0x64] |
0x0003c580 movs r2, 5 | r2 = 5;
0x0003c582 ldr r1, [pc, 0x64] |
0x0003c584 add r7, pc | r7 = 0x78b6e;
0x0003c586 add r1, pc | r1 = 0x78b74;
0x0003c588 mov r0, r7 | r0 = r7;
0x0003c58a bl 0x28688 | dcgettext (r0, r1);
0x0003c58e mov r3, r6 | r3 = r6;
0x0003c590 mov r1, r0 | r1 = r0;
0x0003c592 mov r2, r4 | r2 = r4;
0x0003c594 add r0, sp, 0xc | r0 += var_ch;
0x0003c596 str r5, [sp] | *(sp) = r5;
0x0003c598 bl 0x38ce0 | r0 = asprintf ()
0x0003c59c cmp r0, 0 |
| if (r0 >= 0) {
0x0003c59e blt 0x3c5be |
0x0003c5a0 ldr r1, [pc, 0x48] |
0x0003c5a2 movs r0, 0 | r0 = 0;
0x0003c5a4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0003c5a6 add r1, pc | r1 = 0x78b96;
0x0003c5a8 bl 0x4bb90 | fcn_0004bb90 (r0);
0x0003c5ac ldr r0, [sp, 0xc] | r0 = var_ch;
0x0003c5ae blx 0x1ded4 | fcn_0001ded4 ();
0x0003c5b2 add sp, 0x14 |
0x0003c5b4 pop {r4, r5, r6, r7, pc} |
| label_2:
0x0003c5b6 ldr r6, [pc, 0x38] |
0x0003c5b8 add r6, pc | r6 = 0x78bae;
0x0003c5ba mov r4, r6 | r4 = r6;
0x0003c5bc b 0x3c548 | goto label_0;
| }
0x0003c5be ldr r1, [pc, 0x34] |
0x0003c5c0 movs r2, 5 | r2 = 5;
0x0003c5c2 mov r0, r7 | r0 = r7;
0x0003c5c4 add r1, pc | r1 = 0x78bbe;
0x0003c5c6 bl 0x28688 | dcgettext (r0, r1);
0x0003c5ca ldr r1, [pc, 0x2c] |
0x0003c5cc add r1, pc | r1 = 0x78bca;
0x0003c5ce b 0x3c564 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xba818 */
| #include <stdint.h>
|
; (fcn) sym.rcmd_af () | void rcmd_af (int16_t arg_2b8h, int16_t arg_2bch, int16_t arg_2c0h, int16_t arg1, int16_t arg2, char * arg3, char * arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| char * var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t fildes;
| int16_t var_1h;
| void * buf;
| int16_t var_44h;
| char * s;
| int16_t var_50h;
| int16_t var_4h;
| int32_t var_8h_3;
| int16_t var_ch;
| int32_t var_eh;
| char * var_60h;
| int16_t var_1h_2;
| int32_t var_4h_2;
| int32_t var_8h_2;
| int32_t var_ch_2;
| int32_t var_10h;
| int32_t var_14h_2;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int32_t var_84h;
| int32_t var_84h_2;
| int32_t var_8ch;
| int32_t var_8ch_2;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_c8h;
| int16_t var_148h;
| int16_t var_1c8h;
| int16_t var_1cah;
| int16_t var_294h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000ba818 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ba81c sub.w sp, sp, 0x294 |
0x000ba820 ldrh.w r6, [sp, 0x2c0] | r6 = *(arg_2c0h);
0x000ba824 movw r4, 0xfffd | r4 = 0xfffd;
0x000ba828 str r0, [sp, 0x28] | var_28h = r0;
0x000ba82a ands r4, r6 | r4 &= r6;
0x000ba82c strd r2, r3, [sp, 0x30] | __asm ("strd r2, r3, [var_30h]");
0x000ba830 cmp r4, 0 |
0x000ba832 it ne |
| if (r4 != 0) {
0x000ba834 cmpne r6, 0xa | __asm ("cmpne r6, 0xa");
| }
0x000ba836 ite ne |
| if (r4 == 0) {
0x000ba838 movne r4, 1 | r4 = 1;
| }
| if (r4 != 0) {
0x000ba83a moveq r4, 0 | r4 = 0;
| }
| if (r4 != 0) {
0x000ba83c bne.w 0xbad68 | goto label_11;
| }
0x000ba840 mov r5, r1 | r5 = r1;
0x000ba842 add r7, sp, 0x78 | r7 += var_78h;
0x000ba844 bl 0x84580 | getpid ();
0x000ba848 ldr r2, [pc, 0x374] |
0x000ba84a rev16 r3, r5 | __asm ("rev16 r3, r5");
0x000ba84c str r0, [sp, 0x14] | var_14h = r0;
0x000ba84e movs r0, 2 | r0 = 2;
0x000ba850 str r6, [sp, 0x7c] | var_7ch = r6;
0x000ba852 add r6, sp, 0x48 | r6 += s;
0x000ba854 uxth r3, r3 | r3 = (int16_t) r3;
0x000ba856 add r2, pc | r2 = 0x17541a;
0x000ba858 movs r1, 8 | r1 = 8;
0x000ba85a str r0, [sp, 0x78] | var_78h = r0;
0x000ba85c movs r5, 1 | r5 = 1;
0x000ba85e mov r0, r6 | r0 = r6;
0x000ba860 strd r4, r4, [sp, 0x84] | __asm ("strd r4, r4, [var_84h]");
0x000ba864 strd r4, r4, [sp, 0x8c] | __asm ("strd r4, r4, [var_8ch]");
0x000ba868 str r4, [sp, 0x94] | var_94h = r4;
0x000ba86a str r5, [sp, 0x80] | var_80h = r5;
0x000ba86c bl 0x3cab0 | snprintf ();
0x000ba870 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000ba872 add r3, sp, 0x38 | r3 += var_38h;
0x000ba874 mov r2, r7 | r2 = r7;
0x000ba876 mov r1, r6 | r1 = r6;
0x000ba878 str r3, [sp, 0x18] | var_18h = r3;
0x000ba87a ldr r0, [r0] | r0 = *(r0);
0x000ba87c bl 0x975b4 | r0 = getaddrinfo ();
0x000ba880 cmp r0, 0 |
| if (r0 != 0) {
0x000ba882 bne.w 0xbad14 | goto label_12;
| }
0x000ba886 ldr r6, [sp, 0x18] | r6 = var_18h;
0x000ba888 add.w sb, sp, 0x50 | sb += var_50h;
0x000ba88c strh.w r5, [sb, 4] | var_4h = r5;
0x000ba890 strh.w r5, [sb, 0xc] | var_ch = r5;
0x000ba894 ldr r4, [r6] | r4 = *(r6);
0x000ba896 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000ba898 cmp r3, 0 |
| if (r3 == 0) {
0x000ba89a beq.w 0xbaa56 | goto label_13;
| }
0x000ba89e ldr r5, [pc, 0x324] |
0x000ba8a0 add r5, pc | r5 = 0x17546a;
0x000ba8a2 ldr r0, [r5] | r0 = *(0x17546a);
0x000ba8a4 blx 0x1ded4 | fcn_0001ded4 ();
0x000ba8a8 ldr r3, [r6] | r3 = *(r6);
0x000ba8aa ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x000ba8ac bl 0x6a858 | r0 = strdup ();
0x000ba8b0 mov r4, r0 | r4 = r0;
0x000ba8b2 str r0, [r5] | *(r5) = r0;
0x000ba8b4 cmp r0, 0 |
| if (r0 == 0) {
0x000ba8b6 beq.w 0xbae36 | goto label_14;
| }
0x000ba8ba ldr r3, [sp, 0x28] | r3 = var_28h;
0x000ba8bc str r0, [r3] | *(r3) = r0;
0x000ba8be ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ba8c0 ldr r4, [r3] | r4 = *(r3);
| label_1:
0x000ba8c2 ldr r3, [pc, 0x304] |
0x000ba8c4 add r1, sp, 0xc8 | r1 += var_c8h;
0x000ba8c6 vldr d16, [pc, 0x2d8] | __asm ("vldr d16, aav.0x000000ff");
0x000ba8ca movs r0, 0 | r0 = 0;
0x000ba8cc movs r5, 0 | r5 = 0;
0x000ba8ce movs r7, 1 | r7 = 1;
0x000ba8d0 add r3, pc | r3 = 0x17549e;
0x000ba8d2 mrc p15, 0, fp, c13, c0, 3 | __asm ("mrc p15, 0, fp, c13, c0, 3");
0x000ba8d6 str r3, [sp, 0x20] | var_20h = r3;
0x000ba8d8 mov sl, sb | sl = sb;
0x000ba8da ldr r3, [pc, 0x2f0] |
0x000ba8dc add.w r8, sp, 0x3c | r8 += fildes;
0x000ba8e0 vstr d16, [sp, 0xc8] | __asm ("vstr d16, [sp, 0xc8]");
0x000ba8e4 add r3, pc | r3 = 0x1754b6;
0x000ba8e6 str r3, [sp, 0x24] | var_24h = r3;
0x000ba8e8 add r3, sp, 0x148 | r3 += var_148h;
0x000ba8ea mov r2, r3 | r2 = r3;
0x000ba8ec str r3, [sp, 0x2c] | var_2ch = r3;
0x000ba8ee bl 0x2ca0c | sigprocmask ();
0x000ba8f2 movw r3, 0x3ff | r3 = 0x3ff;
0x000ba8f6 str.w r3, [r8] | __asm ("str.w r3, [r8]");
| label_0:
0x000ba8fa ldrh r1, [r4, 4] | r1 = *((r4 + 4));
0x000ba8fc mov r0, r8 | r0 = r8;
0x000ba8fe bl 0xba728 | rresvport_af ();
0x000ba902 subs r6, r0, 0 | r6 -= fildes;
| if (r6 < fildes) {
0x000ba904 blt 0xba968 | goto label_15;
| }
| do {
0x000ba906 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000ba908 movs r1, 8 | r1 = 8;
0x000ba90a bl 0x9e9f0 | fcntl ();
0x000ba90e ldrd r2, r1, [r4, 0x10] | __asm ("ldrd r2, r1, [r4, 0x10]");
0x000ba912 mov r0, r6 | r0 = r6;
0x000ba914 bl 0xad1e8 | r0 = connect (r0, r1, r2);
0x000ba918 cmp r0, 0 |
| if (r0 >= 0) {
0x000ba91a bge.w 0xbaa5c | goto label_16;
| }
0x000ba91e mov r0, r6 | r0 = r6;
0x000ba920 bl 0x9ede0 | close (r0);
0x000ba924 ldr r3, [pc, 0x280] |
0x000ba926 add r3, pc |
0x000ba928 ldr r3, [r3] | r3 = *(0x1754d2);
0x000ba92a ldr.w r6, [fp, r3] | r6 = *((fp + r3));
0x000ba92e cmp r6, 0x62 |
| if (r6 == 0x62) {
0x000ba930 beq.w 0xbaa4a | goto label_17;
| }
0x000ba934 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000ba936 cmp r6, 0x6f |
0x000ba938 it eq |
| if (r6 != 0x6f) {
0x000ba93a moveq r5, 1 | r5 = 1;
| }
| if (r3 != 0) {
0x000ba93c cbnz r3, 0xba9a4 | goto label_18;
| }
0x000ba93e cmp r7, 0x10 |
0x000ba940 ite gt |
| if (r7 <= 0x10) {
0x000ba942 movgt r5, 0 | r5 = 0;
| }
| if (r7 > 0x10) {
0x000ba944 andle r5, r5, 1 | r5 &= 1;
| }
0x000ba948 cmp r5, 0 |
| if (r5 == 0) {
0x000ba94a beq.w 0xbac2a | goto label_19;
| }
0x000ba94e mov r0, r7 | r0 = r7;
0x000ba950 mov r5, r3 | r5 = r3;
0x000ba952 bl 0x835e0 | sleep ();
0x000ba956 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ba958 mov r0, r8 | r0 = r8;
0x000ba95a lsls r7, r7, 1 | r7 <<= 1;
0x000ba95c ldr r4, [r3] | r4 = *(r3);
0x000ba95e ldrh r1, [r4, 4] | r1 = *((r4 + 4));
0x000ba960 bl 0xba728 | rresvport_af ();
0x000ba964 subs r6, r0, 0 | r6 -= fildes;
0x000ba966 bge 0xba906 |
| } while (r6 >= fildes);
| label_15:
0x000ba968 ldr r3, [pc, 0x240] |
0x000ba96a mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x000ba96e add r3, pc |
0x000ba970 ldr r3, [r3] | r3 = *(0x17551e);
0x000ba972 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000ba974 cmp r3, 0xb |
| if (r3 == 0xb) {
0x000ba976 beq.w 0xbace0 | goto label_20;
| }
0x000ba97a ldr r1, [pc, 0x254] |
0x000ba97c movs r0, 0 | r0 = 0;
0x000ba97e add r1, pc | r1 = 0x175554;
0x000ba980 bl 0x4bb90 | fcn_0004bb90 (r0);
| label_3:
0x000ba984 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000ba986 movs r2, 0 | r2 = 0;
0x000ba988 movs r0, 2 | r0 = 2;
0x000ba98a bl 0x2ca0c | sigprocmask ();
0x000ba98e ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ba990 ldr r0, [r3] | r0 = *(r3);
0x000ba992 bl 0x98b94 | freeaddrinfo ();
| label_2:
0x000ba996 mov.w r6, -1 | r6 = -1;
0x000ba99a mov r0, r6 | r0 = r6;
0x000ba99c add.w sp, sp, 0x294 |
0x000ba9a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x000ba9a4 movs r3, 0 | r3 = 0;
0x000ba9a6 ldrd r1, r0, [r4, 0x10] | __asm ("ldrd r1, r0, [r4, 0x10]");
0x000ba9a8 asrs r4, r0, 0x20 | r4 = r0 >> 0x20;
0x000ba9aa add.w sb, sp, 0x98 | sb += var_98h;
0x000ba9ae strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x000ba9b2 str r3, [sp, 0x1c8] | var_1c8h = r3;
0x000ba9b4 movs r3, 1 | r3 = 1;
0x000ba9b6 mov r2, sb | r2 = sb;
0x000ba9b8 str r3, [sp, 8] | var_8h = r3;
0x000ba9ba movs r3, 0x2e | r3 = 0x2e;
0x000ba9bc bl 0xbc824 | r0 = getnameinfo ();
0x000ba9c0 ldrd r1, r0, [sp, 0x20] | __asm ("ldrd r1, r0, [var_20h]");
0x000ba9c4 movs r2, 5 | r2 = 5;
0x000ba9c6 bl 0x28688 | dcgettext (r0, r1);
0x000ba9ca add r3, sp, 0x1c8 | r3 += var_1c8h;
0x000ba9cc mov r1, r0 | r1 = r0;
0x000ba9ce mov r2, sb | r2 = sb;
0x000ba9d0 mov r0, r3 | r0 = r3;
0x000ba9d2 str r3, [sp, 0x1c] | var_1ch = r3;
0x000ba9d4 bl 0x38ce0 | r0 = asprintf ()
0x000ba9d8 cmp r0, 0 |
| if (r0 >= 0) {
0x000ba9da blt 0xba9ee |
0x000ba9dc ldr r1, [pc, 0x1f4] |
0x000ba9de movs r0, 0 | r0 = 0;
0x000ba9e0 ldr r2, [sp, 0x1c8] | r2 = var_1c8h;
0x000ba9e2 add r1, pc | r1 = 0x1755ba;
0x000ba9e4 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000ba9e8 ldr r0, [sp, 0x1c8] | r0 = var_1c8h;
0x000ba9ea blx 0x1ded4 | fcn_0001ded4 ();
| }
0x000ba9ee ldr r3, [pc, 0x1c0] |
0x000ba9f0 movs r0, 0 | r0 = 0;
0x000ba9f2 add r3, pc |
0x000ba9f4 ldr r3, [r3] | r3 = *(0x1755a8);
0x000ba9f6 str.w r6, [fp, r3] | __asm ("str.w r6, [fp, r3]");
0x000ba9fa movs r6, 0 | r6 = 0;
0x000ba9fc bl 0x39058 | perror (r0);
0x000baa00 ldr r4, [r4, 0x1c] | r4 = *((r4 + 0x1c));
0x000baa02 mov.w ip, 1 |
0x000baa06 movs r3, 0x2e | r3 = 0x2e;
0x000baa08 mov r2, sb | r2 = sb;
0x000baa0a ldrd r1, r0, [r4, 0x10] | __asm ("ldrd r1, r0, [r4, 0x10]");
0x000baa0e strd r6, ip, [sp, 4] | __asm ("strd r6, ip, [var_8h]");
0x000baa12 str r6, [sp] | *(sp) = r6;
0x000baa14 bl 0xbc824 | getnameinfo ();
0x000baa18 ldr r1, [pc, 0x1bc] |
0x000baa1a movs r2, 5 | r2 = 5;
0x000baa1c ldr r0, [pc, 0x1bc] |
0x000baa1e add r1, pc | r1 = 0x1755fa;
0x000baa20 add r0, pc | r0 = 0x175600;
0x000baa22 bl 0x28688 | dcgettext (r0, r1);
0x000baa26 mov r2, sb | r2 = sb;
0x000baa28 mov r1, r0 | r1 = r0;
0x000baa2a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000baa2c bl 0x38ce0 | r0 = asprintf ()
0x000baa30 cmp r0, r6 |
| if (r0 < r6) {
0x000baa32 blt.w 0xba8fa | goto label_0;
| }
0x000baa36 ldr r1, [pc, 0x1a8] |
0x000baa38 mov r0, r6 | r0 = r6;
0x000baa3a ldr r2, [sp, 0x1c8] | r2 = var_1c8h;
0x000baa3c add r1, pc | r1 = 0x175622;
0x000baa3e bl 0x4bb90 | fcn_0004bb90 (r0);
0x000baa42 ldr r0, [sp, 0x1c8] | r0 = var_1c8h;
0x000baa44 blx 0x1ded4 | fcn_0001ded4 ();
0x000baa48 b 0xba8fa | goto label_0;
| label_17:
0x000baa4a ldr.w r3, [r8] | r3 = *(r8);
0x000baa4e subs r3, 1 | r3--;
0x000baa50 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x000baa54 b 0xba8fa | goto label_0;
| label_13:
0x000baa56 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000baa58 str r3, [r2] | *(r2) = r3;
0x000baa5a b 0xba8c2 | goto label_1;
| label_16:
0x000baa5c ldr.w r3, [r8] | r3 = *(r8);
0x000baa60 mov sb, sl | sb = sl;
0x000baa62 subs r3, 1 | r3--;
0x000baa64 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x000baa68 ldr r3, [sp, 0x2bc] | r3 = *(arg_2bch);
0x000baa6a cmp r3, 0 |
| if (r3 == 0) {
0x000baa6c beq.w 0xbacfc | goto label_21;
| }
0x000baa70 ldrh r1, [r4, 4] | r1 = *((r4 + 4));
0x000baa72 mov r0, r8 | r0 = r8;
0x000baa74 bl 0xba728 | rresvport_af ();
0x000baa78 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000baa7a subs r7, r0, 0 | r7 -= fildes;
0x000baa7c add r5, sp, 0x40 | r5 += buf;
0x000baa7e str r3, [r5] | *(r5) = r3;
| if (r7 < fildes) {
0x000baa80 blt.w 0xbacd8 | goto label_6;
| }
0x000baa84 movs r1, 1 | r1 = 1;
0x000baa86 add r4, sp, 0x60 | r4 += var_60h;
0x000baa88 bl 0xad3a0 | listen (r0, r1);
0x000baa8c ldr r2, [pc, 0x154] |
0x000baa8e movs r1, 8 | r1 = 8;
0x000baa90 ldr.w r3, [r8] | r3 = *(r8);
0x000baa94 mov r0, r4 | r0 = r4;
0x000baa96 add r2, pc | r2 = 0x17567e;
0x000baa98 mov fp, r3 |
0x000baa9a bl 0x3cab0 | snprintf ();
0x000baa9e mov r0, r4 | r0 = r4;
0x000baaa0 bl 0x6ae40 | strlen ();
0x000baaa4 mov r1, r4 | r1 = r4;
0x000baaa6 adds r2, r0, 1 | r2 += var_1h_2;
0x000baaa8 mov r0, r6 | r0 = r6;
0x000baaaa bl 0x9e6c0 | r0 = write (r0, r1, r2);
0x000baaae mov sl, r0 | sl = r0;
0x000baab0 mov r0, r4 | r0 = r4;
0x000baab2 bl 0x6ae40 | strlen ();
0x000baab6 adds r0, 1 | r0++;
0x000baab8 cmp r0, sl |
| if (r0 != sl) {
0x000baaba bne.w 0xbad78 | goto label_22;
| }
0x000baabe ldr r3, [pc, 0xf4] |
0x000baac0 movs r2, 0 | r2 = 0;
0x000baac2 str.w r6, [sb] | __asm ("str.w r6, [sb]");
0x000baac6 mrc p15, 0, sl, c13, c0, 3 | __asm ("mrc p15, 0, sl, c13, c0, 3");
0x000baaca str.w r7, [sb, 8] | __asm ("str.w r7, [var_8h_3]");
0x000baace movs r1, 2 | r1 = 2;
0x000baad0 add r3, pc |
0x000baad2 ldr r3, [r3] | r3 = *(0x17568a);
0x000baad4 mov r0, sb | r0 = sb;
0x000baad6 str.w r2, [sl, r3] | __asm ("str.w r2, [sl, r3]");
0x000baada mov.w r2, -1 | r2 = -1;
0x000baade bl 0xa2d84 | r0 = poll ();
0x000baae2 cmp r0, 0 |
| if (r0 <= 0) {
0x000baae4 ble.w 0xbadba | goto label_23;
| }
0x000baae8 ldrh.w r3, [sb, 0xe] | r3 = var_eh;
0x000baaec lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 >= r3) {
0x000baaee bpl.w 0xbadba | goto label_23;
| }
0x000baaf2 add.w sb, sp, 0x1c8 | sb += var_1c8h;
0x000baaf6 b 0xbab04 |
| while (r1 == var_1h) {
0x000baaf8 add r3, pc | r3 += pc;
0x000baafa ldr r3, [r3] | r3 = *(r3);
0x000baafc ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x000bab00 cmp r3, 4 |
| if (r3 != 4) {
0x000bab02 bne 0xbab14 | goto label_24;
| }
0x000bab04 mov r1, sb | r1 = sb;
0x000bab06 mov r2, r5 | r2 = r5;
0x000bab08 mov r0, r7 | r0 = r7;
0x000bab0a bl 0xad14c | accept (r0, r1, r2);
0x000bab0e adds r1, r0, 1 | r1 += var_1h;
0x000bab10 ldr r3, [pc, 0xa4] | r3 = *(0xbabb8);
0x000bab12 beq 0xbaaf8 |
| }
| label_24:
0x000bab14 ldrh.w r2, [sp, 0x1c8] | r2 = var_1c8h;
0x000bab18 mov r3, r0 | r3 = r0;
0x000bab1a cmp r2, 2 |
| if (r2 != 2) {
0x000bab1c beq 0xbab24 |
0x000bab1e cmp r2, 0xa |
| if (r2 != 0xa) {
0x000bab20 bne.w 0xbac62 | goto label_25;
| }
| }
0x000bab24 mov r0, r7 | r0 = r7;
0x000bab26 ldrh.w sb, [sp, 0x1ca] | sb = var_1cah;
0x000bab2a str r3, [sp, 0x14] | var_14h = r3;
0x000bab2c bl 0x9ede0 | close (r0);
0x000bab30 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000bab32 rev16.w sb, sb | __asm ("rev16.w sb, sb");
0x000bab36 uxth.w sb, sb | sb = (int16_t) sb;
0x000bab3a cmp r3, 0 |
| if (r3 < 0) {
0x000bab3c blt.w 0xbadfc | goto label_26;
| }
0x000bab40 ldr r2, [sp, 0x2bc] | r2 = *(arg_2bch);
0x000bab42 sub.w sb, sb, 0x200 | sb -= 0x200;
0x000bab46 cmp.w sb, 0x200 |
0x000bab4a str r3, [r2] | *(r2) = r3;
| if (sb >= 0x200) {
0x000bab4c bhs.w 0xbac78 | goto label_27;
| }
| label_4:
0x000bab50 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bab52 mrc p15, 0, r7, c13, c0, 3 | __asm ("mrc p15, 0, r7, c13, c0, 3");
0x000bab56 mov r0, r3 | r0 = r3;
0x000bab58 str r3, [r4] | *(r4) = r3;
0x000bab5a bl 0x6ae40 | strlen ();
0x000bab5e ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bab60 adds r0, 1 | r0++;
0x000bab62 str r0, [r4, 4] | var_4h_2 = r0;
0x000bab64 str r3, [r4, 8] | var_8h_2 = r3;
0x000bab66 mov r0, r3 | r0 = r3;
0x000bab68 bl 0x6ae40 | strlen ();
0x000bab6c ldr r3, [sp, 0x2b8] | r3 = *(arg_2b8h);
0x000bab6e adds r0, 1 | r0++;
0x000bab70 str r0, [r4, 0xc] | var_ch_2 = r0;
0x000bab72 str r3, [r4, 0x10] | var_10h = r3;
0x000bab74 mov r0, r3 | r0 = r3;
0x000bab76 bl 0x6ae40 | strlen ();
0x000bab7a adds r0, 1 | r0++;
0x000bab7c str r0, [r4, 0x14] | var_14h_2 = r0;
0x000bab7e b 0xbab8a |
| while (r0 == 1) {
0x000bab80 add r3, pc | r3 += pc;
0x000bab82 ldr r3, [r3] | r3 = *(r3);
0x000bab84 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000bab86 cmp r3, 4 |
| if (r3 != 4) {
0x000bab88 bne 0xbab9a | goto label_28;
| }
0x000bab8a movs r2, 3 | r2 = 3;
0x000bab8c mov r1, r4 | r1 = r4;
0x000bab8e mov r0, r6 | r0 = r6;
0x000bab90 bl 0xa62e4 | writev ();
0x000bab94 adds r0, 1 | r0++;
0x000bab96 ldr r3, [pc, 0x24] | r3 = *(0xbabbe);
0x000bab98 beq 0xbab80 |
| }
| label_28:
0x000bab9a mrc p15, 0, r4, c13, c0, 3 | __asm ("mrc p15, 0, r4, c13, c0, 3");
0x000bab9e b 0xbabf4 |
| while (r2 == var_1h) {
0x000babe8 add r3, pc | r3 += pc;
0x000babea ldr r3, [r3] | r3 = *(r3);
0x000babec ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000babee cmp r3, 4 |
| if (r3 != 4) {
0x000babf0 bne.w 0xbad2a | goto label_29;
| }
0x000babf4 movs r2, 1 | r2 = 1;
0x000babf6 mov r1, r5 | r1 = r5;
0x000babf8 mov r0, r6 | r0 = r6;
0x000babfa bl 0x9e640 | read (r0, r1, r2);
0x000babfe adds r2, r0, 1 | r2 += var_1h;
0x000bac00 ldr r3, [pc, 0x284] | r3 = *(0xbae88);
0x000bac02 beq 0xbabe8 |
| }
0x000bac04 cmp r0, 1 |
| if (r0 != 1) {
0x000bac06 bne.w 0xbae5a | goto label_30;
| }
0x000bac0a ldrb r2, [r5] | r2 = *(r5);
0x000bac0c cmp r2, 0 |
| if (r2 != 0) {
0x000bac0e bne 0xbacb6 | goto label_31;
| }
0x000bac10 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000bac12 movs r0, 2 | r0 = 2;
0x000bac14 bl 0x2ca0c | sigprocmask ();
0x000bac18 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000bac1a ldr r0, [r3] | r0 = *(r3);
0x000bac1c bl 0x98b94 | freeaddrinfo ();
0x000bac20 mov r0, r6 | r0 = r6;
0x000bac22 add.w sp, sp, 0x294 |
0x000bac26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x000bac2a ldr r3, [sp, 0x18] | r3 = var_18h;
0x000bac2c ldr r0, [r3] | r0 = *(r3);
0x000bac2e bl 0x98b94 | freeaddrinfo ();
0x000bac32 ldr r3, [pc, 0x258] |
0x000bac34 add r1, sp, 0x1c8 | r1 += var_1c8h;
0x000bac36 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000bac38 add r3, pc |
0x000bac3a ldr r3, [r3] | r3 = *(0x175aca);
0x000bac3c ldr r4, [r2] | r4 = *(r2);
0x000bac3e movs r2, 0xc8 | r2 = 0xc8;
0x000bac40 ldr.w r0, [fp, r3] | r0 = *((fp + r3));
0x000bac44 bl 0x67bc4 | strerror_r ();
0x000bac48 ldr r1, [pc, 0x250] |
0x000bac4a mov r3, r0 | r3 = r0;
0x000bac4c mov r2, r4 | r2 = r4;
0x000bac4e mov r0, r5 | r0 = r5;
0x000bac50 add r1, pc | r1 = 0x175af0;
0x000bac52 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bac56 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000bac58 mov r2, r5 | r2 = r5;
0x000bac5a movs r0, 2 | r0 = 2;
0x000bac5c bl 0x2ca0c | sigprocmask ();
0x000bac60 b 0xba996 | goto label_2;
| label_25:
0x000bac62 str r0, [sp, 0x14] | var_14h = r0;
0x000bac64 mov r0, r7 | r0 = r7;
0x000bac66 bl 0x9ede0 | close (r0);
0x000bac6a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000bac6c cmp r3, 0 |
0x000bac6e itt ge |
| if (r3 < 0) {
0x000bac70 ldrge r2, [sp, 0x2bc] | r2 = *(arg_2bch);
| }
| if (r3 < 0) {
0x000bac72 strge r3, [r2] | *(r2) = r3;
| }
| if (r3 < 0) {
0x000bac74 blt.w 0xbadfc | goto label_26;
| }
| label_27:
0x000bac78 ldr r1, [pc, 0x224] |
0x000bac7a movs r2, 5 | r2 = 5;
0x000bac7c ldr r0, [pc, 0x224] |
0x000bac7e movs r5, 0 | r5 = 0;
0x000bac80 add r4, sp, 0x44 | r4 += var_44h;
0x000bac82 str r5, [sp, 0x44] | var_44h = r5;
0x000bac84 add r1, pc | r1 = 0x175b28;
0x000bac86 add r0, pc | r0 = 0x175b2e;
0x000bac88 bl 0x28688 | r0 = dcgettext (r0, r1);
0x000bac8c mov r1, r0 | r1 = r0;
0x000bac8e mov r0, r4 | r0 = r4;
0x000bac90 bl 0x38ce0 | r0 = asprintf ()
0x000bac94 cmp r0, r5 |
| if (r0 < r5) {
0x000bac96 blt 0xbacd2 | goto label_32;
| }
0x000bac98 ldr r1, [pc, 0x20c] |
0x000bac9a mov r0, r5 | r0 = r5;
0x000bac9c ldr r2, [sp, 0x44] | r2 = var_44h;
0x000bac9e add r1, pc | r1 = 0x175b4a;
0x000baca0 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000baca4 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000baca6 blx 0x1ded4 | fcn_0001ded4 ();
0x000bacaa b 0xbacd2 | goto label_32;
| do {
0x000bacac bl 0x9e6c0 | write (r0, r1, r2);
0x000bacb0 ldrb r3, [r5] | r3 = *(r5);
0x000bacb2 cmp r3, 0xa |
| if (r3 == 0xa) {
0x000bacb4 beq 0xbaccc | goto label_5;
| }
| label_31:
0x000bacb6 movs r2, 1 | r2 = 1;
0x000bacb8 mov r1, r5 | r1 = r5;
0x000bacba mov r0, r6 | r0 = r6;
0x000bacbc bl 0x9e640 | r0 = read (r0, r1, r2);
0x000bacc0 mov r2, r0 | r2 = r0;
0x000bacc2 mov r1, r5 | r1 = r5;
0x000bacc4 cmp r2, 1 |
0x000bacc6 mov.w r0, 2 | r0 = 2;
0x000bacca beq 0xbacac |
| } while (r2 == 1);
| do {
| label_5:
0x000baccc ldr.w r3, [r8] | r3 = *(r8);
0x000bacd0 mov fp, r3 |
| label_32:
0x000bacd2 mov r3, fp | r3 = fp;
0x000bacd4 cmp r3, 0 |
| if (r3 != 0) {
0x000bacd6 bne 0xbadb0 | goto label_33;
| }
| label_6:
0x000bacd8 mov r0, r6 | r0 = r6;
0x000bacda bl 0x9ede0 | close (r0);
0x000bacde b 0xba984 | goto label_3;
| label_20:
0x000bace0 ldr r1, [pc, 0x1c8] |
0x000bace2 movs r2, 5 | r2 = 5;
0x000bace4 ldr r0, [pc, 0x1c8] |
0x000bace6 add r1, pc | r1 = 0x175b96;
0x000bace8 add r0, pc | r0 = 0x175b9c;
0x000bacea bl 0x28688 | dcgettext (r0, r1);
0x000bacee ldr r1, [pc, 0x1c4] |
0x000bacf0 mov r2, r0 | r2 = r0;
0x000bacf2 movs r0, 0 | r0 = 0;
0x000bacf4 add r1, pc | r1 = 0x175bae;
0x000bacf6 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bacfa b 0xba984 | goto label_3;
| label_21:
0x000bacfc ldr r1, [pc, 0x1b8] |
0x000bacfe movs r2, 1 | r2 = 1;
0x000bad00 mov r0, r6 | r0 = r6;
0x000bad02 add r5, sp, 0x40 | r5 += buf;
0x000bad04 add r4, sp, 0x60 | r4 += var_60h;
0x000bad06 add r1, pc | r1 = 0x175bc2;
0x000bad08 bl 0x9e6c0 | write (r0, r1, r2);
0x000bad0c ldr r3, [sp, 0x2bc] | r3 = *(arg_2bch);
0x000bad0e str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x000bad12 b 0xbab50 | goto label_4;
| label_12:
0x000bad14 adds r5, r0, 2 | r5 = r0 + 2;
| if (r5 != r0) {
0x000bad16 bne 0xbad56 | goto label_34;
| }
0x000bad18 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000bad1a ldr r2, [r3] | r2 = *(r3);
| if (r2 == 0) {
0x000bad1c cbz r2, 0xbad56 | goto label_34;
| }
0x000bad1e ldr r1, [pc, 0x19c] |
0x000bad20 mov r0, r4 | r0 = r4;
0x000bad22 add r1, pc | r1 = 0x175be4;
0x000bad24 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bad28 b 0xba996 | goto label_2;
| label_29:
0x000bad2a add r4, sp, 0x44 | r4 += var_44h;
0x000bad2c movs r3, 0 | r3 = 0;
0x000bad2e str r3, [r4] | *(r4) = r3;
| label_9:
0x000bad30 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000bad32 mov r0, r4 | r0 = r4;
0x000bad34 ldr r1, [pc, 0x188] |
0x000bad36 ldr r2, [r3] | r2 = *(r3);
0x000bad38 add r1, pc | r1 = 0x175bfc;
0x000bad3a bl 0x38ce0 | r0 = asprintf ()
0x000bad3e cmp r0, 0 |
0x000bad40 blt 0xbaccc |
| } while (r0 < 0);
| label_10:
0x000bad42 ldr r1, [pc, 0x180] |
0x000bad44 movs r0, 0 | r0 = 0;
0x000bad46 ldr r2, [r4] | r2 = *(r4);
0x000bad48 add r1, pc | r1 = 0x175c12;
0x000bad4a bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bad4e ldr r0, [r4] | r0 = *(r4);
0x000bad50 blx 0x1ded4 | fcn_0001ded4 ();
0x000bad54 b 0xbaccc | goto label_5;
| label_34:
0x000bad56 bl 0x98bb4 | gai_strerror ();
0x000bad5a ldr r1, [pc, 0x16c] |
0x000bad5c mov r2, r0 | r2 = r0;
0x000bad5e movs r0, 0 | r0 = 0;
0x000bad60 add r1, pc | r1 = 0x175c2e;
0x000bad62 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bad66 b 0xba996 | goto label_2;
| label_11:
0x000bad68 ldr r3, [pc, 0x124] |
0x000bad6a mrc p15, 0, r2, c13, c0, 3 | __asm ("mrc p15, 0, r2, c13, c0, 3");
0x000bad6e movs r1, 0x61 | r1 = 0x61;
0x000bad70 add r3, pc |
0x000bad72 ldr r3, [r3] | r3 = *(0x175c04);
0x000bad74 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x000bad76 b 0xba996 | goto label_2;
| label_22:
0x000bad78 ldr r1, [pc, 0x150] |
0x000bad7a movs r4, 0 | r4 = 0;
0x000bad7c ldr r0, [pc, 0x150] |
0x000bad7e movs r2, 5 | r2 = 5;
0x000bad80 str r4, [sp, 0x1c8] | var_1c8h = r4;
0x000bad82 add r1, pc | r1 = 0x175c52;
0x000bad84 add r0, pc | r0 = 0x175c58;
0x000bad86 bl 0x28688 | r0 = dcgettext (r0, r1);
0x000bad8a mov r1, r0 | r1 = r0;
0x000bad8c add r0, sp, 0x1c8 | r0 += var_1c8h;
0x000bad8e bl 0x38ce0 | r0 = asprintf ()
0x000bad92 cmp r0, r4 |
| if (r0 < r4) {
0x000bad94 blt 0xbada8 | goto label_7;
| }
0x000bad96 ldr r1, [pc, 0x13c] |
0x000bad98 mov r0, r4 | r0 = r4;
0x000bad9a ldr r2, [sp, 0x1c8] | r2 = var_1c8h;
0x000bad9c add r1, pc | r1 = 0x175c76;
0x000bad9e bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bada2 ldr r0, [sp, 0x1c8] | r0 = var_1c8h;
0x000bada4 blx 0x1ded4 | fcn_0001ded4 ();
| do {
| label_7:
0x000bada8 mov r0, r7 | r0 = r7;
0x000badaa bl 0x9ede0 | close (r0);
0x000badae b 0xbacd8 | goto label_6;
| label_33:
0x000badb0 ldr r3, [sp, 0x2bc] | r3 = *(arg_2bch);
0x000badb2 ldr r0, [r3] | r0 = *(r3);
0x000badb4 bl 0x9ede0 | close (r0);
0x000badb8 b 0xbacd8 | goto label_6;
| label_23:
0x000badba ldr r3, [pc, 0xd8] |
0x000badbc movs r2, 0 | r2 = 0;
0x000badbe str r2, [sp, 0x1c8] | var_1c8h = r2;
0x000badc0 add r3, pc |
0x000badc2 ldr r3, [r3] | r3 = *(0x175c5a);
0x000badc4 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
| if (r3 != 0) {
0x000badc8 cbnz r3, 0xbae08 | goto label_35;
| }
0x000badca add.w sb, sp, 0x1c8 | sb += var_1c8h;
| label_8:
0x000badce ldr r1, [pc, 0x108] |
0x000badd0 movs r2, 5 | r2 = 5;
0x000badd2 ldr r0, [pc, 0x108] |
0x000badd4 add r1, pc | r1 = 0x175cb2;
0x000badd6 add r0, pc | r0 = 0x175cb8;
0x000badd8 bl 0x28688 | r0 = dcgettext (r0, r1);
0x000baddc mov r1, r0 | r1 = r0;
0x000badde mov r0, sb | r0 = sb;
0x000bade0 bl 0x38ce0 | r0 = asprintf ()
0x000bade4 cmp r0, 0 |
0x000bade6 blt 0xbada8 |
| } while (r0 < 0);
| do {
0x000bade8 ldr r1, [pc, 0xf4] |
0x000badea movs r0, 0 | r0 = 0;
0x000badec ldr r2, [sp, 0x1c8] | r2 = var_1c8h;
0x000badee add r1, pc | r1 = 0x175cd2;
0x000badf0 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000badf4 ldr r0, [sp, 0x1c8] | r0 = var_1c8h;
0x000badf6 blx 0x1ded4 | fcn_0001ded4 ();
0x000badfa b 0xbada8 | goto label_7;
| label_26:
0x000badfc ldr r1, [pc, 0xe4] |
0x000badfe movs r0, 0 | r0 = 0;
0x000bae00 add r1, pc | r1 = 0x175ce8;
0x000bae02 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bae06 b 0xbacd8 | goto label_6;
| label_35:
0x000bae08 ldr r1, [pc, 0xdc] |
0x000bae0a movs r2, 5 | r2 = 5;
0x000bae0c ldr r0, [pc, 0xdc] |
0x000bae0e add.w sb, sp, 0x1c8 | sb += var_1c8h;
0x000bae12 add r1, pc | r1 = 0x175cfe;
0x000bae14 add r0, pc | r0 = 0x175d04;
0x000bae16 bl 0x28688 | r0 = dcgettext (r0, r1);
0x000bae1a mov r1, r0 | r1 = r0;
0x000bae1c mov r0, sb | r0 = sb;
0x000bae1e bl 0x38ce0 | r0 = asprintf ()
0x000bae22 cmp r0, 0 |
0x000bae24 bge 0xbade8 |
| } while (r0 >= 0);
0x000bae26 ldr r3, [pc, 0x70] |
0x000bae28 add r3, pc |
0x000bae2a ldr r3, [r3] | r3 = *(0x175cc6);
0x000bae2c ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x000bae30 cmp r3, 0 |
| if (r3 != 0) {
0x000bae32 bne 0xbada8 | goto label_7;
| }
0x000bae34 b 0xbadce | goto label_8;
| label_14:
0x000bae36 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000bae38 ldr r0, [r3] | r0 = *(r3);
0x000bae3a bl 0x98b94 | freeaddrinfo ();
0x000bae3e ldr r1, [pc, 0xb0] |
0x000bae40 movs r2, 5 | r2 = 5;
0x000bae42 ldr r0, [pc, 0xb0] |
0x000bae44 add r1, pc | r1 = 0x175d3a;
0x000bae46 add r0, pc | r0 = 0x175d40;
0x000bae48 bl 0x28688 | dcgettext (r0, r1);
0x000bae4c ldr r1, [pc, 0xa8] |
0x000bae4e mov r2, r0 | r2 = r0;
0x000bae50 mov r0, r4 | r0 = r4;
0x000bae52 add r1, pc | r1 = 0x175d4e;
0x000bae54 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000bae58 b 0xba996 | goto label_2;
| label_30:
0x000bae5a add r4, sp, 0x44 | r4 += var_44h;
0x000bae5c movs r3, 0 | r3 = 0;
0x000bae5e str r3, [r4] | *(r4) = r3;
0x000bae60 cmp r0, 0 |
| if (r0 != 0) {
0x000bae62 bne.w 0xbad30 | goto label_9;
| }
0x000bae66 ldr r1, [pc, 0x94] |
0x000bae68 movs r2, 5 | r2 = 5;
0x000bae6a ldr r0, [pc, 0x94] |
0x000bae6c add r1, pc | r1 = 0x175d6e;
0x000bae6e add r0, pc | r0 = 0x175d74;
0x000bae70 bl 0x28688 | dcgettext (r0, r1);
0x000bae74 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000bae76 mov r1, r0 | r1 = r0;
0x000bae78 mov r0, r4 | r0 = r4;
0x000bae7a ldr r2, [r3] | r2 = *(r3);
0x000bae7c bl 0x38ce0 | r0 = asprintf ()
0x000bae80 cmp r0, 0 |
| if (r0 >= 0) {
0x000bae82 bge.w 0xbad42 | goto label_10;
| }
0x000bae86 b 0xbaccc | goto label_5;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0xceaec */
| #include <stdint.h>
|
; (fcn) sym.registerrpc () | void registerrpc (int16_t arg_28h, int16_t arg_2ch, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000ceaec push.w {r4, r5, r6, r7, r8, lr} |
0x000ceaf0 mov r7, r2 | r7 = r2;
0x000ceaf2 sub sp, 0x10 |
0x000ceaf4 cmp r2, 0 |
| if (r2 == 0) {
0x000ceaf6 beq 0xcebb6 | goto label_3;
| }
0x000ceaf8 mov r8, r3 | r8 = r3;
0x000ceafa mov r6, r0 | r6 = r0;
0x000ceafc mov r4, r1 | r4 = r1;
0x000ceafe bl 0xd34d8 | fcn_000d34d8 ();
0x000ceb02 ldr.w r3, [r0, 0xc0] | r3 = *((r0 + 0xc0));
0x000ceb06 mov r5, r0 | r5 = r0;
0x000ceb08 cbz r3, 0xceb58 |
| while (r0 != 0) {
0x000ceb0a mov r1, r4 | r1 = r4;
0x000ceb0c mov r0, r6 | r0 = r6;
0x000ceb0e bl 0xcdaa0 | pmap_unset ();
0x000ceb12 movs r3, 0x11 | r3 = 0x11;
0x000ceb14 ldr.w r0, [r5, 0xc0] | r0 = *((r5 + 0xc0));
0x000ceb18 str r3, [sp] | *(sp) = r3;
0x000ceb1a mov r2, r4 | r2 = r4;
0x000ceb1c ldr r3, [pc, 0xcc] |
0x000ceb1e mov r1, r6 | r1 = r6;
0x000ceb20 add r3, pc | r3 = 0x19d710;
0x000ceb22 bl 0xd37f0 | r0 = svc_register ();
0x000ceb26 cmp r0, 0 |
| if (r0 == 0) {
0x000ceb28 beq 0xceb96 | goto label_4;
| }
0x000ceb2a movs r0, 0x18 | r0 = 0x18;
0x000ceb2c blx 0x1df60 | r0 = fcn_0001df60 ();
0x000ceb30 mov r4, r0 | r4 = r0;
0x000ceb32 cmp r0, 0 |
| if (r0 == 0) {
0x000ceb34 beq 0xcebd4 | goto label_5;
| }
0x000ceb36 ldr r2, [sp, 0x28] | r2 = *(arg_28h);
0x000ceb38 str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x000ceb3c strd r6, r7, [r0, 4] | __asm ("strd r6, r7, [r0, 4]");
0x000ceb40 movs r0, 0 | r0 = 0;
0x000ceb42 ldr.w r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
0x000ceb46 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x000ceb48 ldr r2, [sp, 0x2c] | r2 = *(arg_2ch);
0x000ceb4a str.w r4, [r5, 0xbc] | __asm ("str.w r4, [r5, 0xbc]");
0x000ceb4e strd r2, r3, [r4, 0x10] | __asm ("strd r2, r3, [r4, 0x10]");
| label_0:
0x000ceb52 add sp, 0x10 |
0x000ceb54 pop.w {r4, r5, r6, r7, r8, pc} |
0x000ceb58 mov.w r0, -1 | r0 = -1;
0x000ceb5c bl 0xd4710 | svcudp_create ();
0x000ceb60 str.w r0, [r5, 0xc0] | __asm ("str.w r0, [r5, 0xc0]");
0x000ceb64 cmp r0, 0 |
0x000ceb66 bne 0xceb0a |
| }
0x000ceb68 ldr r1, [pc, 0x84] |
0x000ceb6a movs r2, 5 | r2 = 5;
0x000ceb6c ldr r0, [pc, 0x84] |
0x000ceb6e add r1, pc | r1 = 0x19d762;
0x000ceb70 add r0, pc | r0 = 0x19d768;
0x000ceb72 bl 0x28688 | r0 = dcgettext (r0, r1);
0x000ceb76 bl 0x6a858 | strdup ();
0x000ceb7a str r0, [sp, 0xc] | var_ch = r0;
| do {
| label_2:
0x000ceb7c ldr r2, [sp, 0xc] | r2 = var_ch;
| if (r2 != 0) {
0x000ceb7e cbz r2, 0xceb90 |
0x000ceb80 ldr r1, [pc, 0x74] |
0x000ceb82 movs r0, 0 | r0 = 0;
0x000ceb84 add r1, pc | r1 = 0x19d780;
0x000ceb86 bl 0x4bb90 | fcn_0004bb90 (r0);
0x000ceb8a ldr r0, [sp, 0xc] | r0 = var_ch;
0x000ceb8c blx 0x1ded4 | fcn_0001ded4 ();
| }
| label_1:
0x000ceb90 mov.w r0, -1 | r0 = -1;
0x000ceb94 b 0xceb52 | goto label_0;
| label_4:
0x000ceb96 ldr r1, [pc, 0x64] |
0x000ceb98 movs r2, 5 | r2 = 5;
0x000ceb9a ldr r0, [pc, 0x64] |
0x000ceb9c add r1, pc | r1 = 0x19d79e;
0x000ceb9e add r0, pc | r0 = 0x19d7a4;
0x000ceba0 bl 0x28688 | dcgettext (r0, r1);
0x000ceba4 mov r3, r4 | r3 = r4;
0x000ceba6 mov r1, r0 | r1 = r0;
0x000ceba8 mov r2, r6 | r2 = r6;
0x000cebaa add r0, sp, 0xc | r0 += var_ch;
0x000cebac bl 0x38ce0 | r0 = asprintf ()
0x000cebb0 cmp r0, 0 |
0x000cebb2 bge 0xceb7c |
| } while (r0 >= 0);
0x000cebb4 b 0xceb90 | goto label_1;
| label_3:
0x000cebb6 ldr r1, [pc, 0x4c] |
0x000cebb8 movs r2, 5 | r2 = 5;
0x000cebba ldr r0, [pc, 0x4c] |
0x000cebbc add r1, pc | r1 = 0x19d7c6;
0x000cebbe add r0, pc | r0 = 0x19d7cc;
0x000cebc0 bl 0x28688 | dcgettext (r0, r1);
0x000cebc4 mov r2, r7 | r2 = r7;
0x000cebc6 mov r1, r0 | r1 = r0;
0x000cebc8 add r0, sp, 0xc | r0 += var_ch;
0x000cebca bl 0x38ce0 | r0 = asprintf ()
0x000cebce cmp r0, 0 |
| if (r0 >= 0) {
0x000cebd0 bge 0xceb7c | goto label_2;
| }
0x000cebd2 b 0xceb90 | goto label_1;
| label_5:
0x000cebd4 ldr r1, [pc, 0x34] |
0x000cebd6 movs r2, 5 | r2 = 5;
0x000cebd8 ldr r0, [pc, 0x34] |
0x000cebda add r1, pc | r1 = 0x19d7ea;
0x000cebdc add r0, pc | r0 = 0x19d7f0;
0x000cebde bl 0x28688 | r0 = dcgettext (r0, r1);
0x000cebe2 bl 0x6a858 | strdup ();
0x000cebe6 str r0, [sp, 0xc] | var_ch = r0;
0x000cebe8 b 0xceb7c | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x6a88c */
| #include <stdint.h>
|
; (fcn) sym.strerror_l () | void strerror_l (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0006a88c ldr r2, [pc, 0x88] |
0x0006a88e push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0006a892 mrc p15, 0, r6, c13, c0, 3 | __asm ("mrc p15, 0, r6, c13, c0, 3");
0x0006a896 mov r8, r0 | r8 = r0;
0x0006a898 mov r5, r1 | r5 = r1;
0x0006a89a add r2, pc |
0x0006a89c ldr r2, [r2] | r2 = *(0xd51b6);
0x0006a89e ldr r7, [r6, r2] | r7 = *((r6 + r2));
0x0006a8a0 bl 0x4b9b4 | r0 = fcn_0004b9b4 (r0);
0x0006a8a4 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0006a8a6 cbz r0, 0x6a8d2 | goto label_0;
| }
0x0006a8a8 mov r0, r5 | r0 = r5;
0x0006a8aa bl 0x27d2c | r0 = uselocale ();
0x0006a8ae mov r5, r0 | r5 = r0;
0x0006a8b0 ldr r0, [pc, 0x6c] |
0x0006a8b2 mov r1, r4 | r1 = r4;
0x0006a8b4 movs r2, 5 | r2 = 5;
0x0006a8b6 add r0, pc | r0 = 0xd51da;
0x0006a8b8 bl 0x28688 | r0 = dcgettext (r0, r1);
0x0006a8bc mov r4, r0 | r4 = r0;
0x0006a8be mov r0, r5 | r0 = r5;
0x0006a8c0 bl 0x27d2c | uselocale ();
| do {
0x0006a8c4 ldr r3, [pc, 0x54] |
0x0006a8c6 mov r0, r4 | r0 = r4;
0x0006a8c8 add r3, pc |
0x0006a8ca ldr r3, [r3] | r3 = *(0xd51e8);
0x0006a8cc str r7, [r6, r3] | *((r6 + r3)) = r7;
0x0006a8ce pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x0006a8d2 mov sb, r6 | sb = r6;
0x0006a8d4 ldr r0, [sb, -0x38]! | r0 = *((sb -= 0x38));
0x0006a8d8 blx 0x1ded4 | fcn_0001ded4 ();
0x0006a8dc mov r0, r5 | r0 = r5;
0x0006a8de bl 0x27d2c | uselocale ();
0x0006a8e2 ldr r1, [pc, 0x40] |
0x0006a8e4 mov sl, r0 | sl = r0;
0x0006a8e6 ldr r0, [pc, 0x40] |
0x0006a8e8 movs r2, 5 | r2 = 5;
0x0006a8ea add r1, pc | r1 = 0xd5214;
0x0006a8ec add r0, pc | r0 = 0xd521a;
0x0006a8ee bl 0x28688 | r0 = dcgettext (r0, r1);
0x0006a8f2 mov r5, r0 | r5 = r0;
0x0006a8f4 mov r0, sl | r0 = sl;
0x0006a8f6 bl 0x27d2c | uselocale ();
0x0006a8fa ldr r1, [pc, 0x30] |
0x0006a8fc mov r3, r8 | r3 = r8;
0x0006a8fe mov r2, r5 | r2 = r5;
0x0006a900 mov r0, sb | r0 = sb;
0x0006a902 add r1, pc | r1 = 0xd5234;
0x0006a904 bl 0x38ce0 | asprintf ()
0x0006a908 adds r0, 1 | r0++;
0x0006a90a ite ne |
| if (r0 == 1) {
0x0006a90c ldrne r4, [r6, -0x38] | r4 = *((r6 - 0x38));
| }
| if (r0 == 1) {
0x0006a910 str r4, [r6, -0x38] | *((r6 - 0x38)) = r4;
| }
0x0006a914 b 0x6a8c4 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libc.so.6 @ 0x6b254 */
| #include <stdint.h>
|
; (fcn) sym.strsignal () | void strsignal (int16_t arg1) {
| r0 = arg1;
0x0006b254 push.w {r4, r5, r6, r7, r8, lr} |
0x0006b258 mov r5, r0 | r5 = r0;
0x0006b25a bl 0x68f60 | r0 = sigdescr_np ();
0x0006b25e mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0006b260 cbz r0, 0x6b272 |
0x0006b262 ldr r0, [pc, 0x78] |
0x0006b264 mov r1, r4 | r1 = r4;
0x0006b266 movs r2, 5 | r2 = 5;
0x0006b268 pop.w {r4, r5, r6, r7, r8, lr} |
0x0006b26c add r0, pc | r0 = 0xd654e;
0x0006b26e b.w 0x28688 | void (*0x28688)() ();
| }
0x0006b272 mrc p15, 0, r7, c13, c0, 3 | __asm ("mrc p15, 0, r7, c13, c0, 3");
0x0006b276 mov r6, r7 | r6 = r7;
0x0006b278 ldr r0, [r6, -0x3c]! | r0 = *((r6 -= 0x3c));
0x0006b27c blx 0x1ded4 | fcn_0001ded4 ();
0x0006b280 bl 0x2cfe8 | r0 = libc_current_sigrtmin ();
0x0006b284 cmp r0, r5 |
| if (r0 <= r5) {
0x0006b286 bgt 0x6b290 |
0x0006b288 bl 0x2cff4 | r0 = libc_current_sigrtmax ();
0x0006b28c cmp r0, r5 |
| if (r0 >= r5) {
0x0006b28e bge 0x6b2bc | goto label_0;
| }
| }
0x0006b290 ldr r1, [pc, 0x4c] |
0x0006b292 movs r2, 5 | r2 = 5;
0x0006b294 ldr r0, [pc, 0x4c] |
0x0006b296 add r1, pc | r1 = 0xd657a;
0x0006b298 add r0, pc | r0 = 0xd6580;
0x0006b29a bl 0x28688 | dcgettext (r0, r1);
0x0006b29e mov r2, r5 | r2 = r5;
0x0006b2a0 mov r1, r0 | r1 = r0;
0x0006b2a2 mov r0, r6 | r0 = r6;
0x0006b2a4 bl 0x38ce0 | asprintf ()
| do {
0x0006b2a8 adds r0, 1 | r0++;
0x0006b2aa itee ne |
| if (r0 == 1) {
0x0006b2ac ldrne r4, [r7, -0x3c] | r4 = *((r7 - 0x3c));
| }
| if (r0 != 1) {
0x0006b2b0 moveq r3, 0 | r3 = 0;
| }
| if (r0 == 1) {
0x0006b2b2 str r3, [r7, -0x3c] | *((r7 - 0x3c)) = r3;
| }
0x0006b2b6 mov r0, r4 | r0 = r4;
0x0006b2b8 pop.w {r4, r5, r6, r7, r8, pc} |
| label_0:
0x0006b2bc ldr r1, [pc, 0x28] |
0x0006b2be movs r2, 5 | r2 = 5;
0x0006b2c0 ldr r0, [pc, 0x28] |
0x0006b2c2 add r1, pc | r1 = 0xd65ae;
0x0006b2c4 add r0, pc | r0 = 0xd65b4;
0x0006b2c6 bl 0x28688 | r0 = dcgettext (r0, r1);
0x0006b2ca mov r8, r0 | r8 = r0;
0x0006b2cc bl 0x2cfe8 | libc_current_sigrtmin ();
0x0006b2d0 mov r1, r8 | r1 = r8;
0x0006b2d2 subs r2, r5, r0 | r2 = r5 - r0;
0x0006b2d4 mov r0, r6 | r0 = r6;
0x0006b2d6 bl 0x38ce0 | asprintf ()
0x0006b2da b 0x6b2a8 |
| } while (1);
| }
[*] Function sprintf used 32 times libc.so.6