[*] Binary protection state of flash_erase
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function printf tear down of flash_erase
; 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/flash_erase @ 0x14168 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00014168 () | void fcn_00014168 (char * arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_10h_2;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_38h;
| int32_t var_48h;
| int32_t var_58h;
| int32_t var_58h_2;
| int32_t var_a0h;
| char * src;
| int32_t var_144h;
| r0 = arg1;
| r1 = arg2;
0x00014168 push {r4, r5, r6, r7, r8, sb, lr} |
0x0001416c sub sp, sp, 0x144 |
0x00014170 mov r2, 0 | r2 = 0;
0x00014174 mov r3, 0 | r3 = 0;
0x00014178 mov r4, r1 | r4 = r1;
0x0001417c add r1, sp, 0x38 | r1 += var_38h;
0x00014180 mov r6, r0 | r6 = r0;
0x00014184 strd r2, r3, [sp, 0x10] | __asm ("strd r2, r3, [var_10h]");
0x00014188 bl 0x10a18 | r0 = stat64 ();
0x0001418c cmp r0, 0 |
| if (r0 != 0) {
0x00014190 beq 0x141f8 |
0x00014194 bl 0x10b5c | errno_location ();
0x00014198 ldr r8, [pc, 0x450] |
0x0001419c mov r3, r6 | r3 = r6;
0x000141a0 ldr r2, [pc, 0x44c] | r2 = stderr;
0x000141a4 ldr r1, [pc, 0x44c] | r1 = "libmtd";
0x000141a8 ldr r7, [r0] | r7 = *(r0);
0x000141ac mov r5, r0 | r5 = r0;
0x000141b0 ldr r0, [r8] | r0 = *(0x145ec);
0x000141b4 bl 0x10aa8 | fprintf (r0, "libmtd", r2, r3, r4, r5)
0x000141b8 mov r0, r7 | r0 = r7;
0x000141bc ldr r8, [r8] | r8 = *(0x145ec);
0x000141c0 bl 0x10a0c | strerror (r0);
0x000141c4 ldr r3, [pc, 0x430] | r3 = "%s: error!: cannot open \"%s\"\n";
0x000141c8 str r7, [sp] | *(sp) = r7;
0x000141cc mov r2, 8 | r2 = 8;
0x000141d0 ldr r1, [pc, 0x428] | r1 = *(0x145fc);
0x000141d4 str r0, [sp, 4] | var_4h = r0;
0x000141d8 mov r0, r8 | r0 = r8;
0x000141dc bl 0x10aa8 | fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n")
0x000141e0 ldr r3, [r5] | r3 = *(r5);
0x000141e4 cmp r3, 2 |
| if (r3 != 2) {
0x000141e8 bne 0x141f8 | goto label_5;
| }
0x000141ec ldr r1, [pc, 0x400] | r1 = stderr;
0x000141f0 ldr r0, [pc, 0x40c] | r0 = "%*serror %d (%s)\n";
0x000141f4 bl 0x10a00 | printf ("%*serror %d (%s)\n", r1)
| }
| label_5:
0x000141f8 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000141fc and r3, r3, 0xf000 | r3 &= 0xf000;
0x00014200 cmp r3, 0x2000 |
| if (r3 == 0x2000) {
0x00014204 beq 0x14234 | goto label_6;
| }
0x00014208 bl 0x10b5c | errno_location ();
0x0001420c mov r3, 0x16 | r3 = 0x16;
0x00014210 ldr r2, [pc, 0x3dc] | r2 = stderr;
0x00014214 ldr r1, [pc, 0x3ec] | r1 = "%s: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist\n";
0x00014218 str r3, [r0] | *(r0) = r3;
0x0001421c ldr r0, [pc, 0x3cc] |
0x00014220 mov r3, r6 | r3 = r6;
0x00014224 ldr r0, [r0] | r0 = *(0x145ec);
0x00014228 bl 0x10aa8 | fprintf (r0, "%s: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist\n", r2, r3)
| do {
| label_0:
0x0001422c mvn r5, 0 | r5 = ~0;
0x00014230 b 0x14318 | goto label_4;
| label_6:
0x00014234 mov r2, 0x100 | r2 = 0x100;
0x00014238 mov r1, 0 | r1 = 0;
0x0001423c mov r0, r4 | r0 = r4;
0x00014240 bl 0x10b14 | memset (r0, r1, r2);
0x00014244 ldrd r8, sb, [sp, 0x58] | __asm ("ldrd r8, sb, [var_58h]");
0x00014248 mov r1, sb | r1 = sb;
0x0001424c mov r0, r8 | r0 = r8;
0x00014250 bl 0x10a3c | gnu_dev_major ();
0x00014254 mov r1, sb | r1 = sb;
0x00014258 mov r5, r0 | r5 = r0;
0x0001425c str r0, [r4, 4] | *((r4 + 4)) = r0;
0x00014260 mov r0, r8 | r0 = r8;
0x00014264 bl 0x10a78 | gnu_dev_minor ();
0x00014268 cmp r5, 0x5a |
0x0001426c str r0, [r4, 8] | *((r4 + 8)) = r0;
| if (r5 == 0x5a) {
0x00014270 beq 0x142ac | goto label_7;
| }
0x00014274 bl 0x10b5c | errno_location ();
0x00014278 mov r3, 0x16 | r3 = 0x16;
0x0001427c ldr r2, [pc, 0x370] | r2 = stderr;
0x00014280 ldr r1, [pc, 0x384] | r1 = "_s:_error_:___s__is_not_a_character_device";
0x00014284 str r3, [r0] | *(r0) = r3;
0x00014288 mov r3, 0x5a | r3 = 0x5a;
0x0001428c str r3, [sp, 4] | var_4h = r3;
0x00014290 ldr r0, [pc, 0x358] |
0x00014294 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00014298 str r3, [sp] | *(sp) = r3;
0x0001429c mov r3, r6 | r3 = r6;
0x000142a0 ldr r0, [r0] | r0 = *(0x145ec);
0x000142a4 bl 0x10aa8 | fprintf (r0, "_s:_error_:___s__is_not_a_character_device", r2, r3)
0x000142a8 b 0x1422c |
| } while (1);
| label_7:
0x000142ac add r0, r0, r0, lsr 31 | r0 += (r0 >> 31);
0x000142b0 asr r0, r0, 1 | r0 >>= 1;
0x000142b4 str r0, [r4] | *(r4) = r0;
0x000142b8 mov r1, 0 | r1 = 0;
0x000142bc mov r0, r6 | r0 = r6;
0x000142c0 bl 0x10b20 | r0 = open64 ();
0x000142c4 cmn r0, 1 |
0x000142c8 mov r5, r0 | r5 = r0;
| if (r0 == 1) {
0x000142cc bne 0x14324 |
0x000142d0 bl 0x10b5c | errno_location ();
0x000142d4 ldr r7, [pc, 0x314] | r7 = *(0x145ec);
0x000142d8 mov r3, r6 | r3 = r6;
0x000142dc ldr r2, [pc, 0x310] | r2 = stderr;
0x000142e0 ldr r1, [pc, 0x310] | r1 = "libmtd";
0x000142e4 ldr r4, [r0] | r4 = *(r0);
0x000142e8 ldr r0, [r7] | r0 = *(0x145ec);
0x000142ec bl 0x10aa8 | fprintf (r0, "libmtd", r2, r3, r4)
0x000142f0 mov r0, r4 | r0 = r4;
0x000142f4 ldr r6, [r7] | r6 = *(0x145ec);
0x000142f8 bl 0x10a0c | strerror (r0);
0x000142fc str r4, [sp] | *(sp) = r4;
0x00014300 ldr r3, [pc, 0x2f4] | r3 = "%s: error!: cannot open \"%s\"\n";
0x00014304 mov r2, 8 | r2 = 8;
0x00014308 ldr r1, [pc, 0x2f0] | r1 = *(0x145fc);
0x0001430c str r0, [sp, 4] | var_4h = r0;
0x00014310 mov r0, r6 | r0 = r6;
0x00014314 bl 0x10aa8 | fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
| label_4:
0x00014318 mov r0, r5 | r0 = r5;
0x0001431c add sp, sp, 0x144 |
0x00014320 pop {r4, r5, r6, r7, r8, sb, pc} |
| }
0x00014324 add r2, sp, 0x18 | r2 += var_18h;
0x00014328 ldr r1, [pc, 0x2e0] | r1 = "%s: error!: \"%s\" has major number %d, MTD devices have major %d\n";
0x0001432c bl 0x109f4 | r0 = ioctl (r0, "%s: error!: \"%s\" has major number %d, MTD devices have major %d\n");
0x00014330 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x00014334 beq 0x14388 | goto label_8;
| }
0x00014338 bl 0x10b5c | errno_location ();
0x0001433c ldr r6, [pc, 0x2ac] |
0x00014340 ldr r2, [pc, 0x2ac] | r2 = stderr;
0x00014344 ldr r1, [pc, 0x2c8] | r1 = *(0x14610);
0x00014348 ldr r4, [r0] | r4 = *(r0);
0x0001434c ldr r0, [r6] | r0 = *(0x145ec);
0x00014350 bl 0x10aa8 | fprintf (r0, r1, r2, r3, r4, r5, r6)
0x00014354 mov r0, r4 | r0 = r4;
0x00014358 ldr r6, [r6] | r6 = *(0x145ec);
0x0001435c bl 0x10a0c | strerror (r0);
0x00014360 ldr r3, [pc, 0x294] | r3 = "%s: error!: cannot open \"%s\"\n";
0x00014364 ldr r1, [pc, 0x294] | r1 = *(0x145fc);
0x00014368 mov r2, 8 | r2 = 8;
0x0001436c str r4, [sp] | *(sp) = r4;
0x00014370 str r0, [sp, 4] | var_4h = r0;
0x00014374 mov r0, r6 | r0 = r6;
| do {
| label_1:
0x00014378 bl 0x10aa8 | fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
| label_2:
0x0001437c mov r0, r5 | r0 = r5;
0x00014380 bl 0x10ba4 | close (r0);
0x00014384 b 0x1422c | goto label_0;
| label_8:
0x00014388 add r2, sp, 0x10 | r2 += var_10h;
0x0001438c ldr r1, [pc, 0x284] | r1 = "_s:_error_:_MEMGETINFO_ioctl_request_failed";
0x00014390 mov r0, r5 | r0 = r5;
0x00014394 bl 0x109f4 | r0 = ioctl (r0, "_s:_error_:_MEMGETINFO_ioctl_request_failed");
0x00014398 cmn r0, 1 |
| if (r0 == 1) {
0x0001439c ldrbne r3, [r4, 0xfc] | r3 = *((r4 + 0xfc));
| }
| if (r0 == 1) {
0x000143a0 orrne r3, r3, 2 | r3 |= 2;
| }
| if (r0 != 1) {
0x000143a4 bne 0x14400 | goto label_9;
| }
0x000143a8 bl 0x10b5c | r0 = errno_location ();
0x000143ac ldr r7, [r0] | r7 = *(r0);
0x000143b0 cmp r7, 0x5f |
| if (r7 != 0x5f) {
0x000143b4 streq r8, [r0] | *(r0) = r8;
| }
| if (r7 != 0x5f) {
0x000143b8 ldrbeq r3, [r4, 0xfc] | r3 = *((r4 + 0xfc));
| }
0x000143bc biceq r3, r3, 2 | __asm ("biceq r3, r3, 2");
| if (r7 == 0x5f) {
0x000143c0 beq 0x14400 | goto label_9;
| }
0x000143c4 ldr r4, [pc, 0x224] |
0x000143c8 ldr r2, [pc, 0x224] | r2 = stderr;
0x000143cc ldr r1, [pc, 0x248] | r1 = *(0x14618);
0x000143d0 ldr r0, [r4] | r0 = *(0x145ec);
0x000143d4 bl 0x10aa8 | fprintf (r0, r1, r2, r3, r4)
0x000143d8 mov r0, r7 | r0 = r7;
0x000143dc ldr r4, [r4] | r4 = *(0x145ec);
0x000143e0 bl 0x10a0c | strerror (r0);
0x000143e4 str r7, [sp] | *(sp) = r7;
0x000143e8 ldr r3, [pc, 0x20c] | r3 = "%s: error!: cannot open \"%s\"\n";
0x000143ec mov r2, 8 | r2 = 8;
0x000143f0 ldr r1, [pc, 0x208] | r1 = *(0x145fc);
0x000143f4 str r0, [sp, 4] | var_4h = r0;
0x000143f8 mov r0, r4 | r0 = r4;
0x000143fc b 0x14378 |
| } while (1);
| label_9:
0x00014400 strb r3, [r4, 0xfc] | *((r4 + 0xfc)) = r3;
0x00014404 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00014408 ldrb r7, [sp, 0x18] | r7 = var_18h;
0x0001440c ldr r0, [sp, 0x20] | r0 = var_20h;
0x00014410 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00014414 ldr ip, [sp, 0x2c] | ip = var_2ch;
0x00014418 mov r1, 0 | r1 = 0;
0x0001441c cmp r3, 0 |
0x00014420 str r7, [r4, 0xc] | *((r4 + 0xc)) = r7;
0x00014424 strd r0, r1, [r4, 0xd8] | __asm ("strd r0, r1, [r4, 0xd8]");
0x00014428 str r2, [r4, 0xe4] | *((r4 + 0xe4)) = r2;
0x0001442c str r3, [r4, 0xe8] | *((r4 + 0xe8)) = r3;
0x00014430 str ip, [r4, 0xf0] | *((r4 + 0xf0)) = ip;
| if (r3 > 0) {
0x00014434 bgt 0x14458 | goto label_10;
| }
0x00014438 str r3, [sp, 4] | var_4h = r3;
0x0001443c str r6, [sp] | *(sp) = r6;
0x00014440 ldr r2, [pc, 0x1ac] | r2 = stderr;
0x00014444 ldr r3, [r4] | r3 = *(r4);
0x00014448 ldr r1, [pc, 0x1d0] | r1 = "%s: error!: MEMGETBADBLOCK ioctl failed\n";
| do {
0x0001444c ldr r0, [pc, 0x19c] |
0x00014450 ldr r0, [r0] | r0 = *(0x145ec);
0x00014454 b 0x14378 | goto label_1;
| label_10:
0x00014458 cmp r2, r3 |
0x0001445c cmpge r2, 0 | __asm ("cmpge r2, 0");
| if (r2 > r3) {
0x00014460 bgt 0x1447c | goto label_11;
| }
0x00014464 str r2, [sp, 4] | var_4h = r2;
0x00014468 str r6, [sp] | *(sp) = r6;
0x0001446c ldr r2, [pc, 0x180] | r2 = stderr;
0x00014470 ldr r3, [r4] | r3 = *(r4);
0x00014474 ldr r1, [pc, 0x1a8] | r1 = "_s:_error_:_mtd_d___s__has_insane_min._I_O_unit_size__d";
0x00014478 b 0x1444c |
| } while (1);
| label_11:
0x0001447c orrs r3, r0, r1 | r3 = r0 | r1;
| if (r3 != r0) {
0x00014480 beq 0x14494 |
0x00014484 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00014488 cmp r0, r2 |
0x0001448c sbcs ip, r1, r3 | __asm ("sbcs ip, r1, r3");
| if (r0 >= r2) {
0x00014490 bge 0x144b8 | goto label_12;
| }
| }
0x00014494 strd r0, r1, [sp, 8] | __asm ("strd r0, r1, [var_8h]");
0x00014498 ldr r0, [pc, 0x150] |
0x0001449c str r6, [sp] | *(sp) = r6;
0x000144a0 ldr r2, [pc, 0x14c] | r2 = stderr;
0x000144a4 ldr r3, [r4] | r3 = *(r4);
0x000144a8 ldr r1, [pc, 0x178] | r1 = "%s: error!: mtd%d (%s) has insane eraseblock size %d\n";
0x000144ac ldr r0, [r0] | r0 = *(0x145ec);
0x000144b0 bl 0x10aa8 | fprintf (r0, "%s: error!: mtd%d (%s) has insane eraseblock size %d\n", r2, r3, r4, r5, r6)
0x000144b4 b 0x1437c | goto label_2;
| label_12:
0x000144b8 bl 0x1484c | fcn_0001484c (r0, r1);
0x000144bc str r0, [r4, 0xe0] | *((r4 + 0xe0)) = r0;
0x000144c0 cmp r7, 8 |
| if (r7 > 8) {
| /* switch table (9 cases) at 0x144cc */
0x000144c4 ldrls pc, [pc, r7, lsl 2] | offset_0 = r7 << 2;
| pc = *((pc + offset_0));
| }
0x000144c8 b 0x1437c | goto label_2;
0x000144f0 ldr r0, [pc, 0xf8] |
0x000144f4 str r6, [sp] | *(sp) = r6;
0x000144f8 ldr r2, [pc, 0xf4] | r2 = stderr;
0x000144fc ldr r3, [r4] | r3 = *(r4);
0x00014500 ldr r1, [pc, 0x124] | r1 = "%s: error!: mtd%d (%s) has insane size %lld\n";
0x00014504 ldr r0, [r0] | r0 = *(0x145ec);
0x00014508 bl 0x10aa8 | fprintf (r0, "%s: error!: mtd%d (%s) has insane size %lld\n", r2, r3, r4, r5, r6)
0x0001450c b 0x1437c | goto label_2;
0x00014510 ldr r1, [pc, 0x118] | r1 = "_s:_error_:_mtd_d___s__is_removable_and_is_not_present";
| label_3:
0x00014514 add r0, r4, 0x10 | r0 = r4 + 0x10;
0x00014518 bl 0x109e8 | strcpy (r0, "_s:_error_:_mtd_d___s__is_removable_and_is_not_present");
0x0001451c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00014520 mov r0, r5 | r0 = r5;
0x00014524 tst r3, 0x400 |
| if ((r3 & 0x400) == 0) {
0x00014528 ldrbne r3, [r4, 0xfc] | r3 = *((r4 + 0xfc));
| }
| if ((r3 & 0x400) == 0) {
0x0001452c orrne r3, r3, 1 | r3 |= 1;
| }
| if ((r3 & 0x400) == 0) {
0x00014530 strbne r3, [r4, 0xfc] | *((r4 + 0xfc)) = r3;
| }
0x00014534 ldr r3, [r4, 0xe8] | r3 = *((r4 + 0xe8));
0x00014538 str r3, [r4, 0xec] | *((r4 + 0xec)) = r3;
0x0001453c bl 0x10ba4 | close (r0);
0x00014540 mov r0, r6 | r0 = r6;
0x00014544 bl 0x13f9c | r0 = fcn_00013f9c (r0);
0x00014548 bic r0, r0, r0, asr 31 | r0 = BIT_MASK (r0, r0);
0x0001454c str r0, [r4, 0xf4] | *((r4 + 0xf4)) = r0;
0x00014550 add r0, sp, 0xa0 | r0 += var_a0h;
0x00014554 bl 0x13cc0 | fcn_00013cc0 (r0);
0x00014558 subs r5, r0, 0 | r5 -= var_a0h;
| if (r5 != var_a0h) {
0x0001455c bne 0x1422c | goto label_0;
| }
| do {
0x00014560 add r0, sp, 0xa0 | r0 += var_a0h;
0x00014564 bl 0x13b5c | r0 = fcn_00013b5c (r0);
0x00014568 cmp r0, 0 |
| if (r0 == 0) {
0x0001456c bne 0x145d0 |
0x00014570 ldr r3, [pc, 0xbc] | r3 = *(0x14630);
0x00014574 ldr r0, [pc, 0x74] |
0x00014578 str r3, [sp] | *(sp) = r3;
0x0001457c ldr r2, [pc, 0x70] | r2 = stderr;
0x00014580 ldr r3, [r4] | r3 = *(r4);
0x00014584 ldr r1, [pc, 0xac] | r1 = "_proc_mtd";
0x00014588 ldr r0, [r0] | r0 = *(0x145ec);
0x0001458c bl 0x10aa8 | r0 = fprintf (r0, "_proc_mtd", r2, r3)
0x00014590 bl 0x10b5c | errno_location ();
0x00014594 mov r3, 2 | r3 = 2;
0x00014598 str r3, [r0] | *(r0) = r3;
0x0001459c b 0x1422c | goto label_0;
0x000145a0 ldr r1, [pc, 0x94] | r1 = "_s:_error_:_mtd_d_not_found_in___s_";
0x000145a4 b 0x14514 | goto label_3;
0x000145a8 ldr r1, [pc, 0x90] | r1 = "rom";
0x000145ac b 0x14514 | goto label_3;
0x000145b0 ldr r1, [pc, 0x8c] | r1 = "nor";
0x000145b4 b 0x14514 | goto label_3;
0x000145b8 ldr r1, [pc, 0x88] | r1 = *(0x14644);
0x000145bc b 0x14514 | goto label_3;
0x000145c0 ldr r1, [pc, 0x84] | r1 = "mlc-nand";
0x000145c4 b 0x14514 | goto label_3;
0x000145c8 ldr r1, [pc, 0x80] | r1 = "dataflash";
0x000145cc b 0x14514 | goto label_3;
| }
0x000145d0 ldr r3, [r4] | r3 = *(r4);
0x000145d4 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x000145d8 cmp r2, r3 |
0x000145dc bne 0x14560 |
| } while (r2 != r3);
0x000145e0 add r1, sp, 0xb0 | r1 += src;
0x000145e4 add r0, r4, 0x51 | r0 = r4 + 0x51;
0x000145e8 bl 0x109e8 | strcpy (r0, r1);
0x000145ec b 0x14318 | 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/flash_erase @ 0x10c2c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) main () | int32_t main (int32_t argc, char ** argv) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_28h_2;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| char * * endptr;
| int32_t var_4ch;
| int32_t var_d8h;
| int32_t var_d8h_2;
| int32_t var_124h;
| int32_t var_134h;
| int32_t var_140h;
| int32_t var_144h;
| r0 = argc;
| r1 = argv;
0x00010c2c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00010c30 ldr fp, [pc, 0x778] | fp = "jNquVh";
0x00010c34 ldr sl, [pc, 0x778] | sl = *(0x000113b4);
0x00010c38 sub sp, sp, 0x144 |
0x00010c3c mov r4, r0 | r4 = r0;
0x00010c40 mov sb, r1 | sb = r1;
0x00010c44 mov r8, 0 | r8 = 0;
| do {
| label_0:
0x00010c48 add r5, sp, 0x140 | r5 += var_140h;
0x00010c4c mov r6, 0 | r6 = 0;
0x00010c50 str r6, [r5, -0x100]! | *((r5 -= 0x100)) = r6;
0x00010c54 ldr r3, [pc, 0x75c] | r3 = *(0x113b4);
0x00010c58 str r5, [sp] | *(sp) = r5;
0x00010c5c mov r2, fp | r2 = fp;
0x00010c60 mov r1, sb | r1 = sb;
0x00010c64 mov r0, r4 | r0 = r4;
0x00010c68 bl 0x10a24 | r0 = getopt_long ();
0x00010c6c cmn r0, 1 |
0x00010c70 mov r7, r0 | r7 = r0;
| if (r0 == 1) {
0x00010c74 beq 0x10d0c | goto label_10;
| }
0x00010c78 cmp r0, 0x68 |
| if (r0 == 0x68) {
0x00010c7c beq 0x10cd0 | goto label_11;
| }
| if (r0 > 0x68) {
0x00010c80 bgt 0x10ca0 | goto label_12;
| }
0x00010c84 cmp r0, 0x4e |
| if (r0 == 0x4e) {
0x00010c88 beq 0x10d00 | goto label_13;
| }
0x00010c8c cmp r0, 0x56 |
| if (r0 == 0x56) {
0x00010c90 beq 0x10ce4 | goto label_14;
| }
0x00010c94 cmp r0, 0x3f |
| if (r0 != 0x3f) {
0x00010c98 moveq r8, 1 | r8 = 1;
| }
0x00010c9c b 0x10c48 |
| } while (1);
| label_12:
0x00010ca0 cmp r0, 0x71 |
| if (r0 != 0x71) {
0x00010ca4 moveq r3, 1 | r3 = 1;
| }
| if (r0 == 0x71) {
0x00010ca8 streq r3, [sl, 8] | *((sl + 8)) = r3;
| goto label_15;
| }
| if (r0 == 0x71) {
| label_15:
0x00010cac beq 0x10c48 | goto label_0;
| }
0x00010cb0 cmp r0, 0x75 |
| if (r0 != 0x75) {
0x00010cb4 moveq r3, 1 | r3 = 1;
| }
| if (r0 == 0x75) {
0x00010cb8 streq r3, [sl, 0xc] | *((sl + 0xc)) = r3;
| goto label_16;
| }
| if (r0 == 0x75) {
| label_16:
0x00010cbc beq 0x10c48 | goto label_0;
| }
0x00010cc0 cmp r0, 0x6a |
| if (r0 != 0x6a) {
0x00010cc4 moveq r3, 1 | r3 = 1;
| }
| if (r0 != 0x6a) {
0x00010cc8 streq r3, [sl] | *(sl) = r3;
| }
0x00010ccc b 0x10c48 | goto label_0;
| label_11:
0x00010cd0 ldr r1, [pc, 0x6e4] | r1 = "help";
0x00010cd4 ldr r0, [pc, 0x6e4] | r0 = "flash_erase";
| do {
0x00010cd8 bl 0x10a00 | printf ("flash_erase", "help")
| label_4:
0x00010cdc mov r7, 0 | r7 = 0;
0x00010ce0 b 0x10e2c | goto label_3;
| label_14:
0x00010ce4 ldr r1, [pc, 0x6d0] | r1 = "help";
0x00010ce8 ldr r2, [pc, 0x6d4] | r2 = "Usage: %s [options] MTD_DEVICE <start offset> <block count>\nErase blocks of the specified MTD device.\nSpecify a count of 0 to erase to end of device.\n\n -j, --jffs2 format the device for jffs2\n -N, --noskipbad don't skip bad blocks\n -u, --unlock unlock sectors before erasing\n -q, --quiet do not display progress messages\n --silent same as --quiet\n --help display this help and exit\n --version output version information and exit\n";
0x00010cec ldr r0, [pc, 0x6d4] | r0 = "2.1.0";
0x00010cf0 bl 0x10a00 | printf ("2.1.0", "help", "Usage: %s [options] MTD_DEVICE <start offset> <block count>\nErase blocks of the specified MTD device.\nSpecify a count of 0 to erase to end of device.\n\n -j, --jffs2 format the device for jffs2\n -N, --noskipbad don't skip bad blocks\n -u, --unlock unlock sectors before erasing\n -q, --quiet do not display progress messages\n --silent same as --quiet\n --help display this help and exit\n --version output version information and exit\n")
0x00010cf4 ldr r1, [pc, 0x6c0] | r1 = "help";
0x00010cf8 ldr r0, [pc, 0x6cc] | r0 = "%s (mtd-utils) %s\n";
0x00010cfc b 0x10cd8 |
| } while (1);
| label_13:
0x00010d00 mov r3, 1 | r3 = 1;
0x00010d04 str r3, [sl, 4] | *((sl + 4)) = r3;
0x00010d08 b 0x10c48 | goto label_0;
| label_10:
0x00010d0c ldr sl, [pc, 0x6bc] | sl = obj.optind;
0x00010d10 ldr r3, [sl] | r3 = *(sl);
0x00010d14 sub r4, r4, r3 | r4 -= r3;
0x00010d18 cmp r4, 2 |
| if (r4 != 2) {
0x00010d1c beq 0x10d44 |
0x00010d20 cmp r4, 3 |
| if (r4 == 3) {
0x00010d24 beq 0x10d5c | goto label_17;
| }
0x00010d28 cmp r4, 1 |
0x00010d2c ldr r4, [pc, 0x6a0] | r4 = optind;
| if (r4 != 1) {
0x00010d30 bne 0x10e5c | goto label_18;
| }
| label_2:
0x00010d34 ldr r2, [pc, 0x680] | r2 = "help";
0x00010d38 ldr r1, [pc, 0x698] | r1 = stderr;
0x00010d3c ldr r0, [r4] | r0 = *(r4);
0x00010d40 bl 0x10aa8 | fprintf (r0, r1, "help")
| }
0x00010d44 ldr r3, [pc, 0x688] | r3 = optind;
0x00010d48 ldr r2, [pc, 0x66c] | r2 = "help";
0x00010d4c ldr r1, [pc, 0x688] | r1 = "%s: error!: no start erase block specified\n";
0x00010d50 ldr r0, [r3] | r0 = optind;
0x00010d54 bl 0x10aa8 | fprintf (r0, "%s: error!: no start erase block specified\n", "help", r3)
0x00010d58 b 0x10e18 | goto label_19;
| label_17:
0x00010d5c ldr r2, [sb, r3, lsl 2] | offset_0 = r3 << 2;
| r2 = *((sb + offset_0));
0x00010d60 add r3, sb, r3, lsl 2 | r3 = sb + (r3 << 2);
0x00010d64 ldr fp, [r3, 4] | fp = *((r3 + 4));
0x00010d68 ldr r4, [pc, 0x644] | r4 = "jNquVh";
0x00010d6c mov r1, r5 | r1 = r5;
0x00010d70 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x00010d74 mov r0, fp | r0 = fp;
0x00010d78 mov r2, r6 | r2 = r6;
0x00010d7c bl 0x10b08 | strtoull (r0, r1, r2);
0x00010d80 ldrb r3, [fp] | r3 = *(fp);
0x00010d84 cmp r3, 0 |
0x00010d88 strd r0, r1, [sp, 0x18] | __asm ("strd r0, r1, [var_18h]");
| if (r3 != 0) {
0x00010d8c beq 0x10da0 |
0x00010d90 ldr r3, [sp, 0x40] | r3 = endptr;
0x00010d94 ldrb r3, [r3] | r3 = *(r3);
0x00010d98 cmp r3, 0 |
| if (r3 == 0) {
0x00010d9c beq 0x10dc0 | goto label_20;
| }
| }
0x00010da0 ldr r0, [pc, 0x62c] |
0x00010da4 str fp, [sp] | *(sp) = fp;
0x00010da8 ldr r3, [pc, 0x630] | r3 = "%s: error!: no erase block count specified\n";
0x00010dac ldr r2, [pc, 0x608] | r2 = "help";
0x00010db0 ldr r1, [pc, 0x62c] | r1 = "strtoull";
0x00010db4 ldr r0, [r0] | r0 = optind;
0x00010db8 bl 0x10aa8 | fprintf (r0, "strtoull", "help", "%s: error!: no erase block count specified\n")
0x00010dbc mov r8, 1 | r8 = 1;
| label_20:
0x00010dc0 ldr r3, [sl] | r3 = *(sl);
0x00010dc4 mov r2, 0 | r2 = 0;
0x00010dc8 add r3, r3, 2 | r3 += 2;
0x00010dcc ldr sl, [sb, r3, lsl 2] | offset_1 = r3 << 2;
| sl = *((sb + offset_1));
0x00010dd0 mov r1, r5 | r1 = r5;
0x00010dd4 mov r0, sl | r0 = sl;
0x00010dd8 bl 0x10a60 | strtoul (r0, r1, r2);
0x00010ddc ldrb r3, [sl] | r3 = *(sl);
0x00010de0 cmp r3, 0 |
0x00010de4 mov sb, r0 | sb = r0;
| if (r3 != 0) {
0x00010de8 beq 0x10dfc |
0x00010dec ldr r3, [sp, 0x40] | r3 = endptr;
0x00010df0 ldrb r3, [r3] | r3 = *(r3);
0x00010df4 cmp r3, 0 |
| if (r3 == 0) {
0x00010df8 beq 0x10e38 | goto label_21;
| }
| }
0x00010dfc ldr r0, [pc, 0x5d0] |
0x00010e00 str sl, [sp] | *(sp) = sl;
0x00010e04 ldr r3, [pc, 0x5dc] | r3 = "%s: error!: %s: unable to parse the number '%s'\n";
0x00010e08 ldr r2, [pc, 0x5ac] | r2 = "help";
0x00010e0c ldr r1, [pc, 0x5d0] | r1 = "strtoull";
0x00010e10 ldr r0, [r0] | r0 = optind;
0x00010e14 bl 0x10aa8 | fprintf (r0, "strtoull", "help", "%s: error!: %s: unable to parse the number '%s'\n")
| do {
| label_19:
0x00010e18 ldr r2, [pc, 0x59c] | r2 = "help";
0x00010e1c ldr r1, [pc, 0x5c8] | r1 = "strtoul";
| label_1:
0x00010e20 ldr r3, [pc, 0x5ac] | r3 = optind;
0x00010e24 ldr r0, [r3] | r0 = optind;
0x00010e28 bl 0x10aa8 | fprintf (r0, "strtoul", "help", r3)
| label_3:
0x00010e2c mov r0, r7 | r0 = r7;
0x00010e30 add sp, sp, 0x144 |
0x00010e34 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x00010e38 cmp r8, 0 |
0x00010e3c bne 0x10e18 |
| } while (r8 != 0);
0x00010e40 bl 0x12388 | r0 = fcn_00012388 ();
0x00010e44 subs r3, r0, 0 | r3 = r0 - 0;
0x00010e48 str r3, [sp, 0x30] | var_30h = r3;
| if (r3 == r0) {
0x00010e4c bne 0x10e70 |
0x00010e50 ldr r2, [pc, 0x564] | r2 = "help";
0x00010e54 ldr r1, [pc, 0x594] | r1 = "%s: error!: Try `--help' for more information\n";
0x00010e58 b 0x10e20 | goto label_1;
| label_18:
0x00010e5c ldr r2, [pc, 0x558] | r2 = "help";
0x00010e60 ldr r1, [pc, 0x58c] | r1 = "_s:_error_:_cant_initialize_libmtd";
0x00010e64 ldr r0, [r4] | r0 = *(r4);
0x00010e68 bl 0x10aa8 | fprintf (r0, "_s:_error_:_cant_initialize_libmtd", "help")
0x00010e6c b 0x10d34 | goto label_2;
| }
0x00010e70 mov r1, 2 | r1 = 2;
0x00010e74 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x00010e78 bl 0x10b20 | r0 = open64 ();
0x00010e7c subs fp, r0, 0 |
| if (fp < r0) {
0x00010e80 bge 0x10ed0 |
0x00010e84 bl 0x10b5c | errno_location ();
0x00010e88 ldr r6, [pc, 0x544] | r6 = optind;
0x00010e8c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00010e90 ldr r2, [pc, 0x524] | r2 = "help";
0x00010e94 ldr r1, [pc, 0x55c] | r1 = "_s:_error_:_no_MTD_device_specified";
0x00010e98 ldr r5, [r0] | r5 = *(r0);
| label_7:
0x00010e9c ldr r0, [r6] | r0 = *(r6);
0x00010ea0 bl 0x10aa8 | fprintf (r0, "_s:_error_:_no_MTD_device_specified", "help", r3, r4, r5, r6)
0x00010ea4 mov r0, r5 | r0 = r5;
0x00010ea8 ldr r4, [r6] | r4 = *(r6);
0x00010eac bl 0x10a0c | strerror (r0);
0x00010eb0 str r5, [sp] | *(sp) = r5;
0x00010eb4 ldr r3, [pc, 0x540] | r3 = "%s: error!: %s\n";
0x00010eb8 mov r2, 0xd | r2 = 0xd;
0x00010ebc ldr r1, [pc, 0x53c] | r1 = *(0x113fc);
0x00010ec0 str r0, [sp, 4] | var_4h = r0;
0x00010ec4 mov r0, r4 | r0 = r4;
0x00010ec8 bl 0x10aa8 | fprintf (r0, r1, r2, "%s: error!: %s\n", r4, r5)
0x00010ecc b 0x10e2c | goto label_3;
| }
0x00010ed0 mov r2, r5 | r2 = r5;
0x00010ed4 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00010ed8 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00010edc bl 0x12c38 | r0 = fcn_00012c38 (r0, r1);
0x00010ee0 cmp r0, 0 |
| if (r0 >= 0) {
0x00010ee4 ldrlt r2, [pc, 0x4d0] | r2 = "flash_erase";
| }
| if (r0 < 0) {
0x00010ee8 ldrlt r1, [pc, 0x514] | r1 = "%s: error!: mtd_get_dev_info failed\n";
| goto label_22;
| }
| if (r0 < 0) {
| label_22:
0x00010eec blt 0x10e20 | goto label_1;
| }
0x00010ef0 ldr sl, [r4] | sl = *(r4);
0x00010ef4 ldr r8, [sp, 0x4c] | r8 = var_4ch;
0x00010ef8 cmp sl, 0 |
| if (sl == 0) {
0x00010efc beq 0x10f10 | goto label_23;
| }
0x00010f00 cmp r8, 8 |
| if (r8 != 8) {
0x00010f04 ldreq r2, [pc, 0x4b0] | r2 = "flash_erase";
| }
| if (r8 == 8) {
0x00010f08 ldreq r1, [pc, 0x4f8] | r1 = "%s: error!: JFFS2 cannot support MLC NAND.\n";
| goto label_24;
| }
| if (r8 == 8) {
| label_24:
0x00010f0c beq 0x10e20 | goto label_1;
| }
| label_23:
0x00010f10 ldr r2, [sp, 0x124] | r2 = var_124h;
0x00010f14 ldrd r0, r1, [sp, 0x18] | __asm ("ldrd r0, r1, [var_18h]");
0x00010f18 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00010f1c bl 0x14920 | fcn_00014920 (r0, r1);
0x00010f20 sub r8, r8, 4 | r8 -= 4;
0x00010f24 cmp sl, 0 |
0x00010f28 bic r8, r8, 4 | r8 = BIT_MASK (r8, 4);
| if (sl != 0) {
0x00010f2c moveq sl, 8 | sl = 8;
| }
0x00010f30 strd r0, r1, [sp, 0x28] | __asm ("strd r0, r1, [var_28h]");
0x00010f34 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00010f38 str r3, [sp, 0x3c] | var_3ch = r3;
| if (sl != 0) {
0x00010f3c beq 0x10ff8 |
0x00010f40 ldr r3, [pc, 0x4c4] |
0x00010f44 ldr r2, [pc, 0x4c4] | r2 = *(0x1140c);
0x00010f48 ldr r3, [r3] | r3 = "%s: error!: JFFS2 cannot support MLC NAND.\n";
0x00010f4c ldr r0, [pc, 0x4c0] | r0 = *(0x11410);
0x00010f50 ldr r1, [pc, 0x4c0] | r1 = *(0x11414);
0x00010f54 cmp r3, r2 |
| if (r3 != r2) {
0x00010f58 moveq r1, r0 | r1 = r0;
| }
0x00010f5c strb r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x00010f60 lsr r1, r1, 8 | r1 >>= 8;
0x00010f64 strb r1, [r4, 0x15] | *((r4 + 0x15)) = r1;
0x00010f68 ldr r1, [pc, 0x4ac] | r1 = *(0x11418);
| if (r3 == r2) {
0x00010f6c movne r1, 0x320 | r1 = 0x320;
| }
0x00010f70 strb r1, [r4, 0x16] | *((r4 + 0x16)) = r1;
0x00010f74 cmp r8, 0 |
0x00010f78 lsr r1, r1, 8 | r1 >>= 8;
0x00010f7c strb r1, [r4, 0x17] | *((r4 + 0x17)) = r1;
| if (r8 == 0) {
0x00010f80 beq 0x110d4 | goto label_25;
| }
0x00010f84 cmp r3, r2 |
| if (r3 != r2) {
0x00010f88 moveq r3, 0xc | r3 = 0xc;
| }
| if (r3 == r2) {
0x00010f8c movne r3, 0xc000000 | r3 = 0xc000000;
| }
0x00010f90 mov r2, 0 | r2 = 0;
0x00010f94 strb r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00010f98 mov sl, 8 | sl = 8;
0x00010f9c lsr r3, r3, 0x18 | r3 >>= 0x18;
0x00010fa0 strb r2, [r4, 0x19] | *((r4 + 0x19)) = r2;
0x00010fa4 strb r2, [r4, 0x1a] | *((r4 + 0x1a)) = r2;
0x00010fa8 strb r3, [r4, 0x1b] | *((r4 + 0x1b)) = r3;
| label_5:
0x00010fac mov r2, 8 | r2 = 8;
0x00010fb0 ldr r1, [pc, 0x468] | r1 = *(0x1141c);
0x00010fb4 mov r0, 0 | r0 = 0;
0x00010fb8 bl 0x13b34 | fcn_00013b34 (r0);
0x00010fbc ldr r2, [pc, 0x448] | r2 = "%s: error!: JFFS2 cannot support MLC NAND.\n";
0x00010fc0 ldr r1, [r2] | r1 = "%s: error!: JFFS2 cannot support MLC NAND.\n";
0x00010fc4 ldr r2, [pc, 0x444] | r2 = *(0x1140c);
0x00010fc8 cmp r1, r2 |
0x00010fcc mov r3, r0 | r3 = r0;
| if (r1 != r2) {
0x00010fd0 beq 0x10fdc |
0x00010fd4 bl 0x1496c | r0 = fcn_0001496c (r0);
0x00010fd8 mov r3, r0 | r3 = r0;
| }
0x00010fdc lsr r2, r3, 8 | r2 = r3 >> 8;
0x00010fe0 strb r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00010fe4 strb r2, [r4, 0x1d] | *((r4 + 0x1d)) = r2;
0x00010fe8 lsr r2, r3, 0x10 | r2 = r3 >> 0x10;
0x00010fec lsr r3, r3, 0x18 | r3 >>= 0x18;
0x00010ff0 strb r2, [r4, 0x1e] | *((r4 + 0x1e)) = r2;
0x00010ff4 strb r3, [r4, 0x1f] | *((r4 + 0x1f)) = r3;
| }
0x00010ff8 cmp sb, 0 |
| if (sb == 0) {
0x00010ffc bne 0x11018 |
0x00011000 ldr r2, [sp, 0x124] | r2 = var_124h;
0x00011004 ldrd r0, r1, [r5, 0xd8] | __asm ("ldrd r0, r1, [var_d8h]");
0x00011008 asr r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0001100c bl 0x1484c | fcn_0001484c (r0, r1);
0x00011010 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00011014 sub sb, r0, r3 | sb = r0 - r3;
| }
0x00011018 ldrd r2, r3, [sp, 0x28] | __asm ("ldrd r2, r3, [var_28h]");
0x0001101c ldr r4, [pc, 0x390] | r4 = "jNquVh";
0x00011020 mov r3, 0 | r3 = 0;
0x00011024 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
0x00011028 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0001102c mvn r3, 0x63 | r3 = ~0x63;
0x00011030 mul r2, r3, r2 | r2 = r3 * r2;
0x00011034 mov r3, 0 | r3 = 0;
0x00011038 str r2, [sp, 0x34] | var_34h = r2;
0x0001103c mov r2, 0 | r2 = 0;
0x00011040 strd r2, r3, [sp, 0x20] | __asm ("strd r2, r3, [var_24h]");
| label_6:
0x00011044 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00011048 ldr r6, [sp, 0x18] | r6 = var_18h;
0x0001104c add r3, sb, r3 | r3 = sb + r3;
0x00011050 cmp r3, r6 |
0x00011054 str r6, [sp, 0x38] | var_38h = r6;
| if (r3 > r6) {
0x00011058 bhi 0x11108 | goto label_26;
| }
0x0001105c ldr r4, [pc, 0x350] | r4 = "jNquVh";
0x00011060 ldr r3, [r4, 8] | r3 = "help";
0x00011064 cmp r3, 0 |
| if (r3 == 0) {
0x00011068 bne 0x110b0 |
0x0001106c ldr r3, [sp, 0x124] | r3 = var_124h;
0x00011070 mov r1, sb | r1 = sb;
0x00011074 add r5, r3, 0x3fc | r5 = r3 + 0x3fc;
0x00011078 cmp r3, 0 |
0x0001107c add r5, r5, 3 | r5 += 3;
| if (r3 >= 0) {
0x00011080 movlt r3, r5 | r3 = r5;
| }
0x00011084 asr r5, r3, 0xa | r5 = r3 >> 0xa;
0x00011088 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0001108c sub r6, r6, r3 | r6 -= r3;
0x00011090 mov r3, 0x64 | r3 = 0x64;
0x00011094 mul r0, r6, r3 | r0 = r6 * r3;
0x00011098 bl 0x14750 | fcn_00014750 (r0, r1);
0x0001109c ldrd r2, r3, [sp, 0x20] | __asm ("ldrd r2, r3, [var_24h]");
0x000110a0 mov r1, r5 | r1 = r5;
0x000110a4 str r0, [sp] | *(sp) = r0;
0x000110a8 ldr r0, [pc, 0x374] | r0 = *(0x11420);
0x000110ac bl 0x10a00 | printf (r0, r1, r2)
| }
0x000110b0 ldr r3, [pc, 0x370] | r3 = "\rErasing %d Kibyte @ %llx -- %2i %% complete ";
0x000110b4 ldr r0, [r3] | r0 = "\rErasing %d Kibyte @ %llx -- %2i %% complete ";
0x000110b8 bl 0x10a6c | fflush ("\rErasing %d Kibyte @ %llx -- %2i %% complete ");
0x000110bc ldr r7, [r4, 8] | r7 = *((r4 + 8));
0x000110c0 cmp r7, 0 |
| if (r7 != 0) {
0x000110c4 bne 0x10cdc | goto label_4;
| }
0x000110c8 mov r0, 0xa | r0 = 0xa;
0x000110cc bl 0x109dc | putchar (r0);
0x000110d0 b 0x10e2c | goto label_3;
| label_25:
0x000110d4 ldr sl, [sp, 0x134] | sl = var_134h;
0x000110d8 cmp r3, r2 |
| if (r3 != r2) {
0x000110dc moveq r3, 8 | r3 = 8;
| }
| if (r3 == r2) {
0x000110e0 movne r3, 0x8000000 | r3 = 0x8000000;
| }
0x000110e4 mov r2, 0 | r2 = 0;
0x000110e8 strb r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000110ec cmp sl, 8 |
0x000110f0 lsr r3, r3, 0x18 | r3 >>= 0x18;
0x000110f4 strb r2, [r4, 0x19] | *((r4 + 0x19)) = r2;
0x000110f8 strb r2, [r4, 0x1a] | *((r4 + 0x1a)) = r2;
0x000110fc strb r3, [r4, 0x1b] | *((r4 + 0x1b)) = r3;
| if (sl < 8) {
0x00011100 movge sl, 8 | sl = 8;
| }
0x00011104 b 0x10fac | goto label_5;
| label_26:
0x00011108 ldr r2, [sp, 0x124] | r2 = var_124h;
0x0001110c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00011110 ldr ip, [sp, 0x18] | ip = var_18h;
0x00011114 mul r3, r2, r3 | r3 = r2 * r3;
0x00011118 asr r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x0001111c mla ip, r1, ip, r3 | __asm ("mla ip, r1, ip, r3");
0x00011120 mov r3, ip | r3 = ip;
0x00011124 ldr ip, [sp, 0x18] | ip = var_18h;
0x00011128 umull r0, r1, r2, ip | r0:r1 = r2 * ip;
0x0001112c strd r0, r1, [sp, 0x20] | __asm ("strd r0, r1, [var_24h]");
0x00011130 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00011134 add r3, r3, r2 | r3 += r2;
0x00011138 str r3, [sp, 0x24] | var_24h = r3;
0x0001113c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00011140 cmp r3, 0 |
| if (r3 != 0) {
0x00011144 bne 0x111e4 | goto label_27;
| }
0x00011148 mov r2, ip | r2 = ip;
0x0001114c mov r1, fp | r1 = fp;
0x00011150 add r0, sp, 0x40 | r0 += endptr;
0x00011154 bl 0x130c8 | r0 = fcn_000130c8 (r0, r1);
0x00011158 cmp r0, 0 |
| if (r0 <= 0) {
0x0001115c ble 0x11190 | goto label_28;
| }
0x00011160 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00011164 cmp r3, 0 |
| if (r3 != 0) {
0x00011168 bne 0x1117c | goto label_9;
| }
0x0001116c ldrd r2, r3, [sp, 0x20] | __asm ("ldrd r2, r3, [var_24h]");
0x00011170 ldr r1, [pc, 0x244] | r1 = "help";
0x00011174 ldr r0, [pc, 0x2b0] | r0 = stdout;
0x00011178 bl 0x10a00 | printf (r0, "help", r2)
| do {
| label_9:
0x0001117c ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
0x00011180 adds r2, r2, 1 | r2++;
0x00011184 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00011188 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
0x0001118c b 0x11044 | goto label_6;
| if (r2 != r2) {
| label_28:
0x00011190 beq 0x111e4 |
0x00011194 bl 0x10b5c | r0 = errno_location ();
0x00011198 ldr r5, [r0] | r5 = *(r0);
0x0001119c cmp r5, 0x5f |
| if (r5 == 0x5f) {
0x000111a0 bne 0x111d0 |
0x000111a4 mov r3, 1 | r3 = 1;
0x000111a8 cmp r8, 0 |
0x000111ac str r3, [r4, 4] | *((r4 + 4)) = r3;
| if (r8 != 0) {
0x000111b0 bne 0x111e4 | goto label_27;
| }
0x000111b4 ldr r0, [pc, 0x218] |
0x000111b8 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000111bc ldr r2, [pc, 0x1f8] | r2 = "help";
0x000111c0 ldr r1, [pc, 0x268] | r1 = "_s:_Skipping_bad_block_at__08llx";
0x000111c4 ldr r0, [r0] | r0 = optind;
0x000111c8 bl 0x10aa8 | fprintf (r0, "_s:_Skipping_bad_block_at__08llx", "help", r3)
0x000111cc b 0x10e2c | goto label_3;
| }
0x000111d0 ldr r6, [pc, 0x1fc] | r6 = optind;
0x000111d4 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000111d8 ldr r2, [pc, 0x1dc] | r2 = "help";
0x000111dc ldr r1, [pc, 0x250] | r1 = "_s:_error_:__s:_Bad_block_check_not_available";
0x000111e0 b 0x10e9c | goto label_7;
| }
| label_27:
0x000111e4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000111e8 cmp r3, 0 |
| if (r3 == 0) {
0x000111ec bne 0x11238 |
0x000111f0 ldr r5, [sp, 0x124] | r5 = var_124h;
0x000111f4 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000111f8 add r3, r5, 0x3fc | r3 = r5 + 0x3fc;
0x000111fc cmp r5, 0 |
0x00011200 add r3, r3, 3 | r3 += 3;
| if (r5 >= 0) {
0x00011204 movlt r5, r3 | r5 = r3;
| }
0x00011208 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0001120c mov r0, 0x64 | r0 = 0x64;
0x00011210 mla r3, r0, r3, r2 | __asm ("mla r3, r0, r3, r2");
0x00011214 mov r1, sb | r1 = sb;
0x00011218 mov r0, r3 | r0 = r3;
0x0001121c bl 0x14750 | fcn_00014750 (r0, r1);
0x00011220 asr r5, r5, 0xa | r5 >>= 0xa;
0x00011224 ldrd r2, r3, [sp, 0x20] | __asm ("ldrd r2, r3, [var_24h]");
0x00011228 mov r1, r5 | r1 = r5;
0x0001122c str r0, [sp] | *(sp) = r0;
0x00011230 ldr r0, [pc, 0x1ec] | r0 = *(0x11420);
0x00011234 bl 0x10a00 | printf (r0, r1, r2, r3, r4, r5)
| }
0x00011238 ldr r3, [pc, 0x1e8] | r3 = "\rErasing %d Kibyte @ %llx -- %2i %% complete ";
0x0001123c ldr r0, [r3] | r0 = "\rErasing %d Kibyte @ %llx -- %2i %% complete ";
0x00011240 bl 0x10a6c | fflush ("\rErasing %d Kibyte @ %llx -- %2i %% complete ");
0x00011244 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00011248 cmp r3, 0 |
| if (r3 == 0) {
0x0001124c beq 0x112b4 | goto label_29;
| }
0x00011250 mov r2, r6 | r2 = r6;
0x00011254 mov r1, fp | r1 = fp;
0x00011258 add r0, sp, 0x40 | r0 += endptr;
0x0001125c bl 0x12e0c | r0 = fcn_00012e0c ();
0x00011260 cmp r0, 0 |
| if (r0 == 0) {
0x00011264 beq 0x112b4 | goto label_29;
| }
0x00011268 bl 0x10b5c | errno_location ();
0x0001126c ldr r6, [pc, 0x160] | r6 = optind;
0x00011270 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00011274 ldr r2, [pc, 0x140] | r2 = "help";
0x00011278 ldr r1, [pc, 0x1b8] | r1 = "%s: error!: %s: MTD get bad block failed\n";
0x0001127c ldr r5, [r0] | r5 = *(r0);
| label_8:
0x00011280 ldr r0, [r6] | r0 = *(r6);
0x00011284 bl 0x10aa8 | fprintf (r0, "%s: error!: %s: MTD get bad block failed\n", "help", r3, r4, r5, r6)
0x00011288 mov r0, r5 | r0 = r5;
0x0001128c ldr r6, [r6] | r6 = *(r6);
0x00011290 bl 0x10a0c | strerror (r0);
0x00011294 str r5, [sp] | *(sp) = r5;
0x00011298 ldr r3, [pc, 0x15c] | r3 = "%s: error!: %s\n";
0x0001129c mov r2, 0xd | r2 = 0xd;
0x000112a0 ldr r1, [pc, 0x158] | r1 = *(0x113fc);
0x000112a4 str r0, [sp, 4] | var_4h = r0;
0x000112a8 mov r0, r6 | r0 = r6;
0x000112ac bl 0x10aa8 | fprintf (r0, r1, r2, "%s: error!: %s\n", r4, r5)
0x000112b0 b 0x1117c |
| } while (1);
| label_29:
0x000112b4 mov r3, r6 | r3 = r6;
0x000112b8 mov r2, fp | r2 = fp;
0x000112bc add r1, sp, 0x40 | r1 += endptr;
0x000112c0 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000112c4 bl 0x12f94 | r0 = fcn_00012f94 ();
0x000112c8 cmp r0, 0 |
| if (r0 != 0) {
0x000112cc beq 0x112ec |
0x000112d0 bl 0x10b5c | errno_location ();
0x000112d4 ldr r6, [pc, 0xf8] | r6 = optind;
0x000112d8 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000112dc ldr r2, [pc, 0xd8] | r2 = "help";
0x000112e0 ldr r1, [pc, 0x154] | r1 = "%s: error!: %s: MTD unlock failure\n";
0x000112e4 ldr r5, [r0] | r5 = *(r0);
0x000112e8 b 0x11280 | goto label_8;
| }
0x000112ec ldr r3, [r4] | r3 = *(r4);
0x000112f0 cmp r3, 0 |
| if (r3 == 0) {
0x000112f4 beq 0x1117c | goto label_9;
| }
0x000112f8 cmp r8, 0 |
| if (r8 == 0) {
0x000112fc bne 0x11358 |
0x00011300 mov r3, 1 | r3 = 1;
0x00011304 str r3, [sp, 0x14] | var_14h = r3;
0x00011308 ldr r3, [pc, 0x110] | r3 = *(0x1141c);
0x0001130c str sl, [sp, 0x10] | var_10h = sl;
0x00011310 str r3, [sp, 0xc] | var_ch = r3;
0x00011314 str r8, [sp, 8] | var_8h = r8;
0x00011318 str r8, [sp, 4] | var_4h = r8;
0x0001131c str r8, [sp] | *(sp) = r8;
0x00011320 mov r3, r6 | r3 = r6;
0x00011324 mov r2, fp | r2 = fp;
0x00011328 add r1, sp, 0x40 | r1 += endptr;
0x0001132c ldr r0, [sp, 0x30] | r0 = var_30h;
0x00011330 bl 0x133e0 | r0 = fcn_000133e0 (r0, r1, r2, r3, r4, r5, r6);
0x00011334 cmp r0, 0 |
| if (r0 == 0) {
0x00011338 beq 0x11394 | goto label_30;
| }
0x0001133c bl 0x10b5c | errno_location ();
0x00011340 ldr r6, [pc, 0x8c] | r6 = optind;
0x00011344 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00011348 ldr r2, [pc, 0x6c] | r2 = "help";
0x0001134c ldr r1, [pc, 0xec] | r1 = "%s: error!: %s: MTD Erase failure\n";
0x00011350 ldr r5, [r0] | r5 = *(r0);
0x00011354 b 0x11280 | goto label_8;
| }
0x00011358 ldrd r2, r3, [sp, 0x20] | __asm ("ldrd r2, r3, [var_24h]");
0x0001135c ldr r1, [pc, 0xbc] | r1 = *(0x1141c);
0x00011360 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00011364 mov r0, fp | r0 = fp;
0x00011368 mov r2, 0xc | r2 = 0xc;
0x0001136c bl 0x10a30 | r0 = pwrite64 ();
0x00011370 cmp r0, 0xc |
| if (r0 != 0xc) {
0x00011374 beq 0x11394 |
0x00011378 bl 0x10b5c | errno_location ();
0x0001137c ldr r6, [pc, 0x50] | r6 = optind;
0x00011380 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00011384 ldr r2, [pc, 0x30] | r2 = "help";
0x00011388 ldr r1, [pc, 0xb4] | r1 = "_s:_error_:__s:_MTD_writeoob_failure";
0x0001138c ldr r5, [r0] | r5 = *(r0);
0x00011390 b 0x11280 | goto label_8;
| }
| label_30:
0x00011394 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00011398 cmp r3, 0 |
| if (r3 != 0) {
0x0001139c bne 0x1117c | goto label_9;
| }
0x000113a0 ldr r1, [pc, 0x14] | r1 = "help";
0x000113a4 ldr r0, [pc, 0x9c] | r0 = "_s:_error_:__s:_MTD_write_failure";
0x000113a8 bl 0x10a00 | printf ("_s:_error_:__s:_MTD_write_failure", "help")
0x000113ac b 0x1117c | goto label_9;
| }
[*] Function printf used 31 times flash_erase