[*] Binary protection state of ubinfo
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function printf tear down of ubinfo
; 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/ubinfo @ 0x113cc */
| #include <stdint.h>
|
; (fcn) fcn.000113cc () | void fcn_000113cc (int32_t arg2) {
| 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_20h_2;
| int32_t var_28h;
| int32_t var_28h_2;
| int32_t var_30h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_c4h;
| r1 = arg2;
0x000113cc push {r4, r5, r6, r7, lr} |
0x000113d0 sub sp, sp, 0xc4 |
0x000113d4 add r3, sp, 8 | r3 += var_8h;
0x000113d8 mov r7, r1 | r7 = r1;
0x000113dc mov r6, r2 | r6 = r2;
0x000113e0 bl 0x1385c | r0 = fcn_0001385c (r0, r1);
0x000113e4 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x000113e8 beq 0x11448 | goto label_0;
| }
0x000113ec bl 0x10b24 | errno_location ();
0x000113f0 ldr r5, [pc, 0x114] |
0x000113f4 mov r3, r6 | r3 = r6;
0x000113f8 ldr r2, [pc, 0x110] | r2 = stderr;
0x000113fc ldr r1, [pc, 0x110] | r1 = "ubinfo";
0x00011400 ldr r4, [r0] | r4 = *(r0);
0x00011404 str r7, [sp] | *(sp) = r7;
0x00011408 ldr r0, [r5] | r0 = *(0x11508);
0x0001140c bl 0x10a64 | fprintf (r0, "ubinfo", r2, r3, r4, r5)
0x00011410 mov r0, r4 | r0 = r4;
0x00011414 ldr r5, [r5] | r5 = *(0x11508);
0x00011418 bl 0x109d4 | strerror (r0);
0x0001141c str r4, [sp] | *(sp) = r4;
0x00011420 ldr r3, [pc, 0xf0] | r3 = "_s:_error_:_cannot_get_information_about_UBI_volume__d_on_ubi_d";
0x00011424 mov r2, 8 | r2 = 8;
0x00011428 ldr r1, [pc, 0xec] | r1 = *(0x11518);
0x0001142c mvn r4, 0 | r4 = ~0;
0x00011430 str r0, [sp, 4] | var_4h = r0;
0x00011434 mov r0, r5 | r0 = r5;
0x00011438 bl 0x10a64 | fprintf (r0, r1, r2, "_s:_error_:_cannot_get_information_about_UBI_volume__d_on_ubi_d", r4)
| do {
0x0001143c mov r0, r4 | r0 = r4;
0x00011440 add sp, sp, 0xc4 |
0x00011444 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00011448 ldr r2, [sp, 8] | r2 = var_8h;
0x0001144c ldr r1, [sp, 0xc] | r1 = var_ch;
0x00011450 ldr r0, [pc, 0xc8] | r0 = "_serror__d___s_";
0x00011454 bl 0x109c8 | printf ("_serror__d___s_", r1, r2)
0x00011458 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0001145c ldr r3, [pc, 0xc0] | r3 = "Volume ID: %d (on ubi%d)\n";
0x00011460 ldr r2, [pc, 0xc0] | r2 = "static";
0x00011464 cmp r1, 3 |
| if (r1 != 3) {
0x00011468 moveq r1, r2 | r1 = r2;
| }
| if (r1 == 3) {
0x0001146c movne r1, r3 | r1 = r3;
| }
0x00011470 ldr r0, [pc, 0xb4] | r0 = "dynamic";
0x00011474 bl 0x109c8 | printf ("dynamic", r1, "static", "Volume ID: %d (on ubi%d)\n")
0x00011478 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0001147c ldr r0, [pc, 0xac] | r0 = "Type: %s\n";
0x00011480 bl 0x109c8 | printf ("Type: %s\n", r1)
0x00011484 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00011488 ldr r0, [pc, 0xa4] | r0 = "Alignment:____d";
0x0001148c bl 0x109c8 | printf ("Alignment:____d", r1)
0x00011490 ldrd r0, r1, [sp, 0x28] | __asm ("ldrd r0, r1, [var_28h]");
0x00011494 mov r2, r4 | r2 = r4;
0x00011498 bl 0x11a3c | fcn_00011a3c (r0, r1);
0x0001149c ldr r0, [pc, 0x94] | r0 = "Size: %d LEBs (";
0x000114a0 bl 0x10a1c | puts ("Size: %d LEBs (");
0x000114a4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000114a8 cmp r3, 4 |
| if (r3 == 4) {
0x000114ac bne 0x114cc |
0x000114b0 ldr r0, [pc, 0x84] | r0 = *(0x11538);
0x000114b4 bl 0x109c8 | printf (r0)
0x000114b8 ldrd r0, r1, [sp, 0x20] | __asm ("ldrd r0, r1, [var_20h]");
0x000114bc mov r2, 1 | r2 = 1;
0x000114c0 bl 0x11a3c | fcn_00011a3c (r0, r1);
0x000114c4 mov r0, 0xa | r0 = 0xa;
0x000114c8 bl 0x109b0 | putchar (r0);
| }
0x000114cc ldr r1, [sp, 0x38] | r1 = var_38h;
0x000114d0 ldr r2, [pc, 0x68] | r2 = "Data_bytes:__";
0x000114d4 ldr r3, [pc, 0x68] | r3 = "corrupted";
0x000114d8 cmp r1, 0 |
| if (r1 == 0) {
0x000114dc movne r1, r2 | r1 = r2;
| }
| if (r1 != 0) {
0x000114e0 moveq r1, r3 | r1 = r3;
| }
0x000114e4 ldr r0, [pc, 0x5c] | r0 = *(0x11544);
0x000114e8 bl 0x109c8 | printf (r0, r1, "Data_bytes:__", "corrupted")
0x000114ec add r1, sp, 0x3c | r1 += var_3ch;
0x000114f0 ldr r0, [pc, 0x54] | r0 = "State:________s";
0x000114f4 bl 0x109c8 | printf ("State:________s", r1)
0x000114f8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000114fc ldr r1, [sp, 0x10] | r1 = var_10h;
0x00011500 ldr r0, [pc, 0x48] | r0 = "Name: %s\n";
0x00011504 bl 0x109c8 | printf ("Name: %s\n", r1, r2)
0x00011508 b 0x1143c |
| } 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/ubinfo @ 0x11554 */
| #include <stdint.h>
|
; (fcn) fcn.00011554 () | void fcn_00011554 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| 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_30h;
| int32_t var_30h_2;
| int32_t var_38h;
| int32_t var_38h_2;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_48h_2;
| int32_t var_50h;
| int32_t var_54h;
| int32_t var_58h;
| int32_t var_60h;
| int32_t var_11ch;
| r0 = arg1;
| r1 = arg2;
0x00011554 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00011558 sub sp, sp, 0x11c |
0x0001155c mov sb, r2 | sb = r2;
0x00011560 add r2, sp, 8 | r2 += var_8h;
0x00011564 mov r6, r0 | r6 = r0;
0x00011568 mov r7, r1 | r7 = r1;
0x0001156c bl 0x13334 | r0 = fcn_00013334 (r0, r1);
0x00011570 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x00011574 beq 0x115d0 | goto label_5;
| }
0x00011578 bl 0x10b24 | errno_location ();
0x0001157c ldr r5, [pc, 0x2d4] |
0x00011580 mov r3, r7 | r3 = r7;
0x00011584 ldr r2, [pc, 0x2d0] | r2 = stderr;
0x00011588 ldr r1, [pc, 0x2d0] | r1 = "ubinfo";
0x0001158c ldr r4, [r0] | r4 = *(r0);
0x00011590 ldr r0, [r5] | r0 = *(0x11854);
0x00011594 bl 0x10a64 | fprintf (r0, "ubinfo", r2, r3, r4, r5)
0x00011598 mov r0, r4 | r0 = r4;
0x0001159c ldr r5, [r5] | r5 = *(0x11854);
0x000115a0 bl 0x109d4 | strerror (r0);
0x000115a4 ldr r3, [pc, 0x2b8] | r3 = "_s:_error_:_cannot_get_information_about_UBI_device__d";
0x000115a8 ldr r1, [pc, 0x2b8] | r1 = *(0x11864);
0x000115ac mov r2, 8 | r2 = 8;
0x000115b0 str r4, [sp] | *(sp) = r4;
0x000115b4 str r0, [sp, 4] | var_4h = r0;
0x000115b8 mov r0, r5 | r0 = r5;
| label_1:
0x000115bc bl 0x10a64 | fprintf (r0, r1, r2, "_s:_error_:_cannot_get_information_about_UBI_device__d", r4)
0x000115c0 mvn r4, 0 | r4 = ~0;
| do {
| label_2:
0x000115c4 mov r0, r4 | r0 = r4;
0x000115c8 add sp, sp, 0x11c |
0x000115cc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000115d0 ldr r1, [sp, 8] | r1 = var_8h;
0x000115d4 ldr r0, [pc, 0x290] | r0 = "_serror__d___s_";
0x000115d8 bl 0x109c8 | printf ("_serror__d___s_", r1)
0x000115dc ldr r1, [sp, 0x10] | r1 = var_10h;
0x000115e0 ldr r0, [pc, 0x288] | r0 = "ubi_d";
0x000115e4 bl 0x109c8 | printf ("ubi_d", r1)
0x000115e8 ldr r0, [pc, 0x284] | r0 = "Volumes_count:____________________________d";
0x000115ec bl 0x109c8 | printf ("Volumes_count:____________________________d")
0x000115f0 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000115f4 mov r2, r4 | r2 = r4;
0x000115f8 asr r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x000115fc bl 0x11a3c | fcn_00011a3c (r0, r1);
0x00011600 mov r0, 0xa | r0 = 0xa;
0x00011604 bl 0x109b0 | putchar (r0);
0x00011608 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0001160c ldr r0, [pc, 0x264] | r0 = "Logical eraseblock size: ";
0x00011610 bl 0x109c8 | printf ("Logical eraseblock size: ", r1)
0x00011614 mov r2, r4 | r2 = r4;
0x00011618 ldrd r0, r1, [sp, 0x30] | __asm ("ldrd r0, r1, [var_30h]");
0x0001161c bl 0x11a3c | fcn_00011a3c (r0, r1);
0x00011620 ldr r0, [pc, 0x254] | r0 = "Total amount of logical eraseblocks: %d (";
0x00011624 bl 0x10a1c | puts ("Total amount of logical eraseblocks: %d (");
0x00011628 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0001162c ldr r0, [pc, 0x24c] | r0 = *(0x1187c);
0x00011630 bl 0x109c8 | printf (r0, r1)
0x00011634 mov r2, r4 | r2 = r4;
0x00011638 ldrd r0, r1, [sp, 0x38] | __asm ("ldrd r0, r1, [var_38h]");
0x0001163c bl 0x11a3c | fcn_00011a3c (r0, r1);
0x00011640 ldr r0, [pc, 0x234] | r0 = "Total amount of logical eraseblocks: %d (";
0x00011644 bl 0x10a1c | puts ("Total amount of logical eraseblocks: %d (");
0x00011648 ldr r1, [sp, 0x54] | r1 = var_54h;
0x0001164c ldr r0, [pc, 0x230] | r0 = "Amount of available logical eraseblocks: %d (";
0x00011650 bl 0x109c8 | printf ("Amount of available logical eraseblocks: %d (", r1)
0x00011654 ldr r1, [sp, 0x40] | r1 = var_40h;
0x00011658 ldr r0, [pc, 0x228] | r0 = "Maximum count of volumes %d\n";
0x0001165c bl 0x109c8 | printf ("Maximum count of volumes %d\n", r1)
0x00011660 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00011664 ldr r0, [pc, 0x220] | r0 = "Count_of_bad_physical_eraseblocks:________d";
0x00011668 bl 0x109c8 | printf ("Count_of_bad_physical_eraseblocks:________d", r1)
0x0001166c ldrd r2, r3, [sp, 0x48] | __asm ("ldrd r2, r3, [var_48h]");
0x00011670 ldr r0, [pc, 0x218] | r0 = "Count of reserved physical eraseblocks: %d\n";
0x00011674 bl 0x109c8 | printf ("Count of reserved physical eraseblocks: %d\n", r1, r2)
0x00011678 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0001167c ldr r3, [pc, 0x210] | r3 = "Current_maximum_erase_counter_value:______lld";
0x00011680 cmp r1, 1 |
0x00011684 ldr r2, [pc, 0x20c] | r2 = "byte";
0x00011688 ldr r0, [pc, 0x20c] | r0 = *(0x11898);
| if (r1 > 1) {
0x0001168c movle r2, r3 | r2 = r3;
| }
0x00011690 bl 0x109c8 | printf (r0, r1, "byte", "Current_maximum_erase_counter_value:______lld")
0x00011694 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00011698 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0001169c ldr r0, [pc, 0x1fc] | r0 = "Minimum input/output unit size: %d %s\n";
0x000116a0 bl 0x109c8 | printf ("Minimum input/output unit size: %d %s\n", r1, r2)
0x000116a4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000116a8 cmp r3, 0 |
| if (r3 != 0) {
0x000116ac bne 0x116b8 | goto label_6;
| }
| label_0:
0x000116b0 mov r4, 0 | r4 = 0;
0x000116b4 b 0x115c4 |
| } while (1);
| label_6:
0x000116b8 ldr r0, [pc, 0x1e4] | r0 = "Character device major/minor: %d:%d\n";
0x000116bc bl 0x109c8 | printf ("Character device major/minor: %d:%d\n")
0x000116c0 ldr sl, [pc, 0x1e0] | sl = "_d";
0x000116c4 ldr r5, [sp, 0x14] | r5 = var_14h;
0x000116c8 ldr fp, [pc, 0x1dc] | fp = "___d";
0x000116cc mov r8, 1 | r8 = 1;
| label_3:
0x000116d0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000116d4 cmp r3, r5 |
| if (r3 >= r5) {
0x000116d8 bge 0x11790 | goto label_7;
| }
0x000116dc mov r0, 0xa | r0 = 0xa;
0x000116e0 bl 0x109b0 | putchar (r0);
0x000116e4 cmp sb, 0 |
| if (sb == 0) {
0x000116e8 beq 0x116b0 | goto label_0;
| }
0x000116ec mov r0, 0xa | r0 = 0xa;
0x000116f0 bl 0x109b0 | putchar (r0);
0x000116f4 ldr sb, [pc, 0x1b4] | sb = "-----------------------------------";
0x000116f8 ldr r5, [sp, 0x14] | r5 = var_14h;
0x000116fc mov r4, 1 | r4 = 1;
| label_4:
0x00011700 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00011704 cmp r3, r5 |
| if (r3 < r5) {
0x00011708 blt 0x116b0 | goto label_0;
| }
0x0001170c cmp r4, 0 |
| if (r4 == 0) {
0x00011710 bne 0x1171c |
0x00011714 mov r0, sb | r0 = sb;
0x00011718 bl 0x10a1c | puts (r0);
| }
0x0001171c add r3, sp, 0x60 | r3 += var_60h;
0x00011720 mov r2, r5 | r2 = r5;
0x00011724 ldr r1, [sp, 8] | r1 = var_8h;
0x00011728 mov r0, r6 | r0 = r6;
0x0001172c bl 0x1385c | r0 = fcn_0001385c (r0, r1);
0x00011730 cmn r0, 1 |
| if (r0 != 1) {
0x00011734 bne 0x11838 | goto label_8;
| }
0x00011738 bl 0x10b24 | r0 = errno_location ();
0x0001173c ldr r7, [r0] | r7 = *(r0);
0x00011740 cmp r7, 2 |
| if (r7 == 2) {
0x00011744 beq 0x11850 | goto label_9;
| }
0x00011748 ldr r3, [sp, 8] | r3 = var_8h;
0x0001174c ldr r4, [pc, 0x104] |
0x00011750 str r3, [sp] | *(sp) = r3;
0x00011754 ldr r2, [pc, 0x100] | r2 = stderr;
0x00011758 mov r3, r5 | r3 = r5;
0x0001175c ldr r1, [pc, 0x150] | r1 = "-----------------------------------";
0x00011760 ldr r0, [r4] | r0 = *(0x11854);
0x00011764 bl 0x10a64 | fprintf (r0, "-----------------------------------", r2, r3, r4)
0x00011768 mov r0, r7 | r0 = r7;
0x0001176c ldr r4, [r4] | r4 = *(0x11854);
0x00011770 bl 0x109d4 | strerror (r0);
0x00011774 str r7, [sp] | *(sp) = r7;
0x00011778 ldr r3, [pc, 0xe4] | r3 = "_s:_error_:_cannot_get_information_about_UBI_device__d";
0x0001177c mov r2, 8 | r2 = 8;
0x00011780 ldr r1, [pc, 0xe0] | r1 = *(0x11864);
0x00011784 str r0, [sp, 4] | var_4h = r0;
0x00011788 mov r0, r4 | r0 = r4;
0x0001178c b 0x115bc | goto label_1;
| label_7:
0x00011790 add r3, sp, 0x60 | r3 += var_60h;
0x00011794 mov r2, r5 | r2 = r5;
0x00011798 ldr r1, [sp, 8] | r1 = var_8h;
0x0001179c mov r0, r6 | r0 = r6;
0x000117a0 bl 0x1385c | r0 = fcn_0001385c (r0, r1);
0x000117a4 cmn r0, 1 |
0x000117a8 mov r4, r0 | r4 = r0;
| if (r0 == 1) {
0x000117ac bne 0x1180c |
0x000117b0 bl 0x10b24 | r0 = errno_location ();
0x000117b4 ldr r7, [r0] | r7 = *(r0);
0x000117b8 cmp r7, 2 |
| if (r7 == 2) {
0x000117bc beq 0x11820 | goto label_10;
| }
0x000117c0 ldr r3, [sp, 8] | r3 = var_8h;
0x000117c4 ldr r6, [pc, 0x8c] | r6 = *(0x11854);
0x000117c8 str r3, [sp] | *(sp) = r3;
0x000117cc ldr r2, [pc, 0x88] | r2 = stderr;
0x000117d0 mov r3, r5 | r3 = r5;
0x000117d4 ldr r1, [pc, 0xd8] | r1 = "-----------------------------------";
0x000117d8 ldr r0, [r6] | r0 = *(0x11854);
0x000117dc bl 0x10a64 | fprintf (r0, "-----------------------------------", r2, r3, r4, r5, r6)
0x000117e0 mov r0, r7 | r0 = r7;
0x000117e4 ldr r5, [r6] | r5 = *(0x11854);
0x000117e8 bl 0x109d4 | strerror (r0);
0x000117ec str r7, [sp] | *(sp) = r7;
0x000117f0 ldr r3, [pc, 0x6c] | r3 = "_s:_error_:_cannot_get_information_about_UBI_device__d";
0x000117f4 mov r2, 8 | r2 = 8;
0x000117f8 ldr r1, [pc, 0x68] | r1 = *(0x11864);
0x000117fc str r0, [sp, 4] | var_4h = r0;
0x00011800 mov r0, r5 | r0 = r5;
0x00011804 bl 0x10a64 | fprintf (r0, r1, r2, "_s:_error_:_cannot_get_information_about_UBI_device__d")
0x00011808 b 0x115c4 | goto label_2;
| }
0x0001180c cmp r8, 0 |
0x00011810 mov r1, r5 | r1 = r5;
| if (r8 != 0) {
0x00011814 bne 0x11828 | goto label_11;
| }
0x00011818 mov r0, fp | r0 = fp;
0x0001181c bl 0x109c8 | printf (r0)
| do {
| label_10:
0x00011820 add r5, r5, 1 | r5++;
0x00011824 b 0x116d0 | goto label_3;
| label_11:
0x00011828 mov r0, sl | r0 = sl;
0x0001182c bl 0x109c8 | printf (r0)
0x00011830 mov r8, 0 | r8 = 0;
0x00011834 b 0x11820 |
| } while (1);
| label_8:
0x00011838 mov r2, r5 | r2 = r5;
0x0001183c ldr r1, [sp, 8] | r1 = var_8h;
0x00011840 mov r0, r6 | r0 = r6;
0x00011844 bl 0x113cc | r0 = fcn_000113cc (r0);
0x00011848 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x0001184c bne 0x115c4 | goto label_2;
| }
| label_9:
0x00011850 add r5, r5, 1 | r5++;
0x00011854 b 0x11700 | 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/ubinfo @ 0x11a3c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00011a3c () | void fcn_00011a3c (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_0h_2;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x00011a3c ldr r3, [pc, 0x144] | r3 = *(0x11b84);
0x00011a40 cmp r2, 0 |
0x00011a44 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00011a48 ldr r6, [pc, 0x13c] | r6 = *(0x11b88);
0x00011a4c mov r4, r0 | r4 = r0;
| if (r2 != 0) {
0x00011a50 moveq r6, r3 | r6 = r3;
| }
0x00011a54 mov r8, r2 | r8 = r2;
0x00011a58 mov r3, r1 | r3 = r1;
0x00011a5c mov r2, r0 | r2 = r0;
0x00011a60 ldr r0, [pc, 0x128] | r0 = "_";
0x00011a64 mov r5, r1 | r5 = r1;
0x00011a68 bl 0x109c8 | printf (r0, r1, r2, r3, r4, r5, r6)
0x00011a6c cmp r4, 0x40000001 |
0x00011a70 sbcs r3, r5, 0 | __asm ("sbcs r3, r5, 0");
| if (r4 < 0x40000001) {
0x00011a74 blt 0x11ac8 | goto label_1;
| }
0x00011a78 add r3, pc, 0xf8 | r3 = pc + 0xf8;
0x00011a7c ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x00011a80 bic r0, r4, 0xc0000000 | r0 = BIT_MASK (r4, 0xc0000000);
0x00011a84 mov r1, 0 | r1 = 0;
0x00011a88 bl 0x13fa0 | fcn_00013fa0 (r0);
0x00011a8c lsr r7, r4, 0x1e | r7 = r4 >> 0x1e;
0x00011a90 orr r7, r7, r5, lsl 2 | r7 |= (r5 << 2);
0x00011a94 asr sb, r5, 0x1e | sb = r5 >> 0x1e;
0x00011a98 mov r2, r7 | r2 = r7;
0x00011a9c mov r3, sb | r3 = sb;
0x00011aa0 strd r0, r1, [sp] | __asm ("strd r0, r1, [sp]");
0x00011aa4 ldr r0, [pc, 0xe8] | r0 = "_lld_bytes";
0x00011aa8 mov r1, r6 | r1 = r6;
| do {
| label_0:
0x00011aac bl 0x109c8 | printf (r0, r1, r2, r3)
0x00011ab0 cmp r8, 0 |
| if (r8 == 0) {
0x00011ab4 beq 0x11b70 | goto label_2;
| }
0x00011ab8 mov r0, 0x29 | r0 = 0x29;
0x00011abc add sp, sp, 0xc |
0x00011ac0 pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00011ac4 b 0x109b0 | void (*0x109b0)() ();
| label_1:
0x00011ac8 mov r2, 0x100000 | r2 = 0x100000;
0x00011acc mov r3, 0 | r3 = 0;
0x00011ad0 cmp r2, r4 |
0x00011ad4 sbcs r3, r3, r5 | __asm ("sbcs r3, r3, r5");
| if (r2 >= r4) {
0x00011ad8 bge 0x11b1c | goto label_3;
| }
0x00011adc ldr sl, [pc, 0xb4] | sl = *(0x00011b98);
0x00011ae0 mov fp, 0 |
0x00011ae4 add r3, pc, 0x94 | r3 = pc + 0x94;
0x00011ae8 ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x00011aec and r0, sl, r4 | r0 = sl & r4;
0x00011af0 and r1, fp, r5 | r1 = fp & r5;
0x00011af4 bl 0x13fa0 | fcn_00013fa0 (r0);
0x00011af8 lsr r7, r4, 0x14 | r7 = r4 >> 0x14;
0x00011afc orr r7, r7, r5, lsl 12 | r7 |= (r5 << 12);
0x00011b00 asr sb, r5, 0x14 | sb = r5 >> 0x14;
0x00011b04 mov r2, r7 | r2 = r7;
0x00011b08 mov r3, sb | r3 = sb;
0x00011b0c strd r0, r1, [sp] | __asm ("strd r0, r1, [sp]");
0x00011b10 ldr r0, [pc, 0x84] | r0 = *(0x11b98);
0x00011b14 mov r1, r6 | r1 = r6;
0x00011b18 b 0x11aac |
| } while (1);
| label_3:
0x00011b1c mov r2, 0x400 | r2 = 0x400;
0x00011b20 mov r3, 0 | r3 = 0;
0x00011b24 cmp r2, r4 |
0x00011b28 sbcs r3, r3, r5 | __asm ("sbcs r3, r3, r5");
| if (r2 < r4) {
0x00011b2c bge 0x11b70 |
0x00011b30 ldr sl, [pc, 0x68] | sl = *(0x00011ba0);
0x00011b34 mov fp, 0 |
0x00011b38 mov r2, 0x66 | r2 = 0x66;
0x00011b3c mov r3, 0 | r3 = 0;
0x00011b40 and r0, sl, r4 | r0 = sl & r4;
0x00011b44 and r1, fp, r5 | r1 = fp & r5;
0x00011b48 bl 0x13fa0 | fcn_00013fa0 (r0);
0x00011b4c lsr r7, r4, 0xa | r7 = r4 >> 0xa;
0x00011b50 orr r7, r7, r5, lsl 22 | r7 |= (r5 << 22);
0x00011b54 asr sb, r5, 0xa | sb = r5 >> 0xa;
0x00011b58 mov r2, r7 | r2 = r7;
0x00011b5c mov r3, sb | r3 = sb;
0x00011b60 strd r0, r1, [sp] | __asm ("strd r0, r1, [sp]");
0x00011b64 ldr r0, [pc, 0x38] | r0 = *(0x11ba0);
0x00011b68 mov r1, r6 | r1 = r6;
0x00011b6c b 0x11aac | goto label_0;
| }
| label_2:
0x00011b70 add sp, sp, 0xc |
0x00011b74 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/ubinfo @ 0x10b90 */
| #include <stdint.h>
|
; (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_dch;
| r0 = argc;
| r1 = argv;
| /* [10] -r-x section size 13964 named .text */
0x00010b90 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00010b94 ldr sb, [pc, 0x4f0] | sb = "devn";
0x00010b98 ldr sl, [pc, 0x4f0] | sl = "an:N:d:hV";
0x00010b9c ldr r6, [pc, 0x4f0] | r6 = "an:N:d:hV";
0x00010ba0 sub sp, sp, 0xdc |
0x00010ba4 mov r7, r0 | r7 = r0;
0x00010ba8 mov r8, r1 | r8 = r1;
| do {
| label_0:
0x00010bac mov r5, 0 | r5 = 0;
0x00010bb0 str r5, [sp] | *(sp) = r5;
0x00010bb4 mov r3, sb | r3 = sb;
0x00010bb8 mov r2, sl | r2 = sl;
0x00010bbc mov r1, r8 | r1 = r8;
0x00010bc0 mov r0, r7 | r0 = r7;
0x00010bc4 str r5, [sp, 0x20] | var_20h = r5;
0x00010bc8 bl 0x109ec | r0 = getopt_long ();
0x00010bcc cmn r0, 1 |
0x00010bd0 mov r4, r0 | r4 = r0;
| if (r0 == 1) {
0x00010bd4 beq 0x10d28 | goto label_11;
| }
0x00010bd8 cmp r0, 0x61 |
| if (r0 == 0x61) {
0x00010bdc beq 0x10c68 | goto label_12;
| }
| if (r0 <= 0x61) {
0x00010be0 bgt 0x10c14 |
0x00010be4 cmp r0, 0x4e |
| if (r0 == 0x4e) {
0x00010be8 beq 0x10cc8 | goto label_13;
| }
0x00010bec cmp r0, 0x56 |
| if (r0 == 0x56) {
0x00010bf0 beq 0x10d00 | goto label_14;
| }
0x00010bf4 cmp r0, 0x3a |
| if (r0 != 0x3a) {
0x00010bf8 bne 0x10d14 | goto label_15;
| }
0x00010bfc ldr r3, [pc, 0x494] | r3 = *(0x11094);
0x00010c00 ldr r2, [pc, 0x494] | r2 = stderr;
0x00010c04 ldr r1, [pc, 0x494] | r1 = "ubinfo";
0x00010c08 ldr r0, [r3] | r0 = *(0x11094);
0x00010c0c bl 0x10a64 | fprintf (r0, "ubinfo", r2, r3)
0x00010c10 b 0x10cb8 | goto label_1;
| }
0x00010c14 cmp r0, 0x68 |
| if (r0 == 0x68) {
0x00010c18 beq 0x10cd8 | goto label_16;
| }
0x00010c1c cmp r0, 0x6e |
| if (r0 == 0x6e) {
0x00010c20 beq 0x10c74 | goto label_17;
| }
0x00010c24 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x00010c28 bne 0x10d14 | goto label_15;
| }
0x00010c2c ldr r4, [pc, 0x470] | r4 = "_s:_error_:_parameter_is_missing";
0x00010c30 add r1, sp, 0x20 | r1 += var_20h;
0x00010c34 ldr r0, [r4] | r0 = "_s:_error_:_parameter_is_missing";
0x00010c38 bl 0x118b8 | fcn_000118b8 ("_s:_error_:_parameter_is_missing", r1);
0x00010c3c ldr r3, [sp, 0x20] | r3 = var_20h;
0x00010c40 cmp r3, 0 |
0x00010c44 str r0, [r6] | *(r6) = r0;
| if (r3 != 0) {
0x00010c48 lsreq r0, r0, 0x1f | r0 >>= 0x1f;
| }
| if (r3 == 0) {
0x00010c4c movne r0, 1 | r0 = 1;
| }
0x00010c50 cmp r0, 0 |
0x00010c54 beq 0x10bac |
| } while (r0 == 0);
0x00010c58 ldr r3, [r4] | r3 = *(r4);
0x00010c5c ldr r2, [pc, 0x438] | r2 = stderr;
0x00010c60 ldr r1, [pc, 0x440] | r1 = optarg;
0x00010c64 b 0x10cac | goto label_18;
| label_12:
0x00010c68 mov r3, 1 | r3 = 1;
0x00010c6c str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00010c70 b 0x10bac | goto label_0;
| label_17:
0x00010c74 ldr r4, [pc, 0x428] | r4 = "_s:_error_:_parameter_is_missing";
0x00010c78 add r1, sp, 0x20 | r1 += var_20h;
0x00010c7c ldr r0, [r4] | r0 = "_s:_error_:_parameter_is_missing";
0x00010c80 bl 0x118b8 | fcn_000118b8 ("_s:_error_:_parameter_is_missing", r1);
0x00010c84 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00010c88 cmp r3, 0 |
0x00010c8c str r0, [r6, 4] | *((r6 + 4)) = r0;
| if (r3 != 0) {
0x00010c90 lsreq r0, r0, 0x1f | r0 >>= 0x1f;
| }
| if (r3 == 0) {
0x00010c94 movne r0, 1 | r0 = 1;
| }
0x00010c98 cmp r0, 0 |
| if (r0 == 0) {
0x00010c9c beq 0x10bac | goto label_0;
| }
0x00010ca0 ldr r3, [r4] | r3 = *(r4);
0x00010ca4 ldr r2, [pc, 0x3f0] | r2 = stderr;
0x00010ca8 ldr r1, [pc, 0x3fc] | r1 = "%s: error!: bad UBI device number: \"%s\"\n";
| label_18:
0x00010cac ldr r0, [pc, 0x3e4] |
0x00010cb0 ldr r0, [r0] | r0 = *(0x11094);
0x00010cb4 bl 0x10a64 | fprintf (r0, "%s: error!: bad UBI device number: \"%s\"\n", r2, r3)
| label_1:
0x00010cb8 mvn r4, 0 | r4 = ~0;
| label_2:
0x00010cbc mov r0, r4 | r0 = r4;
0x00010cc0 add sp, sp, 0xdc |
0x00010cc4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00010cc8 ldr r3, [pc, 0x3d4] |
0x00010ccc ldr r3, [r3] | r3 = "_s:_error_:_parameter_is_missing";
0x00010cd0 str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x00010cd4 b 0x10bac | goto label_0;
| label_16:
0x00010cd8 ldr r1, [pc, 0x3d0] | r1 = "_s:_error_:_bad_volume_ID:___s_";
0x00010cdc ldr r0, [pc, 0x3d0] | r0 = "ubinfo_version_2.1.0___a_tool_to_print_UBI_information.";
0x00010ce0 bl 0x109c8 | printf ("ubinfo_version_2.1.0___a_tool_to_print_UBI_information.", "_s:_error_:_bad_volume_ID:___s_")
0x00010ce4 ldr r1, [pc, 0x3cc] | r1 = "_s";
0x00010ce8 ldr r0, [pc, 0x3c4] | r0 = "ubinfo_version_2.1.0___a_tool_to_print_UBI_information.";
0x00010cec bl 0x109c8 | printf ("ubinfo_version_2.1.0___a_tool_to_print_UBI_information.", "_s")
0x00010cf0 ldr r0, [pc, 0x3c4] | r0 = "Usage_1:_ubinfo___d__UBI_device_number_____n__volume_ID____N__volume_name_____a____h____V____vol_id_volume_ID_____name__volume_name______devn__UBI_device_number______all_____help_____version_Usage_2:_ubinfo__UBI_device_node_file_name____a____h____V";
0x00010cf4 bl 0x10a1c | puts ("Usage_1:_ubinfo___d__UBI_device_number_____n__volume_ID____N__volume_name_____a____h____V____vol_id_volume_ID_____name__volume_name______devn__UBI_device_number______all_____help_____version_Usage_2:_ubinfo__UBI_device_node_file_name____a____h____V");
| do {
0x00010cf8 mov r0, r5 | r0 = r5;
0x00010cfc bl 0x10b30 | exit (r0);
| label_14:
0x00010d00 ldr r2, [pc, 0x3b8] | r2 = "-d, --devn=<UBI device number> UBI device number to get information about\n-n, --vol_id=<volume ID> ID of UBI volume to print information about\n-N, --name=<volume name> name of UBI volume to print information about\n-a, --all print information about all devices and volumes,\n or about all volumes if the UBI device was\n specified\n-h, --help print help message\n-V, --version print program version";
0x00010d04 ldr r1, [pc, 0x390] | r1 = stderr;
0x00010d08 ldr r0, [pc, 0x3b4] | r0 = "2.1.0";
0x00010d0c bl 0x109c8 | printf ("2.1.0", r1, "-d, --devn=<UBI device number> UBI device number to get information about\n-n, --vol_id=<volume ID> ID of UBI volume to print information about\n-N, --name=<volume name> name of UBI volume to print information about\n-a, --all print information about all devices and volumes,\n or about all volumes if the UBI device was\n specified\n-h, --help print help message\n-V, --version print program version")
0x00010d10 b 0x10cf8 |
| } while (1);
| label_15:
0x00010d14 ldr r3, [pc, 0x37c] | r3 = *(0x11094);
0x00010d18 ldr r0, [pc, 0x3a8] | r0 = "%s (mtd-utils) %s\n";
0x00010d1c ldr r1, [r3] | r1 = *(0x11094);
0x00010d20 bl 0x10b48 | fputs ("%s (mtd-utils) %s\n", r1);
0x00010d24 b 0x10cb8 | goto label_1;
| label_11:
0x00010d28 ldr r3, [pc, 0x39c] |
0x00010d2c sub r2, r7, 1 | r2 = r7 - 1;
0x00010d30 ldr r3, [r3] | r3 = "Use__h_for_help";
0x00010d34 cmp r2, r3 |
| if (r2 != r3) {
0x00010d38 bne 0x10d78 | goto label_19;
| }
0x00010d3c ldr r2, [r8, r2, lsl 2] | offset_0 = r2 << 2;
| r2 = *((r8 + offset_0));
0x00010d40 ldr r3, [pc, 0x34c] | r3 = "an:N:d:hV";
0x00010d44 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
| do {
0x00010d48 bl 0x124ec | r0 = fcn_000124ec ();
0x00010d4c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 != r0) {
0x00010d50 bne 0x10dcc | goto label_20;
| }
0x00010d54 bl 0x10b24 | errno_location ();
0x00010d58 ldr r6, [pc, 0x338] | r6 = *(0x11094);
0x00010d5c ldr r2, [pc, 0x338] | r2 = stderr;
0x00010d60 ldr r5, [r0] | r5 = *(r0);
0x00010d64 ldr r0, [r6] | r0 = *(0x11094);
0x00010d68 cmp r5, 0 |
| if (r5 != 0) {
0x00010d6c bne 0x10d98 | goto label_21;
| }
0x00010d70 ldr r1, [pc, 0x358] | r1 = optind;
0x00010d74 b 0x10d90 | goto label_22;
| label_19:
0x00010d78 cmp r7, r3 |
0x00010d7c ble 0x10d48 |
| } while (r7 <= r3);
0x00010d80 ldr r3, [pc, 0x310] | r3 = *(0x11094);
0x00010d84 ldr r2, [pc, 0x310] | r2 = stderr;
0x00010d88 ldr r1, [pc, 0x344] | r1 = "%s: error!: UBI is not present in the system\n";
0x00010d8c ldr r0, [r3] | r0 = *(0x11094);
| label_22:
0x00010d90 bl 0x10a64 | fprintf (r0, "%s: error!: UBI is not present in the system\n", r2, r3)
0x00010d94 b 0x10cbc | goto label_2;
| label_21:
0x00010d98 ldr r1, [pc, 0x338] | r1 = "%s: error!: more then one UBI device specified (use -h for help)\n";
0x00010d9c bl 0x10a64 | fprintf (r0, "%s: error!: more then one UBI device specified (use -h for help)\n")
0x00010da0 mov r0, r5 | r0 = r5;
0x00010da4 ldr r6, [r6] | r6 = *(r6);
0x00010da8 bl 0x109d4 | strerror (r0);
0x00010dac str r5, [sp] | *(sp) = r5;
0x00010db0 ldr r3, [pc, 0x324] | r3 = "%s: error!: cannot open libubi\n";
0x00010db4 mov r2, 8 | r2 = 8;
0x00010db8 ldr r1, [pc, 0x320] | r1 = *(0x110dc);
0x00010dbc str r0, [sp, 4] | var_4h = r0;
0x00010dc0 mov r0, r6 | r0 = r6;
0x00010dc4 bl 0x10a64 | fprintf (r0, r1, r2, "%s: error!: cannot open libubi\n", r4, r5)
0x00010dc8 b 0x10cbc | goto label_2;
| label_20:
0x00010dcc ldr r5, [pc, 0x2c0] | r5 = "an:N:d:hV";
0x00010dd0 ldr r1, [r5, 0xc] | r1 = "ubinfo";
0x00010dd4 cmp r1, 0 |
0x00010dd8 bne 0x10e08 |
| while (r0 == 0) {
0x00010ddc ldr r7, [r5, 0x10] | r7 = *((r5 + 0x10));
0x00010de0 cmp r7, 0 |
| if (r7 != 0) {
0x00010de4 bne 0x10e20 | goto label_23;
| }
| label_3:
0x00010de8 ldm r5, {r1, r2} | r1 = *(r5);
| r2 = *((r5 + 4));
0x00010dec cmn r2, 1 |
| if (r2 == 1) {
0x00010df0 beq 0x1106c | goto label_24;
| }
0x00010df4 cmn r1, 1 |
| if (r1 != 1) {
0x00010df8 bne 0x10eb8 | goto label_25;
| }
0x00010dfc ldr r2, [pc, 0x298] | r2 = stderr;
0x00010e00 ldr r1, [pc, 0x2dc] | r1 = "_serror__d___s_";
0x00010e04 b 0x10e34 | goto label_26;
0x00010e08 bl 0x11230 | r0 = fcn_00011230 (r0, r1);
0x00010e0c cmp r0, 0 |
0x00010e10 beq 0x10ddc |
| }
| do {
| label_4:
0x00010e14 mov r0, r6 | r0 = r6;
0x00010e18 bl 0x12418 | fcn_00012418 (r0);
0x00010e1c b 0x10cbc | goto label_2;
| label_23:
0x00010e20 ldr r8, [r5] | r8 = *(r5);
0x00010e24 cmn r8, 1 |
| if (r8 != 1) {
0x00010e28 bne 0x10e44 | goto label_27;
| }
0x00010e2c ldr r2, [pc, 0x268] | r2 = stderr;
0x00010e30 ldr r1, [pc, 0x2b0] | r1 = "_s:_error_:_volume_ID_is_specified__but_UBI_device_number_is_not__use__h_for_help_";
| label_26:
0x00010e34 ldr r3, [pc, 0x25c] | r3 = *(0x11094);
0x00010e38 ldr r0, [r3] | r0 = *(0x11094);
0x00010e3c bl 0x10a64 | fprintf (r0, "_s:_error_:_volume_ID_is_specified__but_UBI_device_number_is_not__use__h_for_help_", r2, r3)
0x00010e40 b 0x10e14 |
| } while (1);
| label_27:
0x00010e44 add r3, sp, 0x20 | r3 += var_20h;
0x00010e48 mov r2, r7 | r2 = r7;
0x00010e4c mov r1, r8 | r1 = r8;
0x00010e50 mov r0, r6 | r0 = r6;
0x00010e54 bl 0x13d6c | r0 = fcn_00013d6c (r0, r1);
0x00010e58 cmp r0, 0 |
| if (r0 != 0) {
0x00010e5c ldreq r3, [sp, 0x24] | r3 = var_24h;
| }
| if (r0 == 0) {
0x00010e60 streq r3, [r5, 4] | *((r5 + 4)) = r3;
| goto label_28;
| }
| if (r0 == 0) {
| label_28:
0x00010e64 beq 0x10de8 | goto label_3;
| }
0x00010e68 bl 0x10b24 | errno_location ();
0x00010e6c ldr sb, [pc, 0x224] | sb = obj.stderr;
0x00010e70 mov r3, r7 | r3 = r7;
0x00010e74 ldr r2, [pc, 0x220] | r2 = stderr;
0x00010e78 ldr r1, [pc, 0x26c] | r1 = "%s: error!: volume name is specified, but UBI device number is not (use -h for help)\n\n";
0x00010e7c ldr r5, [r0] | r5 = *(r0);
0x00010e80 str r8, [sp] | *(sp) = r8;
0x00010e84 ldr r0, [sb] | r0 = *(sb);
0x00010e88 bl 0x10a64 | fprintf (r0, "%s: error!: volume name is specified, but UBI device number is not (use -h for help)\n\n", r2, r3, r4, r5)
0x00010e8c ldr r7, [sb] | r7 = *(sb);
| do {
0x00010e90 mov r0, r5 | r0 = r5;
0x00010e94 bl 0x109d4 | strerror (r0);
0x00010e98 str r5, [sp] | *(sp) = r5;
0x00010e9c ldr r3, [pc, 0x238] | r3 = "%s: error!: cannot open libubi\n";
0x00010ea0 mov r2, 8 | r2 = 8;
0x00010ea4 ldr r1, [pc, 0x234] | r1 = *(0x110dc);
0x00010ea8 str r0, [sp, 4] | var_4h = r0;
0x00010eac mov r0, r7 | r0 = r7;
0x00010eb0 bl 0x10a64 | fprintf (r0, r1, r2, "%s: error!: cannot open libubi\n", r4, r5)
0x00010eb4 b 0x10e14 | goto label_4;
| label_25:
0x00010eb8 mov r0, r6 | r0 = r6;
0x00010ebc bl 0x113cc | fcn_000113cc (r0);
| label_5:
0x00010ec0 mov r0, r6 | r0 = r6;
0x00010ec4 bl 0x12418 | fcn_00012418 (r0);
0x00010ec8 mov r4, 0 | r4 = 0;
0x00010ecc b 0x10cbc | goto label_2;
| label_10:
0x00010ed0 add r1, sp, 8 | r1 += var_8h;
0x00010ed4 mov r0, r6 | r0 = r6;
0x00010ed8 ldr sb, [r5, 8] | sb = *((r5 + 8));
0x00010edc bl 0x129a8 | r0 = fcn_000129a8 (r0, r1);
0x00010ee0 cmp r0, 0 |
| if (r0 == 0) {
0x00010ee4 beq 0x10f0c | goto label_29;
| }
0x00010ee8 bl 0x10b24 | errno_location ();
0x00010eec ldr r7, [pc, 0x1a4] | r7 = *(0x11094);
0x00010ef0 ldr r2, [pc, 0x1a4] | r2 = stderr;
0x00010ef4 ldr r1, [pc, 0x1f4] | r1 = "_s:_error_:_cannot_get_information_about_volume___s__on_ubi_d";
0x00010ef8 ldr r5, [r0] | r5 = *(r0);
0x00010efc ldr r0, [r7] | r0 = *(0x11094);
0x00010f00 bl 0x10a64 | fprintf (r0, "_s:_error_:_cannot_get_information_about_volume___s__on_ubi_d", r2, r3, r4, r5)
| label_8:
0x00010f04 ldr r7, [r7] | r7 = *(r7);
0x00010f08 b 0x10e90 |
| } while (1);
| label_29:
0x00010f0c ldr r1, [sp, 0x14] | r1 = var_14h;
0x00010f10 ldr r0, [pc, 0x1dc] | r0 = "%s: error!: cannot get UBI information\n";
0x00010f14 bl 0x109c8 | printf ("%s: error!: cannot get UBI information\n", r1)
0x00010f18 ldr r1, [sp, 8] | r1 = var_8h;
0x00010f1c ldr r0, [pc, 0x1d4] | r0 = "UBI version: %d\n";
0x00010f20 bl 0x109c8 | printf ("UBI version: %d\n", r1)
0x00010f24 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00010f28 cmn r1, 1 |
| if (r1 == 1) {
0x00010f2c beq 0x10fe0 | goto label_30;
| }
0x00010f30 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00010f34 ldr r0, [pc, 0x1c0] | r0 = "Count of UBI devices: %d\n";
0x00010f38 bl 0x109c8 | printf ("Count of UBI devices: %d\n", r1, r2)
| label_7:
0x00010f3c ldr r3, [sp, 8] | r3 = var_8h;
0x00010f40 cmp r3, 0 |
| if (r3 == 0) {
0x00010f44 beq 0x10ec0 | goto label_5;
| }
0x00010f48 ldr r0, [pc, 0x1b0] | r0 = "UBI control device major/minor: %d:%d\n";
0x00010f4c bl 0x109c8 | printf ("UBI control device major/minor: %d:%d\n")
0x00010f50 ldr sl, [pc, 0x1ac] | sl = "Present UBI devices: ";
0x00010f54 ldr r8, [sp, 0xc] | r8 = var_ch;
0x00010f58 ldr fp, [pc, 0x1a8] | fp = "__ubi_d";
0x00010f5c mov r7, 1 | r7 = 1;
| label_9:
0x00010f60 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00010f64 cmp r8, r3 |
| if (r8 <= r3) {
0x00010f68 ble 0x10fec | goto label_31;
| }
0x00010f6c mov r0, 0xa | r0 = 0xa;
0x00010f70 bl 0x109b0 | putchar (r0);
0x00010f74 cmp sb, 0 |
| if (sb == 0) {
0x00010f78 beq 0x10ec0 | goto label_5;
| }
0x00010f7c mov r0, 0xa | r0 = 0xa;
0x00010f80 bl 0x109b0 | putchar (r0);
0x00010f84 ldr r8, [pc, 0x180] | r8 = "__ubi_d";
0x00010f88 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00010f8c mov r7, 1 | r7 = 1;
| label_6:
0x00010f90 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00010f94 cmp r5, r3 |
| if (r5 > r3) {
0x00010f98 bgt 0x10ec0 | goto label_5;
| }
0x00010f9c mov r1, r5 | r1 = r5;
0x00010fa0 mov r0, r6 | r0 = r6;
0x00010fa4 bl 0x132e0 | r0 = fcn_000132e0 (r0, r1);
0x00010fa8 cmp r0, 0 |
| if (r0 == 0) {
0x00010fac beq 0x10fd8 | goto label_32;
| }
0x00010fb0 cmp r7, 0 |
| if (r7 == 0) {
0x00010fb4 bne 0x10fc0 |
0x00010fb8 mov r0, r8 | r0 = r8;
0x00010fbc bl 0x10a1c | puts (r0);
| }
0x00010fc0 mov r2, sb | r2 = sb;
0x00010fc4 mov r1, r5 | r1 = r5;
0x00010fc8 mov r0, r6 | r0 = r6;
0x00010fcc bl 0x11554 | r0 = fcn_00011554 (r0, r1);
0x00010fd0 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 != r0) {
0x00010fd4 bne 0x10e14 | goto label_4;
| }
| label_32:
0x00010fd8 add r5, r5, 1 | r5++;
0x00010fdc b 0x10f90 | goto label_6;
| label_30:
0x00010fe0 ldr r0, [pc, 0x128] | r0 = "_";
0x00010fe4 bl 0x10a1c | puts ("_");
0x00010fe8 b 0x10f3c | goto label_7;
| label_31:
0x00010fec add r2, sp, 0x20 | r2 += var_20h;
0x00010ff0 mov r1, r8 | r1 = r8;
0x00010ff4 mov r0, r6 | r0 = r6;
0x00010ff8 bl 0x13334 | r0 = fcn_00013334 (r0, r1);
0x00010ffc cmn r0, 1 |
| if (r0 == 1) {
0x00011000 bne 0x11040 |
0x00011004 bl 0x10b24 | r0 = errno_location ();
0x00011008 ldr r3, [r0] | r3 = *(r0);
0x0001100c mov r5, r0 | r5 = r0;
0x00011010 cmp r3, 2 |
| if (r3 == 2) {
0x00011014 beq 0x11054 | goto label_33;
| }
0x00011018 ldr r7, [pc, 0x78] | r7 = *(0x11094);
0x0001101c mov r0, 0xa | r0 = 0xa;
0x00011020 bl 0x109b0 | putchar (r0);
0x00011024 mov r3, r8 | r3 = r8;
0x00011028 ldr r2, [pc, 0x6c] | r2 = stderr;
0x0001102c ldr r1, [pc, 0xe0] | r1 = "UBI_control_device_is_not_supported_by_this_kernel";
0x00011030 ldr r0, [r7] | r0 = *(0x11094);
0x00011034 ldr r5, [r5] | r5 = *(r5);
0x00011038 bl 0x10a64 | fprintf (r0, "UBI_control_device_is_not_supported_by_this_kernel", r2, r3, r4, r5)
0x0001103c b 0x10f04 | goto label_8;
| }
0x00011040 cmp r7, 0 |
0x00011044 mov r1, r8 | r1 = r8;
| if (r7 != 0) {
0x00011048 bne 0x1105c | goto label_34;
| }
0x0001104c mov r0, fp | r0 = fp;
0x00011050 bl 0x109c8 | printf (r0)
| do {
| label_33:
0x00011054 add r8, r8, 1 | r8++;
0x00011058 b 0x10f60 | goto label_9;
| label_34:
0x0001105c mov r0, sl | r0 = sl;
0x00011060 bl 0x109c8 | printf (r0)
0x00011064 mov r7, 0 | r7 = 0;
0x00011068 b 0x11054 |
| } while (1);
| label_24:
0x0001106c cmn r1, 1 |
| if (r1 == 1) {
0x00011070 beq 0x10ed0 | goto label_10;
| }
0x00011074 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00011078 mov r0, r6 | r0 = r6;
0x0001107c bl 0x11554 | r0 = fcn_00011554 (r0, r1);
0x00011080 cmp r0, 0 |
| if (r0 == 0) {
0x00011084 beq 0x10ec0 | goto label_5;
| }
0x00011088 b 0x10e14 | goto label_4;
| }
[*] Function printf used 51 times ubinfo