[*] Binary protection state of ubiformat
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function sprintf tear down of ubiformat
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x12f88 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00012f88 () | void fcn_00012f88 (int32_t arg1, int32_t arg2) {
| int32_t var_14h_2;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x00012f88 push {r4, r5, r6, r7, fp, lr} |
0x00012f8c add fp, sp, 0x14 |
0x00012f90 mov r6, r1 | r6 = r1;
0x00012f94 mov r7, r2 | r7 = r2;
0x00012f98 mov r4, r3 | r4 = r3;
0x00012f9c mov r5, r0 | r5 = r0;
0x00012fa0 bl 0x10d90 | strlen (r0);
0x00012fa4 mov r3, r7 | r3 = r7;
0x00012fa8 mov r2, r6 | r2 = r6;
0x00012fac mov r1, r5 | r1 = r5;
0x00012fb0 add r0, r0, 0x6b | r0 += 0x6b;
0x00012fb4 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00012fb8 sub sp, sp, r0 |
0x00012fbc mov r0, sp | r0 = sp;
0x00012fc0 bl 0x10d60 | sprintf (r0, r1, r2)
0x00012fc4 mov r1, r4 | r1 = r4;
0x00012fc8 mov r0, sp | r0 = sp;
0x00012fcc bl 0x12ecc | fcn_00012ecc (r0, r1);
0x00012fd0 sub sp, fp, 0x14 |
0x00012fd4 pop {r4, r5, r6, r7, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x1342c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0001342c () | void fcn_0001342c (int32_t arg2, char * s) {
| int32_t var_14h_2;
| int32_t var_14h;
| r1 = arg2;
| r0 = s;
0x0001342c push {r4, r5, r6, r7, fp, lr} |
0x00013430 ldr r4, [r0] | r4 = *(r0);
0x00013434 add fp, sp, 0x14 |
0x00013438 mov r0, r4 | r0 = r4;
0x0001343c mov r6, r3 | r6 = r3;
0x00013440 mov r7, r1 | r7 = r1;
0x00013444 mov r5, r2 | r5 = r2;
0x00013448 bl 0x10d90 | strlen (r0);
0x0001344c mov r2, r7 | r2 = r7;
0x00013450 mov r1, r4 | r1 = r4;
0x00013454 add r0, r0, 0x39 | r0 += 0x39;
0x00013458 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x0001345c sub sp, sp, r0 |
0x00013460 mov r0, sp | r0 = sp;
0x00013464 bl 0x10d60 | sprintf (r0, r1, r2)
0x00013468 mov r2, r6 | r2 = r6;
0x0001346c mov r1, r5 | r1 = r5;
0x00013470 mov r0, sp | r0 = sp;
0x00013474 bl 0x13354 | fcn_00013354 (r0, r1);
0x00013478 sub sp, fp, 0x14 |
0x0001347c pop {r4, r5, r6, r7, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x13e00 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00013e00 () | void fcn_00013e00 (int32_t arg2, char * s) {
| int32_t var_b4h;
| int32_t var_ach;
| int32_t var_a8h;
| int32_t var_a4h;
| int32_t var_a0h;
| int32_t var_9ch;
| int32_t var_8ch;
| int32_t var_7ch;
| int32_t var_6ch;
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_sp_b4h;
| int32_t var_sp_6ch;
| int32_t var_20h_2;
| int32_t var_20h;
| r1 = arg2;
| r0 = s;
0x00013e00 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00013e04 add fp, sp, 0x20 |
0x00013e08 sub sp, sp, 0x9c |
0x00013e0c mov r6, r0 | r6 = r0;
0x00013e10 ldr r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x00013e14 mov r5, r1 | r5 = r1;
0x00013e18 bl 0x10d90 | strlen (r0);
0x00013e1c sub r1, fp, 0x8c | r1 -= var_8ch;
0x00013e20 add r0, r0, 0x6b | r0 += 0x6b;
0x00013e24 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00013e28 sub sp, sp, r0 |
0x00013e2c mov r0, r5 | r0 = r5;
0x00013e30 bl 0x10bd4 | r0 = stat64 ();
0x00013e34 cmp r0, 0 |
| if (r0 == 0) {
0x00013e38 beq 0x13e90 | goto label_5;
| }
0x00013e3c bl 0x10d78 | errno_location ();
0x00013e40 ldr r6, [pc, 0x1e8] | r6 = *(0x1402c);
0x00013e44 mov r3, r5 | r3 = r5;
0x00013e48 ldr r2, [pc, 0x1e4] | r2 = stderr;
0x00013e4c ldr r1, [pc, 0x1e4] | r1 = "libubi";
0x00013e50 ldr r4, [r0] | r4 = *(r0);
0x00013e54 ldr r0, [r6] | r0 = *(0x1402c);
0x00013e58 bl 0x10c7c | fprintf (r0, "libubi", r2, r3, r4, r5, r6);
0x00013e5c mov r0, r4 | r0 = r4;
0x00013e60 ldr r5, [r6] | r5 = *(0x1402c);
0x00013e64 bl 0x10bc8 | strerror (r0);
0x00013e68 str r4, [sp] | *(sp) = r4;
0x00013e6c ldr r3, [pc, 0x1c8] | r3 = "%s: error!: cannot get information about \"%s\"\n";
0x00013e70 mov r2, 8 | r2 = 8;
0x00013e74 ldr r1, [pc, 0x1c4] | r1 = *(0x1403c);
0x00013e78 str r0, [sp, 4] | var_4h = r0;
0x00013e7c mov r0, r5 | r0 = r5;
0x00013e80 bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: cannot get information about \"%s\"\n", r4);
| do {
| label_0:
0x00013e84 mvn r0, 0 | r0 = ~0;
| label_4:
0x00013e88 sub sp, fp, 0x20 |
0x00013e8c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00013e90 ldr r3, [fp, -0x7c] | r3 = var_7ch;
0x00013e94 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00013e98 cmp r3, 0x2000 |
| if (r3 == 0x2000) {
0x00013e9c beq 0x13ec8 | goto label_6;
| }
0x00013ea0 ldr r0, [pc, 0x188] |
0x00013ea4 mov r3, r5 | r3 = r5;
0x00013ea8 ldr r2, [pc, 0x184] | r2 = stderr;
0x00013eac ldr r1, [pc, 0x190] | r1 = "_serror__d___s_";
0x00013eb0 ldr r0, [r0] | r0 = *(0x1402c);
0x00013eb4 bl 0x10c7c | r0 = fprintf (r0, "_serror__d___s_", r2, r3);
0x00013eb8 bl 0x10d78 | errno_location ();
0x00013ebc mov r3, 0x16 | r3 = 0x16;
| label_1:
0x00013ec0 str r3, [r0] | *(r0) = r3;
0x00013ec4 b 0x13e84 |
| } while (1);
| label_6:
0x00013ec8 ldrd r2, r3, [fp, -0x6c] | __asm ("ldrd r2, r3, [var_6ch]");
0x00013ecc mov r1, r3 | r1 = r3;
0x00013ed0 mov r0, r2 | r0 = r2;
0x00013ed4 strd r2, r3, [fp, -0xb4] | __asm ("strd r2, r3, [var_b4h]");
0x00013ed8 bl 0x10c04 | gnu_dev_major ();
0x00013edc ldrd r2, r3, [fp, -0xb4] | __asm ("ldrd r2, r3, [var_b4h]");
0x00013ee0 mov r1, r3 | r1 = r3;
0x00013ee4 mov sb, r0 | sb = r0;
0x00013ee8 mov r0, r2 | r0 = r2;
0x00013eec bl 0x10c4c | gnu_dev_minor ();
0x00013ef0 sub r1, fp, 0xa4 | r1 -= var_a4h;
0x00013ef4 mov r7, r0 | r7 = r0;
0x00013ef8 mov r0, r6 | r0 = r6;
0x00013efc bl 0x13ad0 | r0 = fcn_00013ad0 (r0, r1);
0x00013f00 cmp r0, 0 |
| if (r0 != 0) {
0x00013f04 addeq r8, sp, 8 | r8 += var_b4h;
| }
| if (r0 != 0) {
0x00013f08 ldreq r4, [fp, -0xa0] | r4 = var_a0h;
| }
| if (r0 == 0) {
0x00013f0c addeq sl, r6, 0x18 | sl = r6 + 0x18;
| goto label_7;
| }
| if (r0 != 0) {
| label_7:
0x00013f10 bne 0x13e84 | goto label_0;
| }
| do {
0x00013f14 ldr r3, [fp, -0x9c] | r3 = var_9ch;
0x00013f18 cmp r4, r3 |
| if (r4 > r3) {
0x00013f1c bgt 0x13f94 | goto label_8;
| }
0x00013f20 sub r3, fp, 0xa8 | r3 -= var_a8h;
0x00013f24 sub r2, fp, 0xac | r2 -= var_ach;
0x00013f28 mov r1, r4 | r1 = r4;
0x00013f2c mov r0, sl | r0 = sl;
0x00013f30 bl 0x1342c | r0 = fcn_0001342c (r0, r1);
0x00013f34 cmp r0, 0 |
| if (r0 == 0) {
0x00013f38 beq 0x13f88 | goto label_9;
| }
0x00013f3c bl 0x10d78 | r0 = errno_location ();
0x00013f40 ldr r3, [r0] | r3 = *(r0);
0x00013f44 cmp r3, 2 |
| if (r3 != 2) {
0x00013f48 bne 0x13f54 | goto label_10;
| }
| label_2:
0x00013f4c add r4, r4, 1 | r4++;
0x00013f50 b 0x13f14 |
| } while (1);
| label_10:
0x00013f54 cmp r3, 0 |
| if (r3 != 0) {
0x00013f58 bne 0x13e84 | goto label_0;
| }
| label_3:
0x00013f5c ldr r0, [pc, 0xcc] |
0x00013f60 mov r3, r5 | r3 = r5;
0x00013f64 str r7, [sp, 4] | var_4h = r7;
0x00013f68 str sb, [sp] | *(sp) = sb;
0x00013f6c ldr r2, [pc, 0xc0] | r2 = stderr;
0x00013f70 ldr r1, [pc, 0xd0] | r1 = "%s: error!: \"%s\" is not a character device\n";
0x00013f74 ldr r0, [r0] | r0 = *(0x1402c);
0x00013f78 bl 0x10c7c | r0 = fprintf (r0, "%s: error!: \"%s\" is not a character device\n", r2, r3);
0x00013f7c bl 0x10d78 | errno_location ();
0x00013f80 mov r3, 0x13 | r3 = 0x13;
0x00013f84 b 0x13ec0 | goto label_1;
| label_9:
0x00013f88 ldr r3, [fp, -0xac] | r3 = var_ach;
0x00013f8c cmp r3, sb |
| if (r3 != sb) {
0x00013f90 bne 0x13f4c | goto label_2;
| }
| label_8:
0x00013f94 ldr r3, [fp, -0x9c] | r3 = var_9ch;
0x00013f98 cmp r4, r3 |
| if (r4 > r3) {
0x00013f9c bgt 0x13f5c | goto label_3;
| }
0x00013fa0 cmp r7, 0 |
| if (r7 == 0) {
0x00013fa4 moveq r0, 1 | r0 = 1;
| goto label_11;
| }
| if (r7 == 0) {
| label_11:
0x00013fa8 beq 0x13e88 | goto label_4;
| }
0x00013fac sub r3, r7, 1 | r3 = r7 - 1;
0x00013fb0 mov r2, r4 | r2 = r4;
0x00013fb4 ldr r1, [r6, 0x40] | r1 = *((r6 + 0x40));
0x00013fb8 mov r0, r8 | r0 = r8;
0x00013fbc bl 0x10d60 | sprintf (r0, r1, r2)
0x00013fc0 mov r1, 0 | r1 = 0;
0x00013fc4 mov r0, r8 | r0 = r8;
0x00013fc8 bl 0x10d30 | r0 = open64 ();
0x00013fcc cmn r0, 1 |
| if (r0 == 1) {
0x00013fd0 beq 0x13f5c | goto label_3;
| }
0x00013fd4 bl 0x10dcc | r0 = close (r0);
0x00013fd8 cmp r0, 0 |
| if (r0 != 0) {
0x00013fdc beq 0x14028 |
0x00013fe0 bl 0x10d78 | errno_location ();
0x00013fe4 ldr r5, [pc, 0x44] |
0x00013fe8 mov r3, r8 | r3 = r8;
0x00013fec ldr r2, [pc, 0x40] | r2 = stderr;
0x00013ff0 ldr r1, [pc, 0x54] | r1 = "_s:_error_:___s__has_major:minor__d:_d__but_this_does_not_correspond_to_any_existing_UBI_device_or_volume";
0x00013ff4 ldr r4, [r0] | r4 = *(r0);
0x00013ff8 ldr r0, [r5] | r0 = *(0x1402c);
0x00013ffc bl 0x10c7c | fprintf (r0, "_s:_error_:___s__has_major:minor__d:_d__but_this_does_not_correspond_to_any_existing_UBI_device_or_volume", r2, r3, r4, r5);
0x00014000 mov r0, r4 | r0 = r4;
0x00014004 ldr r5, [r5] | r5 = *(0x1402c);
0x00014008 bl 0x10bc8 | strerror (r0);
0x0001400c str r4, [sp] | *(sp) = r4;
0x00014010 ldr r3, [pc, 0x24] | r3 = "%s: error!: cannot get information about \"%s\"\n";
0x00014014 mov r2, 8 | r2 = 8;
0x00014018 ldr r1, [pc, 0x20] | r1 = *(0x1403c);
0x0001401c str r0, [sp, 4] | var_4h = r0;
0x00014020 mov r0, r5 | r0 = r5;
0x00014024 bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: cannot get information about \"%s\"\n", r4);
| }
0x00014028 mov r0, 2 | r0 = 2;
0x0001402c b 0x13e88 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x14408 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00014408 () | void fcn_00014408 (int32_t arg2, char * s) {
| int32_t var_74h;
| int32_t var_ch_2;
| int32_t var_ch;
| r1 = arg2;
| r0 = s;
0x00014408 push {r4, r5, fp, lr} |
0x0001440c add fp, sp, 0xc |
0x00014410 sub sp, sp, 0x68 |
0x00014414 ldr r4, [r0, 0x10] | r4 = *((r0 + 0x10));
0x00014418 mov r5, r1 | r5 = r1;
0x0001441c mov r0, r4 | r0 = r4;
0x00014420 bl 0x10d90 | strlen (r0);
0x00014424 mov r2, r5 | r2 = r5;
0x00014428 mov r1, r4 | r1 = r4;
0x0001442c add r0, r0, 0x39 | r0 += 0x39;
0x00014430 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00014434 sub sp, sp, r0 |
0x00014438 mov r0, sp | r0 = sp;
0x0001443c bl 0x10d60 | sprintf (r0, r1, r2)
0x00014440 sub r1, fp, 0x74 | r1 -= var_74h;
0x00014444 mov r0, sp | r0 = sp;
0x00014448 bl 0x10bd4 | r0 = stat64 ();
0x0001444c clz r0, r0 | r0 &= r0;
0x00014450 lsr r0, r0, 5 | r0 >>= 5;
0x00014454 sub sp, fp, 0xc |
0x00014458 pop {r4, r5, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x1445c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0001445c () | void fcn_0001445c (int32_t arg1, int32_t arg2) {
| int32_t var_128h;
| int32_t var_124h;
| int32_t var_0h;
| int32_t var_4h;
| char * s;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x0001445c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00014460 add sl, r2, 4 | sl = r2 + 4;
0x00014464 add fp, sp, 0x20 |
0x00014468 sub sp, sp, 0x114 |
0x0001446c mov r6, r1 | r6 = r1;
0x00014470 mov r5, r0 | r5 = r0;
0x00014474 mov r4, r2 | r4 = r2;
0x00014478 mov r1, 0 | r1 = 0;
0x0001447c mov r2, 0x54 | r2 = 0x54;
0x00014480 mov r0, sl | r0 = sl;
0x00014484 bl 0x10d18 | memset (r0, r1, r2);
0x00014488 str r6, [r4] | *(r4) = r6;
0x0001448c mov r1, r6 | r1 = r6;
0x00014490 mov r0, r5 | r0 = r5;
0x00014494 bl 0x14408 | r0 = fcn_00014408 (r0, r1);
0x00014498 cmp r0, 0 |
0x0001449c bne 0x144a8 |
| while (r8 == r0) {
| label_0:
0x000144a0 mvn r0, 0 | r0 = ~0;
0x000144a4 b 0x1476c | goto label_3;
0x000144a8 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000144ac bl 0x10d3c | r0 = opendir ();
0x000144b0 subs r8, r0, 0 | r8 = r0 - 0;
0x000144b4 beq 0x144a0 |
| }
0x000144b8 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000144bc str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x000144c0 bl 0x10d78 | r0 = errno_location ();
0x000144c4 mov sb, r0 | sb = r0;
| do {
| label_1:
0x000144c8 mov r3, 0 | r3 = 0;
0x000144cc str r3, [sb] | *(sb) = r3;
0x000144d0 mov r0, r8 | r0 = r8;
0x000144d4 bl 0x10cd0 | r0 = readdir64 ();
0x000144d8 cmp r0, 0 |
| if (r0 == 0) {
0x000144dc beq 0x14578 | goto label_4;
| }
0x000144e0 add r7, r0, 0x13 | r7 = r0 + 0x13;
0x000144e4 mov r0, r7 | r0 = r7;
0x000144e8 bl 0x10d90 | r0 = strlen (r0);
0x000144ec cmp r0, 0xfe |
| if (r0 >= 0xfe) {
0x000144f0 bls 0x1451c |
0x000144f4 ldr r0, [pc, 0x278] |
0x000144f8 str r7, [sp] | *(sp) = r7;
0x000144fc ldr r2, [pc, 0x274] | r2 = stderr;
0x00014500 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00014504 ldr r1, [pc, 0x270] | r1 = "libubi";
0x00014508 ldr r0, [r0] | r0 = *(0x14770);
0x0001450c bl 0x10c7c | fprintf (r0, "libubi", r2, r3);
| label_2:
0x00014510 mov r0, r8 | r0 = r8;
0x00014514 bl 0x10db4 | closedir ();
0x00014518 b 0x144a0 | goto label_0;
| }
0x0001451c sub r3, fp, 0x124 | r3 -= var_124h;
0x00014520 str r3, [sp] | *(sp) = r3;
0x00014524 sub r2, fp, 0x128 | r2 -= var_128h;
0x00014528 sub r3, fp, 0x12c | r3 -= s;
0x0001452c ldr r1, [pc, 0x24c] | r1 = "_s:_error_:_invalid_entry_in__s:___s_";
0x00014530 mov r0, r7 | r0 = r7;
0x00014534 bl 0x10ce8 | r0 = sscanf (r0, "_s:_error_:_invalid_entry_in__s:___s_", r2);
0x00014538 cmp r0, 2 |
0x0001453c bne 0x144c8 |
| } while (r0 != 2);
0x00014540 ldr r3, [fp, -0x128] | r3 = var_128h;
0x00014544 cmp r3, r6 |
| if (r3 != r6) {
0x00014548 bne 0x144c8 | goto label_1;
| }
0x0001454c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00014550 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00014554 add r3, r3, 1 | r3++;
0x00014558 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0001455c ldr r3, [fp, -0x12c] | r3 = s;
0x00014560 cmp r2, r3 |
0x00014564 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
| if (r2 >= r3) {
0x00014568 strlt r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| }
0x0001456c cmp r3, r2 |
| if (r3 >= r2) {
0x00014570 strlt r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| }
0x00014574 b 0x144c8 | goto label_1;
| label_4:
0x00014578 ldr r7, [sb] | r7 = *(sb);
0x0001457c cmp r7, 0 |
| if (r7 != 0) {
0x00014580 beq 0x145c8 |
0x00014584 ldr r4, [pc, 0x1e8] |
0x00014588 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0001458c ldr r2, [pc, 0x1e4] | r2 = stderr;
0x00014590 ldr r1, [pc, 0x1ec] | r1 = "ubi%d_%d%s";
0x00014594 ldr r0, [r4] | r0 = *(0x14770);
0x00014598 bl 0x10c7c | fprintf (r0, "ubi%d_%d%s", r2, r3, r4);
0x0001459c mov r0, r7 | r0 = r7;
0x000145a0 ldr r4, [r4] | r4 = *(0x14770);
0x000145a4 bl 0x10bc8 | strerror (r0);
0x000145a8 str r7, [sp] | *(sp) = r7;
0x000145ac ldr r3, [pc, 0x1d4] | r3 = "%s: error!: readdir failed on \"%s\"\n";
0x000145b0 mov r2, 8 | r2 = 8;
0x000145b4 ldr r1, [pc, 0x1d0] | r1 = *(0x14788);
0x000145b8 str r0, [sp, 4] | var_4h = r0;
0x000145bc mov r0, r4 | r0 = r4;
0x000145c0 bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: readdir failed on \"%s\"\n");
0x000145c4 b 0x14510 | goto label_2;
| }
0x000145c8 mov r0, r8 | r0 = r8;
0x000145cc bl 0x10db4 | r0 = closedir ();
0x000145d0 cmp r0, 0 |
| if (r0 != 0) {
0x000145d4 beq 0x14620 |
0x000145d8 ldr r6, [pc, 0x194] | r6 = *(0x14770);
0x000145dc ldr r4, [sb] | r4 = *(sb);
0x000145e0 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000145e4 ldr r2, [pc, 0x18c] | r2 = stderr;
0x000145e8 ldr r1, [pc, 0x1a0] | r1 = "_serror__d___s_";
0x000145ec ldr r0, [r6] | r0 = *(0x14770);
0x000145f0 bl 0x10c7c | fprintf (r0, "_serror__d___s_", r2, r3, r4, r5, r6);
0x000145f4 mov r0, r4 | r0 = r4;
0x000145f8 ldr r5, [r6] | r5 = *(0x14770);
0x000145fc bl 0x10bc8 | strerror (r0);
0x00014600 str r4, [sp] | *(sp) = r4;
0x00014604 ldr r3, [pc, 0x17c] | r3 = "%s: error!: readdir failed on \"%s\"\n";
0x00014608 mov r2, 8 | r2 = 8;
0x0001460c ldr r1, [pc, 0x178] | r1 = *(0x14788);
0x00014610 str r0, [sp, 4] | var_4h = r0;
0x00014614 mov r0, r5 | r0 = r5;
0x00014618 bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: readdir failed on \"%s\"\n", r4);
0x0001461c b 0x144a0 | goto label_0;
| }
0x00014620 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00014624 add r2, r4, 0x14 | r2 = r4 + 0x14;
0x00014628 cmn r3, 0x80000001 |
| if (r3 != 0x80000001) {
0x0001462c streq r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| }
0x00014630 add r3, r4, 0x18 | r3 = r4 + 0x18;
0x00014634 mov r1, r6 | r1 = r6;
0x00014638 add r0, r5, 0x18 | r0 = r5 + 0x18;
0x0001463c bl 0x1342c | r0 = fcn_0001342c (r0, r1);
0x00014640 cmp r0, 0 |
| if (r0 != 0) {
0x00014644 bne 0x144a0 | goto label_0;
| }
0x00014648 mov r2, sl | r2 = sl;
0x0001464c mov r1, r6 | r1 = r6;
0x00014650 ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x00014654 bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x00014658 cmp r0, 0 |
| if (r0 != 0) {
0x0001465c bne 0x144a0 | goto label_0;
| }
0x00014660 add r2, r4, 0x20 | r2 = r4 + 0x20;
0x00014664 mov r1, r6 | r1 = r6;
0x00014668 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x0001466c bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x00014670 cmp r0, 0 |
| if (r0 != 0) {
0x00014674 bne 0x144a0 | goto label_0;
| }
0x00014678 add r2, r4, 0x1c | r2 = r4 + 0x1c;
0x0001467c mov r1, r6 | r1 = r6;
0x00014680 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00014684 bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x00014688 cmp r0, 0 |
| if (r0 != 0) {
0x0001468c bne 0x144a0 | goto label_0;
| }
0x00014690 add r2, r4, 0x38 | r2 = r4 + 0x38;
0x00014694 mov r1, r6 | r1 = r6;
0x00014698 ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x0001469c bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x000146a0 cmp r0, 0 |
| if (r0 != 0) {
0x000146a4 bne 0x144a0 | goto label_0;
| }
0x000146a8 add r2, r4, 0x3c | r2 = r4 + 0x3c;
0x000146ac mov r1, r6 | r1 = r6;
0x000146b0 ldr r0, [r5, 0x28] | r0 = *((r5 + 0x28));
0x000146b4 bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x000146b8 cmp r0, 0 |
| if (r0 != 0) {
0x000146bc bne 0x144a0 | goto label_0;
| }
0x000146c0 add r2, r4, 0x48 | r2 = r4 + 0x48;
0x000146c4 mov r1, r6 | r1 = r6;
0x000146c8 ldr r0, [r5, 0x30] | r0 = *((r5 + 0x30));
0x000146cc bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x000146d0 cmp r0, 0 |
| if (r0 != 0) {
0x000146d4 bne 0x144a0 | goto label_0;
| }
0x000146d8 ldr r8, [r5, 0x2c] | r8 = *((r5 + 0x2c));
0x000146dc mov sb, sp | sb = sp;
0x000146e0 mov r0, r8 | r0 = r8;
0x000146e4 bl 0x10d90 | strlen (r0);
0x000146e8 mov r2, r6 | r2 = r6;
0x000146ec mov r1, r8 | r1 = r8;
0x000146f0 add r0, r0, 0x39 | r0 += 0x39;
0x000146f4 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x000146f8 sub sp, sp, r0 |
0x000146fc add r7, sp, 8 | r7 += s;
0x00014700 mov r0, r7 | r0 = r7;
0x00014704 bl 0x10d60 | sprintf (r0, r1, r2)
0x00014708 add r1, r4, 0x40 | r1 = r4 + 0x40;
0x0001470c mov r0, r7 | r0 = r7;
0x00014710 bl 0x12d1c | fcn_00012d1c (r0, r1);
0x00014714 mov sp, sb |
0x00014718 cmp r0, 0 |
| if (r0 != 0) {
0x0001471c bne 0x144a0 | goto label_0;
| }
0x00014720 add r2, r4, 0x4c | r2 = r4 + 0x4c;
0x00014724 mov r1, r6 | r1 = r6;
0x00014728 ldr r0, [r5, 0x34] | r0 = *((r5 + 0x34));
0x0001472c bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x00014730 cmp r0, 0 |
| if (r0 != 0) {
0x00014734 bne 0x144a0 | goto label_0;
| }
0x00014738 add r2, r4, 0x50 | r2 = r4 + 0x50;
0x0001473c mov r1, r6 | r1 = r6;
0x00014740 ldr r0, [r5, 0x38] | r0 = *((r5 + 0x38));
0x00014744 bl 0x12f40 | r0 = fcn_00012f40 (r0, r1);
0x00014748 cmp r0, 0 |
| if (r0 != 0) {
0x0001474c bne 0x144a0 | goto label_0;
| }
0x00014750 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00014754 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x00014758 smull r6, r7, r2, r3 | r6:r7 = r2 * r3;
0x0001475c ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00014760 strd r6, r7, [r4, 0x30] | __asm ("strd r6, r7, [r4, 0x30]");
0x00014764 smull r6, r7, r2, r3 | r6:r7 = r2 * r3;
0x00014768 strd r6, r7, [r4, 0x28] | __asm ("strd r6, r7, [r4, 0x28]");
| label_3:
0x0001476c sub sp, fp, 0x20 |
0x00014770 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x14984 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00014984 () | void fcn_00014984 (int32_t arg1, int32_t arg2) {
| char * s1;
| int32_t var_0h;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x00014984 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00014988 add sb, r3, 8 | sb = r3 + 8;
0x0001498c add fp, sp, 0x20 |
0x00014990 sub sp, sp, 0x3c |
0x00014994 mov r5, r1 | r5 = r1;
0x00014998 mov r6, r2 | r6 = r2;
0x0001499c mov r1, 0 | r1 = 0;
0x000149a0 mov r2, 0xb0 | r2 = 0xb0;
0x000149a4 mov r7, r0 | r7 = r0;
0x000149a8 mov r0, sb | r0 = sb;
0x000149ac mov r4, r3 | r4 = r3;
0x000149b0 bl 0x10d18 | memset (r0, r1, r2);
0x000149b4 ldr sl, [r7, 0x48] | sl = *((r7 + 0x48));
0x000149b8 stm r4, {r5, r6} | *(r4) = r5;
| *((r4 + 4)) = r6;
0x000149bc mov r0, sl | r0 = sl;
0x000149c0 bl 0x10d90 | strlen (r0);
0x000149c4 mov r8, sp | r8 = sp;
0x000149c8 mov r3, r6 | r3 = r6;
0x000149cc mov r2, r5 | r2 = r5;
0x000149d0 mov r1, sl | r1 = sl;
0x000149d4 add r0, r0, 0x6b | r0 += 0x6b;
0x000149d8 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x000149dc sub sp, sp, r0 |
0x000149e0 mov r0, sp | r0 = sp;
0x000149e4 bl 0x10d60 | sprintf (r0, r1, r2)
0x000149e8 mov r0, sp | r0 = sp;
0x000149ec add r2, r4, 0xc | r2 = r4 + 0xc;
0x000149f0 mov r1, sb | r1 = sb;
0x000149f4 bl 0x13354 | fcn_00013354 (r0, r1);
0x000149f8 mov sp, r8 |
0x000149fc cmp r0, 0 |
0x00014a00 beq 0x14a14 |
| while (r8 < r0) {
| label_0:
0x00014a04 mvn r8, 0 | r8 = ~0;
| label_1:
0x00014a08 mov r0, r8 | r0 = r8;
0x00014a0c sub sp, fp, 0x20 |
0x00014a10 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00014a14 ldr sb, [r7, 0x44] | sb = *((r7 + 0x44));
0x00014a18 mov r0, sb | r0 = sb;
0x00014a1c bl 0x10d90 | strlen (r0);
0x00014a20 mov r3, r6 | r3 = r6;
0x00014a24 mov r2, r5 | r2 = r5;
0x00014a28 mov r1, sb | r1 = sb;
0x00014a2c add r0, r0, 0x6b | r0 += 0x6b;
0x00014a30 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00014a34 sub sp, sp, r0 |
0x00014a38 mov r0, sp | r0 = sp;
0x00014a3c bl 0x10d60 | sprintf (r0, r1, r2)
0x00014a40 mov r0, sp | r0 = sp;
0x00014a44 mov r2, 0x32 | r2 = 0x32;
0x00014a48 sub r1, fp, 0x58 | r1 -= s1;
0x00014a4c bl 0x12fd8 | fcn_00012fd8 (r0, r1);
0x00014a50 mov sp, r8 |
0x00014a54 subs r8, r0, 0 | r8 = r0 - 0;
0x00014a58 blt 0x14a04 |
| }
0x00014a5c mov r2, r8 | r2 = r8;
0x00014a60 ldr r1, [pc, 0x174] | r1 = *(0x14bd8);
0x00014a64 sub r0, fp, 0x58 | r0 -= s1;
0x00014a68 bl 0x10cb8 | r0 = strncmp (r0, r1, r2);
0x00014a6c cmp r0, 0 |
| if (r0 != 0) {
0x00014a70 moveq r3, 4 | r3 = 4;
| }
| if (r0 != 0) {
0x00014a74 beq 0x14a94 |
0x00014a78 mov r2, r8 | r2 = r8;
0x00014a7c ldr r1, [pc, 0x15c] | r1 = "static\n";
0x00014a80 sub r0, fp, 0x58 | r0 -= s1;
0x00014a84 bl 0x10cb8 | r0 = strncmp (r0, "static\n", r2);
0x00014a88 cmp r0, 0 |
| if (r0 != 0) {
0x00014a8c bne 0x14bb4 | goto label_2;
| }
0x00014a90 mov r3, 3 | r3 = 3;
| }
0x00014a94 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00014a98 mov r2, r6 | r2 = r6;
0x00014a9c add r3, r4, 0x14 | r3 = r4 + 0x14;
0x00014aa0 mov r1, r5 | r1 = r5;
0x00014aa4 ldr r0, [r7, 0x4c] | r0 = *((r7 + 0x4c));
0x00014aa8 bl 0x12f88 | r0 = fcn_00012f88 (r0, r1);
0x00014aac cmp r0, 0 |
| if (r0 != 0) {
0x00014ab0 bne 0x14a04 | goto label_0;
| }
0x00014ab4 ldr r8, [r7, 0x50] | r8 = *((r7 + 0x50));
0x00014ab8 mov sb, sp | sb = sp;
0x00014abc mov r0, r8 | r0 = r8;
0x00014ac0 bl 0x10d90 | strlen (r0);
0x00014ac4 mov r3, r6 | r3 = r6;
0x00014ac8 mov r2, r5 | r2 = r5;
0x00014acc mov r1, r8 | r1 = r8;
0x00014ad0 add r0, r0, 0x6b | r0 += 0x6b;
0x00014ad4 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00014ad8 sub sp, sp, r0 |
0x00014adc mov r0, sp | r0 = sp;
0x00014ae0 bl 0x10d60 | sprintf (r0, r1, r2)
0x00014ae4 mov r0, sp | r0 = sp;
0x00014ae8 add r1, r4, 0x18 | r1 = r4 + 0x18;
0x00014aec bl 0x12d1c | fcn_00012d1c (r0, r1);
0x00014af0 mov sp, sb |
0x00014af4 cmp r0, 0 |
| if (r0 != 0) {
0x00014af8 bne 0x14a04 | goto label_0;
| }
0x00014afc add r3, r4, 0x28 | r3 = r4 + 0x28;
0x00014b00 mov r2, r6 | r2 = r6;
0x00014b04 mov r1, r5 | r1 = r5;
0x00014b08 ldr r0, [r7, 0x54] | r0 = *((r7 + 0x54));
0x00014b0c bl 0x12f88 | r0 = fcn_00012f88 (r0, r1);
0x00014b10 cmp r0, 0 |
| if (r0 != 0) {
0x00014b14 bne 0x14a04 | goto label_0;
| }
0x00014b18 add r3, r4, 0x2c | r3 = r4 + 0x2c;
0x00014b1c mov r2, r6 | r2 = r6;
0x00014b20 mov r1, r5 | r1 = r5;
0x00014b24 ldr r0, [r7, 0x58] | r0 = *((r7 + 0x58));
0x00014b28 bl 0x12f88 | r0 = fcn_00012f88 (r0, r1);
0x00014b2c cmp r0, 0 |
| if (r0 != 0) {
0x00014b30 bne 0x14a04 | goto label_0;
| }
0x00014b34 add r3, r4, 0x30 | r3 = r4 + 0x30;
0x00014b38 mov r2, r6 | r2 = r6;
0x00014b3c mov r1, r5 | r1 = r5;
0x00014b40 ldr r0, [r7, 0x5c] | r0 = *((r7 + 0x5c));
0x00014b44 bl 0x12f88 | r0 = fcn_00012f88 (r0, r1);
0x00014b48 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 != r0) {
0x00014b4c bne 0x14a04 | goto label_0;
| }
0x00014b50 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x00014b54 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x00014b58 ldr r7, [r7, 0x60] | r7 = *((r7 + 0x60));
0x00014b5c smull r2, r3, r0, r1 | r2:r3 = r0 * r1;
0x00014b60 mov r0, r7 | r0 = r7;
0x00014b64 strd r2, r3, [r4, 0x20] | __asm ("strd r2, r3, [r4, 0x20]");
0x00014b68 bl 0x10d90 | strlen (r0);
0x00014b6c mov r3, r6 | r3 = r6;
0x00014b70 mov r2, r5 | r2 = r5;
0x00014b74 mov r1, r7 | r1 = r7;
0x00014b78 add r0, r0, 0x6b | r0 += 0x6b;
0x00014b7c bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00014b80 sub sp, sp, r0 |
0x00014b84 mov r0, sp | r0 = sp;
0x00014b88 bl 0x10d60 | sprintf (r0, r1, r2)
0x00014b8c mov r0, sp | r0 = sp;
0x00014b90 mov r2, 0x81 | r2 = 0x81;
0x00014b94 add r1, r4, 0x34 | r1 = r4 + 0x34;
0x00014b98 bl 0x12fd8 | fcn_00012fd8 (r0, r1);
0x00014b9c mov sp, sb |
0x00014ba0 cmp r0, 0 |
| if (r0 < 0) {
0x00014ba4 blt 0x14a04 | goto label_0;
| }
0x00014ba8 add r4, r4, r0 | r4 += r0;
0x00014bac strb r8, [r4, 0x33] | *((r4 + 0x33)) = r8;
0x00014bb0 b 0x14a08 | goto label_1;
| label_2:
0x00014bb4 ldr r0, [pc, 0x28] |
0x00014bb8 sub r3, fp, 0x58 | r3 -= s1;
0x00014bbc ldr r2, [pc, 0x24] | r2 = stderr;
0x00014bc0 ldr r1, [pc, 0x24] | r1 = "libubi";
0x00014bc4 ldr r0, [r0] | r0 = "dynamic\n";
0x00014bc8 bl 0x10c7c | r0 = fprintf ("dynamic\n", "libubi", r2, r3);
0x00014bcc bl 0x10d78 | errno_location ();
0x00014bd0 mov r3, 0x16 | r3 = 0x16;
0x00014bd4 str r3, [r0] | *(r0) = r3;
0x00014bd8 b 0x14a04 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x15d90 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00015d90 () | void fcn_00015d90 (char * s) {
| int32_t var_120h;
| int32_t var_11ch;
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_18h_2;
| int32_t var_18h;
| r0 = s;
0x00015d90 push {r4, r5, r6, r7, r8, fp, lr} |
0x00015d94 add fp, sp, 0x18 |
0x00015d98 sub sp, sp, 0x114 |
0x00015d9c mov r5, r0 | r5 = r0;
0x00015da0 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00015da4 bl 0x10d90 | r0 = strlen (r0);
0x00015da8 add r0, r0, 0x11 | r0 += 0x11;
0x00015dac bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00015db0 sub sp, sp, r0 |
0x00015db4 ldr r0, [r5] | r0 = *(r5);
0x00015db8 bl 0x10d3c | r0 = opendir ();
0x00015dbc subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x00015dc0 addne r7, sp, 8 | r7 += var_8h;
| }
| if (r4 == r0) {
0x00015dc4 ldrne r8, [pc, 0x1a0] | r8 = "mtd_d_s";
| }
| if (r4 != r0) {
0x00015dc8 bne 0x15e24 | goto label_3;
| }
0x00015dcc bl 0x10d78 | r0 = errno_location ();
0x00015dd0 ldr r6, [r0] | r6 = *(r0);
0x00015dd4 cmp r6, 2 |
| if (r6 != 2) {
0x00015dd8 streq r4, [r0] | *(r0) = r4;
| }
| if (r6 == 2) {
0x00015ddc beq 0x15e7c | goto label_1;
| }
0x00015de0 ldr r4, [pc, 0x188] |
0x00015de4 ldr r3, [r5] | r3 = *(r5);
0x00015de8 ldr r2, [pc, 0x184] | r2 = stderr;
0x00015dec ldr r1, [pc, 0x184] | r1 = "libmtd";
0x00015df0 ldr r0, [r4] | r0 = "mtd_d_s";
0x00015df4 bl 0x10c7c | fprintf ("mtd_d_s", "libmtd", r2, r3, "mtd_d_s");
0x00015df8 mov r0, r6 | r0 = r6;
0x00015dfc ldr r4, [r4] | r4 = "mtd_d_s";
0x00015e00 bl 0x10bc8 | strerror (r0);
0x00015e04 ldr r3, [pc, 0x170] | r3 = "%s: error!: cannot open \"%s\"\n";
0x00015e08 ldr r1, [pc, 0x170] | r1 = *(0x15f7c);
0x00015e0c mov r2, 8 | r2 = 8;
0x00015e10 str r6, [sp] | *(sp) = r6;
0x00015e14 str r0, [sp, 4] | var_4h = r0;
0x00015e18 mov r0, r4 | r0 = r4;
| label_0:
0x00015e1c bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4, r5, r6);
0x00015e20 b 0x15e78 |
| while (r0 != 1) {
| label_3:
0x00015e24 mov r0, r4 | r0 = r4;
0x00015e28 bl 0x10cd0 | r0 = readdir64 ();
0x00015e2c cmp r0, 0 |
| if (r0 == 0) {
0x00015e30 beq 0x15f00 | goto label_4;
| }
0x00015e34 add r6, r0, 0x13 | r6 = r0 + 0x13;
0x00015e38 mov r0, r6 | r0 = r6;
0x00015e3c bl 0x10d90 | r0 = strlen (r0);
0x00015e40 cmp r0, 0xfe |
| if (r0 >= 0xfe) {
0x00015e44 bls 0x15e88 |
0x00015e48 ldr r0, [pc, 0x120] |
0x00015e4c str r6, [sp] | *(sp) = r6;
0x00015e50 ldr r2, [pc, 0x11c] | r2 = stderr;
0x00015e54 ldr r3, [r5] | r3 = *(r5);
0x00015e58 ldr r1, [pc, 0x124] | r1 = "_serror__d___s_";
0x00015e5c ldr r0, [r0] | r0 = "mtd_d_s";
0x00015e60 bl 0x10c7c | r0 = fprintf ("mtd_d_s", "_serror__d___s_", r2, r3, r4, r5, r6);
0x00015e64 bl 0x10d78 | errno_location ();
0x00015e68 mov r3, 0x16 | r3 = 0x16;
0x00015e6c str r3, [r0] | *(r0) = r3;
0x00015e70 mov r0, r4 | r0 = r4;
0x00015e74 bl 0x10db4 | closedir ();
0x00015e78 mvn r4, 0 | r4 = ~0;
| label_1:
0x00015e7c mov r0, r4 | r0 = r4;
0x00015e80 sub sp, fp, 0x18 |
0x00015e84 pop {r4, r5, r6, r7, r8, fp, pc} |
| }
0x00015e88 sub r3, fp, 0x11c | r3 -= var_11ch;
0x00015e8c sub r2, fp, 0x120 | r2 -= var_120h;
0x00015e90 mov r1, r8 | r1 = r8;
0x00015e94 mov r0, r6 | r0 = r6;
0x00015e98 bl 0x10ce8 | r0 = sscanf (r0, r1, r2);
0x00015e9c cmp r0, 1 |
0x00015ea0 bne 0x15e24 |
| }
0x00015ea4 ldr r6, [fp, -0x120] | r6 = var_120h;
| do {
0x00015ea8 mov r0, r4 | r0 = r4;
0x00015eac bl 0x10db4 | r0 = closedir ();
0x00015eb0 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x00015eb4 beq 0x15f08 | goto label_5;
| }
0x00015eb8 bl 0x10d78 | errno_location ();
0x00015ebc ldr r6, [pc, 0xac] | r6 = "mtd_d_s";
0x00015ec0 ldr r3, [r5] | r3 = *(r5);
0x00015ec4 ldr r2, [pc, 0xa8] | r2 = stderr;
0x00015ec8 ldr r1, [pc, 0xb8] | r1 = "_s:_error_:_invalid_entry_in__s:___s_";
0x00015ecc ldr r4, [r0] | r4 = *(r0);
0x00015ed0 ldr r0, [r6] | r0 = "mtd_d_s";
0x00015ed4 bl 0x10c7c | fprintf ("mtd_d_s", "_s:_error_:_invalid_entry_in__s:___s_", r2, r3, r4, r5, "mtd_d_s");
0x00015ed8 ldr r5, [r6] | r5 = "mtd_d_s";
| label_2:
0x00015edc mov r0, r4 | r0 = r4;
0x00015ee0 bl 0x10bc8 | strerror (r0);
0x00015ee4 str r4, [sp] | *(sp) = r4;
0x00015ee8 ldr r3, [pc, 0x8c] | r3 = "%s: error!: cannot open \"%s\"\n";
0x00015eec mov r2, 8 | r2 = 8;
0x00015ef0 ldr r1, [pc, 0x88] | r1 = *(0x15f7c);
0x00015ef4 str r0, [sp, 4] | var_4h = r0;
0x00015ef8 mov r0, r5 | r0 = r5;
0x00015efc b 0x15e1c | goto label_0;
| label_4:
0x00015f00 mvn r6, 0 | r6 = ~0;
0x00015f04 b 0x15ea8 |
| } while (1);
| label_5:
0x00015f08 cmn r6, 1 |
| if (r6 == 1) {
0x00015f0c beq 0x15e7c | goto label_1;
| }
0x00015f10 mov r2, r6 | r2 = r6;
0x00015f14 ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00015f18 mov r0, r7 | r0 = r7;
0x00015f1c bl 0x10d60 | sprintf (r0, r1, r2)
0x00015f20 mov r1, 0x80000 | r1 = 0x80000;
0x00015f24 mov r0, r7 | r0 = r7;
0x00015f28 bl 0x10d30 | r0 = open64 ();
0x00015f2c cmn r0, 1 |
| if (r0 == 1) {
0x00015f30 beq 0x15e7c | goto label_1;
| }
0x00015f34 bl 0x10dcc | r0 = close (r0);
0x00015f38 cmp r0, 0 |
| if (r0 == 0) {
0x00015f3c moveq r4, 1 | r4 = 1;
| goto label_6;
| }
| if (r0 == 0) {
| label_6:
0x00015f40 beq 0x15e7c | goto label_1;
| }
0x00015f44 bl 0x10d78 | errno_location ();
0x00015f48 ldr r5, [pc, 0x20] |
0x00015f4c mov r3, r7 | r3 = r7;
0x00015f50 ldr r2, [pc, 0x1c] | r2 = stderr;
0x00015f54 ldr r1, [pc, 0x30] | r1 = "%s: error!: closedir failed on \"%s\"\n";
0x00015f58 ldr r4, [r0] | r4 = *(r0);
0x00015f5c ldr r0, [r5] | r0 = "mtd_d_s";
0x00015f60 bl 0x10c7c | fprintf ("mtd_d_s", "%s: error!: closedir failed on \"%s\"\n", r2, r3, r4, "mtd_d_s");
0x00015f64 ldr r5, [r5] | r5 = "mtd_d_s";
0x00015f68 b 0x15edc | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x162d8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000162d8 () | void fcn_000162d8 (int32_t arg1, int32_t arg2) {
| int32_t var_8h;
| char * s;
| int32_t var_1ch;
| int32_t var_14h_2;
| int32_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x000162d8 push {r4, r5, r6, r7, fp, lr} |
0x000162dc add fp, sp, 0x14 |
0x000162e0 sub sp, sp, 0x18 |
0x000162e4 mov r7, r1 | r7 = r1;
0x000162e8 mov r6, r0 | r6 = r0;
0x000162ec mov r5, r2 | r5 = r2;
0x000162f0 bl 0x10d90 | strlen (r0);
0x000162f4 mov r2, r7 | r2 = r7;
0x000162f8 mov r1, r6 | r1 = r6;
0x000162fc add r0, r0, 0x39 | r0 += 0x39;
0x00016300 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00016304 sub sp, sp, r0 |
0x00016308 add r4, sp, 0x10 | r4 += s;
0x0001630c mov r0, r4 | r0 = r4;
0x00016310 bl 0x10d60 | sprintf (r0, r1, r2)
0x00016314 sub r1, fp, 0x1c | r1 -= s;
0x00016318 mov r0, r4 | r0 = r4;
0x0001631c bl 0x16124 | r0 = fcn_00016124 (r0, r1);
0x00016320 cmp r0, 0 |
| if (r0 == 0) {
0x00016324 bne 0x16364 |
0x00016328 ldrd r2, r3, [fp, -0x1c] | __asm ("ldrd r2, r3, [s]");
0x0001632c cmp r2, 0x80000000 |
0x00016330 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 >= 0x80000000) {
0x00016334 strlt r2, [r5] | *(r5) = r2;
| }
| if (r2 < 0x80000000) {
0x00016338 blt 0x16368 | goto label_0;
| }
0x0001633c strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00016340 ldr r3, [pc, 0x28] | r3 = *(0x1636c);
0x00016344 str r4, [sp, 8] | var_8h = r4;
0x00016348 ldr r2, [pc, 0x24] | r2 = stderr;
0x0001634c ldr r0, [r3] | r0 = *(0x1636c);
0x00016350 ldr r1, [pc, 0x20] | r1 = "libmtd";
0x00016354 bl 0x10c7c | r0 = fprintf (r0, "libmtd", r2, r3, r4);
0x00016358 bl 0x10d78 | errno_location ();
0x0001635c mov r3, 0x16 | r3 = 0x16;
0x00016360 str r3, [r0] | *(r0) = r3;
| }
0x00016364 mvn r0, 0 | r0 = ~0;
| label_0:
0x00016368 sub sp, fp, 0x14 |
0x0001636c pop {r4, r5, r6, r7, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x16768 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00016768 () | void fcn_00016768 (int32_t arg2, char * s) {
| char * var_50h;
| int32_t var_0h;
| int32_t var_4h;
| char * var_8h;
| int32_t var_18h_2;
| int32_t var_18h;
| r1 = arg2;
| r0 = s;
0x00016768 push {r4, r5, r6, r7, r8, fp, lr} |
0x0001676c add fp, sp, 0x18 |
0x00016770 sub sp, sp, 0x44 |
0x00016774 ldr r7, [r0] | r7 = *(r0);
0x00016778 mov r8, r1 | r8 = r1;
0x0001677c mov r0, r7 | r0 = r7;
0x00016780 mov r6, r3 | r6 = r3;
0x00016784 mov r5, r2 | r5 = r2;
0x00016788 bl 0x10d90 | strlen (r0);
0x0001678c mov r2, r8 | r2 = r8;
0x00016790 mov r1, r7 | r1 = r7;
0x00016794 add r0, r0, 0x39 | r0 += 0x39;
0x00016798 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x0001679c sub sp, sp, r0 |
0x000167a0 add r4, sp, 8 | r4 += var_8h;
0x000167a4 mov r0, r4 | r0 = r4;
0x000167a8 bl 0x10d60 | sprintf (r0, r1, r2)
0x000167ac mov r2, 0x32 | r2 = 0x32;
0x000167b0 sub r1, fp, 0x50 | r1 -= var_50h;
0x000167b4 mov r0, r4 | r0 = r4;
0x000167b8 bl 0x15f90 | r0 = fcn_00015f90 (r0, r1);
0x000167bc cmp r0, 0 |
| if (r0 < 0) {
0x000167c0 blt 0x16808 | goto label_1;
| }
0x000167c4 mov r3, r6 | r3 = r6;
0x000167c8 mov r2, r5 | r2 = r5;
0x000167cc ldr r1, [pc, 0x8c] | r1 = *(0x1685c);
0x000167d0 sub r0, fp, 0x50 | r0 -= var_50h;
0x000167d4 bl 0x10ce8 | r0 = sscanf (r0, r1, r2);
0x000167d8 cmp r0, 2 |
| if (r0 == 2) {
0x000167dc beq 0x16810 | goto label_2;
| }
0x000167e0 bl 0x10d78 | errno_location ();
0x000167e4 mov r3, 0x16 | r3 = 0x16;
0x000167e8 ldr r2, [pc, 0x74] | r2 = "_d:_d";
0x000167ec ldr r1, [pc, 0x74] | r1 = "libmtd";
0x000167f0 str r3, [r0] | *(r0) = r3;
0x000167f4 ldr r0, [pc, 0x70] |
0x000167f8 mov r3, r4 | r3 = r4;
0x000167fc ldr r0, [r0] | r0 = "%s: error!: \"%s\" does not have major:minor format\n";
0x00016800 bl 0x10c7c | fprintf ("%s: error!: \"%s\" does not have major:minor format\n", "libmtd", "_d:_d", r3);
| label_0:
0x00016804 mvn r0, 0 | r0 = ~0;
| do {
| label_1:
0x00016808 sub sp, fp, 0x18 |
0x0001680c pop {r4, r5, r6, r7, r8, fp, pc} |
| label_2:
0x00016810 ldr r3, [r5] | r3 = *(r5);
0x00016814 cmp r3, 0 |
| if (r3 < 0) {
0x00016818 blt 0x1682c | goto label_3;
| }
0x0001681c ldr r3, [r6] | r3 = *(r6);
0x00016820 cmp r3, 0 |
| if (r3 < 0) {
0x00016824 movge r0, 0 | r0 = 0;
| }
0x00016828 bge 0x16808 |
| } while (r3 >= 0);
| label_3:
0x0001682c bl 0x10d78 | errno_location ();
0x00016830 mov r3, 0x16 | r3 = 0x16;
0x00016834 ldr r2, [pc, 0x28] | r2 = "_d:_d";
0x00016838 ldr r1, [pc, 0x30] | r1 = stderr;
0x0001683c str r3, [r0] | *(r0) = r3;
0x00016840 ldr r0, [pc, 0x24] |
0x00016844 ldr r3, [r6] | r3 = *(r6);
0x00016848 str r4, [sp, 4] | var_4h = r4;
0x0001684c str r3, [sp] | *(sp) = r3;
0x00016850 ldr r3, [r5] | r3 = *(r5);
0x00016854 ldr r0, [r0] | r0 = "%s: error!: \"%s\" does not have major:minor format\n";
0x00016858 bl 0x10c7c | fprintf ("%s: error!: \"%s\" does not have major:minor format\n", r1, "_d:_d", r3, r4);
0x0001685c b 0x16804 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x16e10 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00016e10 () | void fcn_00016e10 (int32_t arg1, int32_t arg2) {
| int32_t var_7ch;
| int32_t var_10h_2;
| int32_t var_10h;
| r0 = arg1;
| r1 = arg2;
0x00016e10 push {r4, r5, r6, fp, lr} |
0x00016e14 add fp, sp, 0x10 |
0x00016e18 sub sp, sp, 0x6c |
0x00016e1c ldrb r3, [r0, 0x34] | r3 = *((r0 + 0x34));
0x00016e20 mov r5, r1 | r5 = r1;
0x00016e24 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x00016e28 bne 0x16e48 | goto label_0;
| }
0x00016e2c mov r0, r1 | r0 = r1;
0x00016e30 bl 0x189d0 | r0 = fcn_000189d0 (r0);
0x00016e34 sub r0, r0, 1 | r0--;
0x00016e38 clz r0, r0 | r0 &= r0;
0x00016e3c lsr r0, r0, 5 | r0 >>= 5;
| do {
0x00016e40 sub sp, fp, 0x10 |
0x00016e44 pop {r4, r5, r6, fp, pc} |
| label_0:
0x00016e48 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x00016e4c mov r6, sp | r6 = sp;
0x00016e50 mov r0, r4 | r0 = r4;
0x00016e54 bl 0x10d90 | strlen (r0);
0x00016e58 mov r2, r5 | r2 = r5;
0x00016e5c mov r1, r4 | r1 = r4;
0x00016e60 add r0, r0, 0x11 | r0 += 0x11;
0x00016e64 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00016e68 sub sp, sp, r0 |
0x00016e6c mov r0, sp | r0 = sp;
0x00016e70 bl 0x10d60 | sprintf (r0, r1, r2)
0x00016e74 mov r0, sp | r0 = sp;
0x00016e78 sub r1, fp, 0x7c | r1 -= var_7ch;
0x00016e7c bl 0x10bd4 | stat64 ();
0x00016e80 mov sp, r6 |
0x00016e84 clz r0, r0 | r0 &= r0;
0x00016e88 lsr r0, r0, 5 | r0 >>= 5;
0x00016e8c b 0x16e40 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x16ed0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00016ed0 () | void fcn_00016ed0 (int32_t arg1, int32_t arg2) {
| int32_t var_68h;
| int32_t var_64h;
| char * buf;
| int32_t var_24h;
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| char * s;
| int32_t var_sp_64h;
| int32_t var_20h_2;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x00016ed0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00016ed4 add r6, r2, 4 | r6 = r2 + 4;
0x00016ed8 add fp, sp, 0x20 |
0x00016edc sub sp, sp, 0x5c |
0x00016ee0 mov r5, r1 | r5 = r1;
0x00016ee4 mov r7, r0 | r7 = r0;
0x00016ee8 mov r4, r2 | r4 = r2;
0x00016eec mov r1, 0 | r1 = 0;
0x00016ef0 mov r2, 0xfc | r2 = 0xfc;
0x00016ef4 mov r0, r6 | r0 = r6;
0x00016ef8 bl 0x10d18 | memset (r0, r1, r2);
0x00016efc str r5, [r4] | *(r4) = r5;
0x00016f00 mov r1, r5 | r1 = r5;
0x00016f04 mov r0, r7 | r0 = r7;
0x00016f08 bl 0x16e10 | r0 = fcn_00016e10 (r0, r1);
0x00016f0c cmp r0, 0 |
| if (r0 != 0) {
0x00016f10 bne 0x16f28 | goto label_4;
| }
0x00016f14 bl 0x10d78 | errno_location ();
0x00016f18 mov r3, 0x13 | r3 = 0x13;
0x00016f1c str r3, [r0] | *(r0) = r3;
| do {
| label_0:
0x00016f20 mvn r5, 0 | r5 = ~0;
0x00016f24 b 0x16f44 | goto label_1;
| label_4:
0x00016f28 ldrb r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00016f2c tst r3, 1 |
| if ((r3 & 1) == 0) {
0x00016f30 bne 0x16f50 |
0x00016f34 mov r0, r5 | r0 = r5;
0x00016f38 mov r1, r4 | r1 = r4;
0x00016f3c bl 0x19144 | r0 = fcn_00019144 (r0, r1);
0x00016f40 mov r5, r0 | r5 = r0;
| label_1:
0x00016f44 mov r0, r5 | r0 = r5;
0x00016f48 sub sp, fp, 0x20 |
0x00016f4c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00016f50 add r3, r4, 8 | r3 = r4 + 8;
0x00016f54 mov r2, r6 | r2 = r6;
0x00016f58 mov r1, r5 | r1 = r5;
0x00016f5c add r0, r7, 8 | r0 = r7 + 8;
0x00016f60 bl 0x16768 | r0 = fcn_00016768 (r0, r1);
0x00016f64 subs sl, r0, 0 | sl = r0 - 0;
0x00016f68 bne 0x16f20 |
| } while (sl != r0);
0x00016f6c ldr r8, [r7, 0xc] | r8 = *((r7 + 0xc));
0x00016f70 mov sb, sp | sb = sp;
0x00016f74 mov r0, r8 | r0 = r8;
0x00016f78 bl 0x10d90 | strlen (r0);
0x00016f7c mov r2, r5 | r2 = r5;
0x00016f80 mov r1, r8 | r1 = r8;
0x00016f84 add r6, r4, 0x51 | r6 = r4 + 0x51;
0x00016f88 add r0, r0, 0x6b | r0 += 0x6b;
0x00016f8c bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00016f90 sub sp, sp, r0 |
0x00016f94 add r3, sp, 0x10 | r3 += s;
0x00016f98 mov r0, r3 | r0 = r3;
0x00016f9c str r3, [fp, -0x68] | var_68h = r3;
0x00016fa0 bl 0x10d60 | sprintf (r0, r1, r2)
0x00016fa4 ldr r3, [fp, -0x68] | r3 = var_68h;
0x00016fa8 mov r2, 0x80 | r2 = 0x80;
0x00016fac mov r1, r6 | r1 = r6;
0x00016fb0 mov r0, r3 | r0 = r3;
0x00016fb4 bl 0x15f90 | fcn_00015f90 (r0, r1);
0x00016fb8 mov sp, sb |
0x00016fbc cmp r0, 0 |
| if (r0 < 0) {
0x00016fc0 blt 0x16f20 | goto label_0;
| }
0x00016fc4 add r6, r6, r0 | r6 += r0;
0x00016fc8 strb sl, [r6, -1] | *((r6 - 1)) = sl;
0x00016fcc ldr r6, [r7, 0x10] | r6 = *((r7 + 0x10));
0x00016fd0 add r8, r4, 0x10 | r8 = r4 + 0x10;
0x00016fd4 mov r0, r6 | r0 = r6;
0x00016fd8 bl 0x10d90 | strlen (r0);
0x00016fdc mov r2, r5 | r2 = r5;
0x00016fe0 mov r1, r6 | r1 = r6;
0x00016fe4 add r0, r0, 0x6b | r0 += 0x6b;
0x00016fe8 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00016fec sub sp, sp, r0 |
0x00016ff0 add r3, sp, 0x10 | r3 += s;
0x00016ff4 mov r0, r3 | r0 = r3;
0x00016ff8 str r3, [fp, -0x68] | var_68h = r3;
0x00016ffc bl 0x10d60 | sprintf (r0, r1, r2)
0x00017000 ldr r3, [fp, -0x68] | r3 = var_68h;
0x00017004 mov r2, 0x41 | r2 = 0x41;
0x00017008 mov r1, r8 | r1 = r8;
0x0001700c mov r0, r3 | r0 = r3;
0x00017010 bl 0x15f90 | fcn_00015f90 (r0, r1);
0x00017014 mov sp, sb |
0x00017018 cmp r0, 0 |
| if (r0 < 0) {
0x0001701c blt 0x16f20 | goto label_0;
| }
0x00017020 add r0, r8, r0 | r0 = r8 + r0;
0x00017024 strb sl, [r0, -1] | *((r0 - 1)) = sl;
0x00017028 add r2, r4, 0xe4 | r2 = r4 + 0xe4;
0x0001702c mov r1, r5 | r1 = r5;
0x00017030 ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x00017034 bl 0x162d8 | r0 = fcn_000162d8 (r0, r1);
0x00017038 cmp r0, 0 |
| if (r0 != 0) {
0x0001703c bne 0x16f20 | goto label_0;
| }
0x00017040 ldr sl, [r7, 0x18] | sl = *((r7 + 0x18));
0x00017044 mov r0, sl | r0 = sl;
0x00017048 bl 0x10d90 | strlen (r0);
0x0001704c mov r2, r5 | r2 = r5;
0x00017050 mov r1, sl | r1 = sl;
0x00017054 add r0, r0, 0x39 | r0 += 0x39;
0x00017058 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x0001705c sub sp, sp, r0 |
0x00017060 add r6, sp, 0x10 | r6 += s;
0x00017064 mov r0, r6 | r0 = r6;
0x00017068 bl 0x10d60 | sprintf (r0, r1, r2)
0x0001706c add r1, r4, 0xd8 | r1 = r4 + 0xd8;
0x00017070 mov r0, r6 | r0 = r6;
0x00017074 bl 0x16124 | fcn_00016124 (r0, r1);
0x00017078 mov sp, sb |
0x0001707c cmp r0, 0 |
| if (r0 != 0) {
0x00017080 bne 0x16f20 | goto label_0;
| }
0x00017084 add r2, r4, 0xe8 | r2 = r4 + 0xe8;
0x00017088 mov r1, r5 | r1 = r5;
0x0001708c ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00017090 bl 0x162d8 | r0 = fcn_000162d8 (r0, r1);
0x00017094 cmp r0, 0 |
| if (r0 != 0) {
0x00017098 bne 0x16f20 | goto label_0;
| }
0x0001709c add r2, r4, 0xec | r2 = r4 + 0xec;
0x000170a0 mov r1, r5 | r1 = r5;
0x000170a4 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x000170a8 bl 0x162d8 | r0 = fcn_000162d8 (r0, r1);
0x000170ac cmp r0, 0 |
| if (r0 != 0) {
0x000170b0 bne 0x16f20 | goto label_0;
| }
0x000170b4 add r2, r4, 0xf0 | r2 = r4 + 0xf0;
0x000170b8 mov r1, r5 | r1 = r5;
0x000170bc ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x000170c0 bl 0x162d8 | r0 = fcn_000162d8 (r0, r1);
0x000170c4 cmp r0, 0 |
| if (r0 != 0) {
0x000170c8 bne 0x16f20 | goto label_0;
| }
0x000170cc add r2, r4, 0xf4 | r2 = r4 + 0xf4;
0x000170d0 mov r1, r5 | r1 = r5;
0x000170d4 ldr r0, [r7, 0x28] | r0 = *((r7 + 0x28));
0x000170d8 bl 0x162d8 | r0 = fcn_000162d8 (r0, r1);
0x000170dc cmp r0, 0 |
| if (r0 != 0) {
0x000170e0 beq 0x170fc |
0x000170e4 mov r0, r5 | r0 = r5;
0x000170e8 bl 0x18c2c | r0 = fcn_00018c2c (r0);
0x000170ec cmp r0, 0 |
| if (r0 >= 0) {
0x000170f0 movlt r3, 0 | r3 = 0;
| }
| if (r0 < 0) {
0x000170f4 strge r0, [r4, 0xf4] | *((r4 + 0xf4)) = r0;
| }
| if (r0 < 0) {
0x000170f8 strlt r3, [r4, 0xf4] | *((r4 + 0xf4)) = r3;
| goto label_5;
| }
| }
| label_5:
0x000170fc add r2, r4, 0xf8 | r2 = r4 + 0xf8;
0x00017100 mov r1, r5 | r1 = r5;
0x00017104 ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x00017108 bl 0x162d8 | r0 = fcn_000162d8 (r0, r1);
0x0001710c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 != r0) {
0x00017110 bne 0x16f20 | goto label_0;
| }
0x00017114 ldr r7, [r7, 0x30] | r7 = *((r7 + 0x30));
0x00017118 mov sl, sp | sl = sp;
0x0001711c mov r0, r7 | r0 = r7;
0x00017120 bl 0x10d90 | strlen (r0);
0x00017124 mov r2, r5 | r2 = r5;
0x00017128 mov r1, r7 | r1 = r7;
0x0001712c add r0, r0, 0x39 | r0 += 0x39;
0x00017130 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00017134 sub sp, sp, r0 |
0x00017138 add sb, sp, 0x10 | sb += s;
0x0001713c mov r0, sb | r0 = sb;
0x00017140 bl 0x10d60 | sprintf (r0, r1, r2)
0x00017144 mov r1, 0x80000 | r1 = 0x80000;
0x00017148 mov r0, sb | r0 = sb;
0x0001714c bl 0x10d30 | r0 = open64 ();
0x00017150 cmn r0, 1 |
0x00017154 mov r5, r0 | r5 = r0;
| if (r0 == 1) {
0x00017158 bne 0x17164 |
0x0001715c mov sp, sl |
0x00017160 b 0x16f44 | goto label_1;
| }
0x00017164 mov r2, 0x32 | r2 = 0x32;
0x00017168 sub r1, fp, 0x58 | r1 -= buf;
0x0001716c bl 0x10cac | r0 = read (r0, r1, r2);
0x00017170 cmn r0, 1 |
| if (r0 != 1) {
0x00017174 bne 0x171cc | goto label_6;
| }
0x00017178 bl 0x10d78 | errno_location ();
0x0001717c ldr r6, [pc, 0x294] |
0x00017180 mov r3, sb | r3 = sb;
0x00017184 ldr r2, [pc, 0x290] | r2 = stderr;
0x00017188 ldr r1, [pc, 0x290] | r1 = "libmtd";
0x0001718c ldr r4, [r0] | r4 = *(r0);
0x00017190 ldr r0, [r6] | r0 = *(0x17414);
0x00017194 bl 0x10c7c | fprintf (r0, "libmtd", r2, r3, r4, r5, r6);
0x00017198 mov r0, r4 | r0 = r4;
0x0001719c ldr r6, [r6] | r6 = *(0x17414);
0x000171a0 bl 0x10bc8 | strerror (r0);
0x000171a4 str r4, [sp] | *(sp) = r4;
0x000171a8 ldr r3, [pc, 0x274] | r3 = "%s: error!: cannot read \"%s\"\n";
0x000171ac mov r2, 8 | r2 = 8;
0x000171b0 ldr r1, [pc, 0x270] | r1 = *(0x17424);
0x000171b4 str r0, [sp, 4] | var_4h = r0;
0x000171b8 mov r0, r6 | r0 = r6;
0x000171bc bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4);
| do {
0x000171c0 mov r0, r5 | r0 = r5;
0x000171c4 bl 0x10dcc | close (r0);
0x000171c8 b 0x172b4 | goto label_7;
| label_6:
0x000171cc cmp r0, 0x32 |
| if (r0 != 0x32) {
0x000171d0 bne 0x171fc | goto label_8;
| }
0x000171d4 ldr r2, [pc, 0x240] | r2 = stderr;
0x000171d8 ldr r1, [pc, 0x24c] | r1 = "_serror__d___s_";
0x000171dc mov r3, sb | r3 = sb;
| label_2:
0x000171e0 ldr r0, [pc, 0x230] |
0x000171e4 ldr r0, [r0] | r0 = *(0x17414);
0x000171e8 bl 0x10c7c | r0 = fprintf (r0, "_serror__d___s_", r2, r3);
| label_3:
0x000171ec bl 0x10d78 | errno_location ();
0x000171f0 mov r3, 0x16 | r3 = 0x16;
0x000171f4 str r3, [r0] | *(r0) = r3;
0x000171f8 b 0x171c0 |
| } while (1);
| label_8:
0x000171fc sub r3, fp, 0x24 | r3 -= var_24h;
0x00017200 add r0, r3, r0 | r0 = r3 + r0;
0x00017204 strb r6, [r0, -0x34] | *((r0 - 0x34)) = r6;
0x00017208 sub r2, fp, 0x64 | r2 -= var_64h;
0x0001720c ldr r1, [pc, 0x21c] | r1 = "%s: error!: contents of \"%s\" is too long\n";
0x00017210 sub r0, fp, 0x58 | r0 -= buf;
0x00017214 bl 0x10ce8 | r0 = sscanf (r0, "%s: error!: contents of \"%s\" is too long\n", r2);
0x00017218 cmp r0, 1 |
| if (r0 == 1) {
0x0001721c movne r3, sb | r3 = sb;
| }
| if (r0 == 1) {
0x00017220 ldrne r2, [pc, 0x1f4] | r2 = "libmtd";
| }
| if (r0 != 1) {
0x00017224 ldrne r1, [pc, 0x208] | r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
| goto label_9;
| }
| if (r0 != 1) {
| label_9:
0x00017228 bne 0x171e0 | goto label_2;
| }
0x0001722c ldrd r2, r3, [fp, -0x64] | __asm ("ldrd r2, r3, [var_64h]");
0x00017230 cmp r2, 0 |
0x00017234 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 < 0) {
0x00017238 bge 0x1725c |
0x0001723c strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00017240 ldr r3, [pc, 0x1d0] | r3 = *(0x17414);
0x00017244 str sb, [sp, 8] | var_8h = sb;
0x00017248 ldr r2, [pc, 0x1cc] | r2 = stderr;
0x0001724c ldr r1, [pc, 0x1e4] | r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
0x00017250 ldr r0, [r3] | r0 = *(0x17414);
0x00017254 bl 0x10c7c | fprintf (r0, "%s: error!: cannot read integer from \"%s\"\n\n", r2, r3);
0x00017258 b 0x171ec | goto label_3;
| }
0x0001725c mov r0, r5 | r0 = r5;
0x00017260 bl 0x10dcc | r0 = close (r0);
0x00017264 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x00017268 beq 0x172bc | goto label_10;
| }
0x0001726c bl 0x10d78 | errno_location ();
0x00017270 ldr r5, [pc, 0x1a0] |
0x00017274 mov r3, sb | r3 = sb;
0x00017278 ldr r2, [pc, 0x19c] | r2 = stderr;
0x0001727c ldr r1, [pc, 0x1b8] | r1 = "%s: error!: negative value %lld in \"%s\"\n";
0x00017280 ldr r4, [r0] | r4 = *(r0);
0x00017284 ldr r0, [r5] | r0 = *(0x17414);
0x00017288 bl 0x10c7c | fprintf (r0, "%s: error!: negative value %lld in \"%s\"\n", r2, r3, r4, r5);
0x0001728c mov r0, r4 | r0 = r4;
0x00017290 ldr r5, [r5] | r5 = *(0x17414);
0x00017294 bl 0x10bc8 | strerror (r0);
0x00017298 str r4, [sp] | *(sp) = r4;
0x0001729c ldr r3, [pc, 0x180] | r3 = "%s: error!: cannot read \"%s\"\n";
0x000172a0 mov r2, 8 | r2 = 8;
0x000172a4 ldr r1, [pc, 0x17c] | r1 = *(0x17424);
0x000172a8 str r0, [sp, 4] | var_4h = r0;
0x000172ac mov r0, r5 | r0 = r5;
0x000172b0 bl 0x10c7c | fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4);
| do {
| label_7:
0x000172b4 mov sp, sl |
0x000172b8 b 0x16f20 | goto label_0;
| label_10:
0x000172bc ldrd r2, r3, [fp, -0x64] | __asm ("ldrd r2, r3, [var_64h]");
0x000172c0 mov r1, 0 | r1 = 0;
0x000172c4 adds r6, r2, 0x80000000 | r6 = r2 + 0x80000000;
0x000172c8 adc r7, r3, 0 | __asm ("adc r7, r3, 0");
0x000172cc mvn r0, 0 | r0 = ~0;
0x000172d0 cmp r7, r1 |
0x000172d4 cmpeq r6, r0 | __asm ("cmpeq r6, r0");
| if (r7 < r1) {
0x000172d8 bls 0x17308 | goto label_11;
| }
0x000172dc strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000172e0 ldr r3, [pc, 0x130] | r3 = *(0x17414);
0x000172e4 str sb, [sp, 8] | var_8h = sb;
0x000172e8 ldr r2, [pc, 0x12c] | r2 = stderr;
0x000172ec ldr r0, [r3] | r0 = *(0x17414);
0x000172f0 ldr r1, [pc, 0x148] | r1 = "_s:_error_:_close_failed_on___s_";
0x000172f4 bl 0x10c7c | r0 = fprintf (r0, "_s:_error_:_close_failed_on___s_", r2, r3);
0x000172f8 bl 0x10d78 | errno_location ();
0x000172fc mov r3, 0x16 | r3 = 0x16;
0x00017300 str r3, [r0] | *(r0) = r3;
0x00017304 b 0x172b4 |
| } while (1);
| label_11:
0x00017308 lsl r3, r2, 0x15 | r3 = r2 << 0x15;
0x0001730c ldrb r2, [r4, 0xfc] | r2 = *((r4 + 0xfc));
0x00017310 mov sp, sl |
0x00017314 bic r2, r2, 1 | r2 = BIT_MASK (r2, 1);
0x00017318 orr r2, r2, r3, lsr 31 | r2 |= (r3 >> 31);
0x0001731c strb r2, [r4, 0xfc] | *((r4 + 0xfc)) = r2;
0x00017320 ldr r2, [r4, 0xe4] | r2 = *((r4 + 0xe4));
0x00017324 ldrd r0, r1, [r4, 0xd8] | __asm ("ldrd r0, r1, [r4, 0xd8]");
0x00017328 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0001732c bl 0x19ad0 | fcn_00019ad0 (r0);
0x00017330 ldr r1, [pc, 0x10c] | r1 = "_s:_error_:_value__lld_read_from_file___s__is_out_of_range";
0x00017334 str r0, [r4, 0xe0] | *((r4 + 0xe0)) = r0;
0x00017338 mov r0, r8 | r0 = r8;
0x0001733c bl 0x10d48 | r0 = strcmp (r0, r1);
0x00017340 cmp r0, 0 |
| if (r0 != 0) {
0x00017344 moveq r0, 4 | r0 = 4;
| }
| if (r0 != 0) {
0x00017348 beq 0x173f0 |
0x0001734c ldr r1, [pc, 0xf4] | r1 = "nand";
0x00017350 mov r0, r8 | r0 = r8;
0x00017354 bl 0x10d48 | r0 = strcmp (r0, "nand");
0x00017358 cmp r0, 0 |
| if (r0 != 0) {
0x0001735c moveq r0, 8 | r0 = 8;
| }
| if (r0 == 0) {
0x00017360 beq 0x173f0 | goto label_12;
| }
0x00017364 ldr r1, [pc, 0xe0] | r1 = "mlc_nand";
0x00017368 mov r0, r8 | r0 = r8;
0x0001736c bl 0x10d48 | r0 = strcmp (r0, "mlc_nand");
0x00017370 cmp r0, 0 |
| if (r0 != 0) {
0x00017374 moveq r0, 3 | r0 = 3;
| }
| if (r0 == 0) {
0x00017378 beq 0x173f0 | goto label_12;
| }
0x0001737c ldr r1, [pc, 0xcc] | r1 = *(0x1744c);
0x00017380 mov r0, r8 | r0 = r8;
0x00017384 bl 0x10d48 | r0 = strcmp (r0, r1);
0x00017388 cmp r0, 0 |
| if (r0 != 0) {
0x0001738c moveq r0, 2 | r0 = 2;
| }
| if (r0 == 0) {
0x00017390 beq 0x173f0 | goto label_12;
| }
0x00017394 ldr r1, [pc, 0xb8] | r1 = *(0x17450);
0x00017398 mov r0, r8 | r0 = r8;
0x0001739c bl 0x10d48 | r0 = strcmp (r0, r1);
0x000173a0 cmp r0, 0 |
| if (r0 == 0) {
0x000173a4 beq 0x173f0 | goto label_12;
| }
0x000173a8 ldr r1, [pc, 0xa8] | r1 = "absent";
0x000173ac mov r0, r8 | r0 = r8;
0x000173b0 bl 0x10d48 | r0 = strcmp (r0, "absent");
0x000173b4 cmp r0, 0 |
| if (r0 != 0) {
0x000173b8 moveq r0, 6 | r0 = 6;
| }
| if (r0 == 0) {
0x000173bc beq 0x173f0 | goto label_12;
| }
0x000173c0 ldr r1, [pc, 0x94] | r1 = "dataflash";
0x000173c4 mov r0, r8 | r0 = r8;
0x000173c8 bl 0x10d48 | r0 = strcmp (r0, "dataflash");
0x000173cc cmp r0, 0 |
| if (r0 != 0) {
0x000173d0 moveq r0, 1 | r0 = 1;
| }
| if (r0 == 0) {
0x000173d4 beq 0x173f0 | goto label_12;
| }
0x000173d8 ldr r1, [pc, 0x80] | r1 = "ram";
0x000173dc mov r0, r8 | r0 = r8;
0x000173e0 bl 0x10d48 | r0 = strcmp (r0, "ram");
0x000173e4 cmp r0, 0 |
| if (r0 != 0) {
0x000173e8 moveq r0, 7 | r0 = 7;
| }
| if (r0 != 0) {
0x000173ec mvnne r0, 0 | r0 = ~0;
| goto label_12;
| }
| }
| label_12:
0x000173f0 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000173f4 sub r0, r0, 4 | r0 -= 4;
0x000173f8 bics r3, r0, 4 | __asm ("bics r3, r0, 4");
0x000173fc ldrb r3, [r4, 0xfc] | r3 = *((r4 + 0xfc));
0x00017400 bic r2, r3, 2 | r2 = BIT_MASK (r3, 2);
| if (r0 != 0) {
0x00017404 moveq r3, 2 | r3 = 2;
| }
| if (r0 == 0) {
0x00017408 movne r3, 0 | r3 = 0;
| }
0x0001740c orr r3, r3, r2 | r3 |= r2;
0x00017410 strb r3, [r4, 0xfc] | *((r4 + 0xfc)) = r3;
0x00017414 b 0x16f44 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x18c2c */
| #include <stdint.h>
|
; (fcn) fcn.00018c2c () | void fcn_00018c2c (int32_t arg1) {
| int32_t var_24h;
| r0 = arg1;
0x00018c2c str lr, [sp, -4]! |
0x00018c30 ldr r1, [pc, 0x1c] | r1 = *(0x18c50);
0x00018c34 sub sp, sp, 0x24 |
0x00018c38 mov r2, r0 | r2 = r0;
0x00018c3c mov r0, sp | r0 = sp;
0x00018c40 bl 0x10d60 | sprintf (r0, r1, r2)
0x00018c44 mov r0, sp | r0 = sp;
0x00018c48 bl 0x18a8c | fcn_00018a8c (r0);
0x00018c4c add sp, sp, 0x24 |
0x00018c50 pop {pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x19144 */
| #include <stdint.h>
|
; (fcn) fcn.00019144 () | void fcn_00019144 (int32_t arg1, int32_t arg2) {
| char * s;
| int32_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x00019144 push {r4, lr} |
0x00019148 sub sp, sp, 0x20 |
0x0001914c mov r2, r0 | r2 = r0;
0x00019150 mov r4, r1 | r4 = r1;
0x00019154 mov r0, sp | r0 = sp;
0x00019158 ldr r1, [pc, 0x14] | r1 = *(0x19170);
0x0001915c bl 0x10d60 | sprintf (r0, r1, r2)
0x00019160 mov r1, r4 | r1 = r4;
0x00019164 mov r0, sp | r0 = sp;
0x00019168 bl 0x18c58 | fcn_00018c58 (r0, r1);
0x0001916c add sp, sp, 0x20 |
0x00019170 pop {r4, pc} |
| }
[*] Function sprintf used 20 times ubiformat