[*] Binary protection state of bootblocktool
Full RELRO No Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of bootblocktool
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/bootblocktool @ 0xc04 */
| #include <stdint.h>
|
; (fcn) fcn.00000c04 () | void fcn_00000c04 (int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_1ch) {
| int16_t var_0h;
| label_17:
0x00000748 vadd.i32 d18, d12, d0 | __asm ("vadd.i32 d18, d12, d0");
| if (? != ?) {
0x0000074c bne.w 0xafe | goto label_18;
| }
0x00000750 ldr r3, [pc, 0x3fc] |
0x00000752 movs r2, 1 | r2 = 1;
0x00000754 sub.w r6, r8, 2 | r6 = r8 - 2;
0x00000758 add r3, pc | r3 = 0x12ac;
0x0000075a strb r2, [r3, 4] | *((r3 + 4)) = r2;
0x0000075c cmp r7, 0 |
| if (r7 == 0) {
0x0000075e beq 0x846 | goto label_19;
| }
| label_12:
0x00000760 ldr r3, [pc, 0x3f0] |
0x00000762 add r3, pc | r3 = 0x12ba;
0x00000764 str r3, [sp, 0x10] | *(arg_10h) = r3;
0x00000766 ldr r3, [pc, 0x3f0] |
0x00000768 add r3, pc | r3 = 0x12c6;
0x0000076a str r3, [sp, 0x14] | *(arg_14h) = r3;
0x0000076c ldr r3, [pc, 0x3ec] |
0x0000076e add r3, pc | r3 = 0x12ce;
0x00000770 str r3, [sp, 8] | *(arg_8h) = r3;
0x00000772 ldr r3, [pc, 0x3ec] |
0x00000774 add r3, pc | r3 = 0x12da;
0x00000776 str r3, [sp, 0xc] | *(arg_ch) = r3;
| label_1:
0x00000778 mov r8, r5 | r8 = r5;
0x0000077a ldr r4, [r8], 4 | r4 = *(r8);
| r8 += 4;
0x0000077e ldrb.w sl, [r4] | sl = *(r4);
0x00000782 cmp.w sl, 0x2d |
| if (sl != 0x2d) {
0x00000786 bne.w 0x88e | goto label_20;
| }
0x0000078a ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0000078c cmp r3, 0x68 |
| if (r3 == 0x68) {
0x0000078e bne 0x798 |
0x00000790 ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x00000792 cmp r3, 0 |
| if (r3 == 0) {
0x00000794 beq.w 0xaec | goto label_21;
| }
| }
0x00000798 cmp.w sl, 0x2d |
| if (sl != 0x2d) {
0x0000079c bne 0x88e | goto label_20;
| }
0x0000079e ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000007a0 cmp r3, 0x78 |
| if (r3 == 0x78) {
0x000007a2 beq.w 0x8da | goto label_22;
| }
| label_4:
0x000007a6 cmp.w sl, 0x2d |
| if (sl != 0x2d) {
0x000007aa bne 0x88e | goto label_20;
| }
0x000007ac ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000007ae cmp r3, 0x6c |
| if (r3 != 0x6c) {
0x000007b0 bne 0x88e | goto label_20;
| }
0x000007b2 ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x000007b4 cmp r3, 0 |
| if (r3 != 0) {
0x000007b6 bne 0x88e | goto label_20;
| }
| label_3:
0x000007b8 ldrb r5, [r4, 2] | r5 = *((r4 + 2));
0x000007ba blx 0x6d4 | r0 = bootblock_get_all ();
0x000007be mov r7, r0 | r7 = r0;
0x000007c0 cmp r0, 0 |
| if (r0 == 0) {
0x000007c2 beq.w 0xb26 | goto label_23;
| }
0x000007c6 ldr r2, [r0] | r2 = *(r0);
0x000007c8 mov.w sb, 0 | sb = 0;
0x000007cc ldrd r4, sl, [sp, 0x10] | __asm ("ldrd r4, sl, [arg_10h]");
| if (r2 != 0) {
0x000007d0 cbnz r2, 0x7ee | goto label_0;
| }
0x000007d2 b 0x812 | goto label_24;
| do {
0x000007d4 cmp r5, 0x61 |
| if (r5 == 0x61) {
0x000007d6 bne 0x7e4 |
0x000007d8 ldr r1, [pc, 0x388] |
0x000007da mov r3, r0 | r3 = r0;
0x000007dc movs r0, 1 | r0 = 1;
0x000007de add r1, pc | r1 = 0x1346;
0x000007e0 blx 0x6bc | printf_chk ();
| }
| label_2:
0x000007e4 ldr r2, [r7, 8]! | r2 = *((r7 += 8));
0x000007e8 add.w sb, sb, 1 | sb++;
| if (r2 == 0) {
0x000007ec cbz r2, 0x812 | goto label_24;
| }
| label_0:
0x000007ee cmp r5, 0x65 |
0x000007f0 ldr r0, [r7, 4] | r0 = *((r7 + 4));
| if (r5 == 0x65) {
0x000007f2 beq 0x882 | goto label_25;
| }
| if (r5 > 0x65) {
0x000007f4 bhi 0x862 | goto label_26;
| }
0x000007f6 cmp r5, 0 |
0x000007f8 bne 0x7d4 |
| } while (r5 != 0);
0x000007fa ldr r1, [pc, 0x36c] |
0x000007fc mov r3, r0 | r3 = r0;
0x000007fe movs r0, 1 | r0 = 1;
0x00000800 add.w sb, sb, 1 | sb++;
0x00000804 add r1, pc | r1 = 0x1372;
0x00000806 blx 0x6bc | printf_chk ();
0x0000080a ldr r2, [r7, 8]! | r2 = *((r7 += 8));
0x0000080e cmp r2, 0 |
| if (r2 != 0) {
0x00000810 bne 0x7ee | goto label_0;
| }
| label_24:
0x00000812 cmp r5, 0x77 |
0x00000814 it ne |
| if (r5 != 0x77) {
0x00000816 cmpne r5, 0x61 | __asm ("cmpne r5, 0x61");
| }
| if (r5 == 0x77) {
0x00000818 beq.w 0x926 | goto label_27;
| }
0x0000081c mov r5, r8 | r5 = r8;
0x0000081e mov r7, r6 | r7 = r6;
| label_8:
0x00000820 cmp r7, 0 |
0x00000822 add.w r6, r7, -1 | r6 = r7 + -1;
| if (r7 > 0) {
0x00000826 bgt 0x778 | goto label_1;
| }
| label_5:
0x00000828 ldr r3, [pc, 0x340] |
0x0000082a add r3, pc | r3 = 0x139a;
0x0000082c ldrb r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x0000082e cbz r0, 0x832 |
0x00000830 ldr r0, [r3] | r0 = *(r3);
| }
0x00000832 add sp, 0x24 |
0x00000834 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x00000846 ldr r0, [pc, 0x328] |
0x00000848 ldr r3, [pc, 0x328] | r3 = *(0xb74);
0x0000084a add r0, pc | r0 = 0x13c0;
| label_15:
0x0000084c movw r2, 0x247 | r2 = 0x247;
| label_16:
0x00000850 ldr r4, [sp, 0x18] | r4 = *(arg_18h);
0x00000852 movs r1, 1 | r1 = 1;
0x00000854 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00000856 ldr r3, [r3] | r3 = *(r3);
0x00000858 blx 0x650 | fwrite (r0, r1, r2, r3);
0x0000085c movs r0, 1 | r0 = 1;
0x0000085e blx 0x68c | exit (r0);
| label_26:
0x00000862 cmp r5, 0x77 |
| if (r5 != 0x77) {
0x00000864 bne 0x7e4 | goto label_2;
| }
0x00000866 mov r3, r2 | r3 = r2;
0x00000868 ldrd r2, r1, [sp, 8] | __asm ("ldrd r2, r1, [arg_8h]");
0x0000086c cmp.w sb, 0 |
0x0000086e lsrs r0, r0, 0x1c | r0 >>= 0x1c;
0x00000870 str r0, [sp] | *(sp) = r0;
0x00000872 mov.w r0, 1 | r0 = 1;
0x00000876 it eq |
| if (r0 != r0) {
0x00000878 moveq r2, r1 | r2 = r1;
| }
0x0000087a mov r1, sl | r1 = sl;
0x0000087c blx 0x6bc | printf_chk ();
0x00000880 b 0x7e4 | goto label_2;
| label_25:
0x00000882 mov r3, r0 | r3 = r0;
0x00000884 mov r1, r4 | r1 = r4;
0x00000886 movs r0, 1 | r0 = 1;
0x00000888 blx 0x6bc | printf_chk ();
0x0000088c b 0x7e4 | goto label_2;
| label_20:
0x0000088e ldr r1, [pc, 0x2e8] |
0x00000890 mov r0, r4 | r0 = r4;
0x00000892 add r1, pc | r1 = 0x1410;
0x00000894 blx 0x620 | r0 = strcmp (r0, r1);
0x00000898 cmp r0, 0 |
| if (r0 == 0) {
0x0000089a beq 0x7b8 | goto label_3;
| }
0x0000089c ldr r1, [pc, 0x2dc] |
0x0000089e mov r0, r4 | r0 = r4;
0x000008a0 add r1, pc | r1 = 0x1420;
0x000008a2 blx 0x620 | r0 = strcmp (r0, r1);
0x000008a6 cmp r0, 0 |
| if (r0 == 0) {
0x000008a8 beq 0x7b8 | goto label_3;
| }
0x000008aa ldr r1, [pc, 0x2d4] |
0x000008ac mov r0, r4 | r0 = r4;
0x000008ae add r1, pc | r1 = 0x1434;
0x000008b0 blx 0x620 | r0 = strcmp (r0, r1);
0x000008b4 cmp r0, 0 |
| if (r0 == 0) {
0x000008b6 beq.w 0x7b8 | goto label_3;
| }
0x000008ba cmp.w sl, 0x2d |
| if (sl == 0x2d) {
0x000008be beq 0x932 | goto label_28;
| }
| label_9:
0x000008c0 ldr r2, [pc, 0x2c0] |
0x000008c2 ldr r0, [pc, 0x2b0] | r0 = *(0xb76);
0x000008c4 add r2, pc | r2 = 0x144c;
| label_13:
0x000008c6 mov r3, r4 | r3 = r4;
| label_14:
0x000008c8 ldr r4, [sp, 0x18] | r4 = *(arg_18h);
0x000008ca movs r1, 1 | r1 = 1;
0x000008cc ldr r0, [r4, r0] | r0 = *((r4 + r0));
0x000008ce ldr r0, [r0] | r0 = *(r0);
0x000008d0 blx 0x6c8 | fprintf_chk ()
0x000008d4 movs r0, 1 | r0 = 1;
0x000008d6 blx 0x68c | exit (r0);
| label_22:
0x000008da ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x000008dc cmp r3, 0 |
| if (r3 != 0) {
0x000008de bne.w 0x7a6 | goto label_4;
| }
0x000008e2 cmp r6, 0 |
| if (r6 <= 0) {
0x000008e4 ble.w 0xb1e | goto label_29;
| }
0x000008e8 ldr r7, [pc, 0x29c] |
0x000008ea mov.w r8, 1 | r8 = 1;
0x000008ee ldr r4, [pc, 0x29c] |
0x000008f0 ldr.w sb, [sp, 0x18] | sb = *(arg_18h);
0x000008f4 add r7, pc | r7 = 0x1480;
0x000008f6 add r4, pc | r4 = 0x1488;
0x000008f8 b 0x902 | goto label_30;
| label_6:
0x000008fa blx 0x65c | puts (r0);
| label_7:
0x000008fe subs r6, 1 | r6--;
| if (r6 == 1) {
0x00000900 beq 0x828 | goto label_5;
| }
| label_30:
0x00000902 ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x00000906 blx 0x644 | r0 = bootblock_get ();
0x0000090a cmp r0, 0 |
| if (r0 != 0) {
0x0000090c bne 0x8fa | goto label_6;
| }
0x0000090e ldr r0, [pc, 0x264] |
0x00000910 mov r2, r7 | r2 = r7;
0x00000912 ldr r3, [r5] | r3 = *(r5);
0x00000914 movs r1, 1 | r1 = 1;
0x00000916 ldr.w r0, [sb, r0] | r0 = *((sb + r0));
0x0000091a ldr r0, [r0] | r0 = *(0xb76);
0x0000091c blx 0x6c8 | fprintf_chk ()
0x00000920 str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x00000922 strh r0, [r0] | *(r0) = r0;
0x00000924 b 0x8fe | goto label_7;
| label_27:
0x00000926 movs r0, 0xa | r0 = 0xa;
0x00000928 mov r5, r8 | r5 = r8;
0x0000092a mov r7, r6 | r7 = r6;
0x0000092c blx 0x6b0 | putchar (r0);
0x00000930 b 0x820 | goto label_8;
| label_28:
0x00000932 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00000934 cmp r3, 0x61 |
| if (r3 != 0x61) {
0x00000936 bne 0x9a4 | goto label_31;
| }
0x00000938 ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x0000093a str r2, [sp, 0x1c] | *(arg_1ch) = r2;
| if (r2 != 0) {
0x0000093c cbnz r2, 0x9a4 | goto label_31;
| }
0x0000093e cmp r6, 0 |
| if (r6 <= 0) {
0x00000940 ble.w 0xb1e | goto label_29;
| }
0x00000944 asrs r0, r6, 1 | r0 = r6 >> 1;
0x00000946 adds r0, 1 | r0++;
0x00000948 lsls r0, r0, 3 | r0 <<= 3;
0x0000094a blx 0x668 | r0 = malloc (r0);
0x0000094e mov sb, r0 | sb = r0;
0x00000950 cmp r0, 0 |
| if (r0 == 0) {
0x00000952 beq.w 0xb30 | goto label_32;
| }
0x00000956 cmp r6, 1 |
0x00000958 ldr r2, [sp, 0x1c] | r2 = *(arg_1ch);
0x0000095a itt eq |
| if (r6 != 1) {
0x0000095c moveq r5, r8 | r5 = r8;
| }
| if (r6 != 1) {
0x0000095e moveq r7, r6 | r7 = r6;
| }
| if (r6 == 1) {
0x00000960 beq 0x990 | goto label_33;
| }
0x00000962 add.w r1, r5, 0xc | r1 = r5 + 0xc;
0x00000966 mov r7, r6 | r7 = r6;
0x00000968 add.w ip, r0, 4 |
| do {
0x0000096c ldrd r3, r0, [r1, -0x8] | __asm ("ldrd r3, r0, [r1, -0x8]");
0x00000970 mov r5, r1 | r5 = r1;
0x00000972 ldrb r4, [r0] | r4 = *(r0);
0x00000974 cmp r4, 0 |
| if (r4 == 0) {
0x00000976 beq.w 0xb16 | goto label_34;
| }
0x0000097a subs r7, 2 | r7 -= 2;
0x0000097c str.w r3, [sb, r2, lsl 3] | __asm ("str.w r3, [sb, r2, lsl 3]");
0x00000980 cmp r7, 1 |
0x00000982 str.w r0, [ip, r2, lsl 3] | __asm ("str.w r0, [ip, r2, lsl 3]");
0x00000986 add.w r1, r1, 8 | r1 += 8;
0x0000098a add.w r2, r2, 1 | r2++;
0x0000098e bgt 0x96c |
| } while (r7 > 1);
| label_33:
0x00000990 movs r3, 0 | r3 = 0;
0x00000992 mov r0, sb | r0 = sb;
0x00000994 str.w r3, [sb, r2, lsl 3] | __asm ("str.w r3, [sb, r2, lsl 3]");
0x00000998 bl 0xccc | fcn_00000ccc ();
0x0000099c mov r0, sb | r0 = sb;
0x0000099e blx 0x638 | free (r0);
0x000009a2 b 0x820 | goto label_8;
| label_31:
0x000009a4 cmp.w sl, 0x2d |
| if (sl != 0x2d) {
0x000009a8 bne 0x8c0 | goto label_9;
| }
0x000009aa ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000009ac cmp r3, 0x63 |
| if (r3 == 0x63) {
0x000009ae beq 0xa72 | goto label_35;
| }
| label_10:
0x000009b0 cmp.w sl, 0x2d |
| if (sl != 0x2d) {
0x000009b4 bne 0x8c0 | goto label_9;
| }
0x000009b6 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000009b8 cmp r3, 0x77 |
| if (r3 != 0x77) {
0x000009ba bne 0x8c0 | goto label_9;
| }
0x000009bc ldrb.w r8, [r4, 2] | r8 = *((r4 + 2));
0x000009c0 cmp.w r8, 0 |
| if (r8 != 0) {
0x000009c4 bne.w 0x8c0 | goto label_9;
| }
0x000009c8 cmp r6, 0 |
| if (r6 <= 0) {
0x000009ca ble.w 0xb1e | goto label_29;
| }
0x000009ce ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x000009d0 mov r0, r6 | r0 = r6;
0x000009d2 blx 0x698 | strlen (r0);
0x000009d6 subs r3, r6, 1 | r3 = r6 - 1;
0x000009d8 adds r1, r3, r0 | r1 = r3 + r0;
0x000009da movs r0, 2 | r0 = 2;
0x000009dc b 0x9e8 |
| while (r3 != r1) {
0x000009de ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000009e2 cmp r2, 0x3a |
0x000009e4 it eq |
| if (r2 != 0x3a) {
0x000009e6 addeq r0, 1 | r0++;
| }
0x000009e8 cmp r3, r1 |
0x000009ea bne 0x9de |
| }
0x000009ec lsls r0, r0, 3 | r0 <<= 3;
0x000009ee blx 0x668 | malloc (r0);
0x000009f0 cdp p0, 3, c9, c12, c7, 0 | __asm ("cdp p0, 3, c9, c12, c7, 0");
0x000009f4 cmp r0, 0 |
| if (r0 == 0) {
0x000009f6 beq.w 0xb3a | goto label_36;
| }
0x000009fa ldr r1, [pc, 0x194] |
0x000009fc mov r0, r6 | r0 = r6;
0x000009fe add r1, pc | r1 = 0x1594;
0x00000a00 blx 0x6e0 | r0 = strtok (r0, r1);
0x00000a04 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00000a06 cbz r0, 0xa58 | goto label_37;
| }
0x00000a08 ldr.w sl, [pc, 0x188] |
0x00000a0c ldr.w sb, [pc, 0x188] |
0x00000a10 ldr r3, [sp, 0x1c] | r3 = *(arg_1ch);
0x00000a12 add sl, pc | sl = 0x15aa;
0x00000a14 add sb, pc | sb = 0x15b0;
0x00000a16 adds r6, r3, 4 | r6 = r3 + 4;
| do {
0x00000a18 movs r1, 0x3d | r1 = 0x3d;
0x00000a1a mov r0, r4 | r0 = r4;
0x00000a1c blx 0x6a4 | r0 = strchr (r0, r1);
0x00000a20 cmp r0, 0 |
| if (r0 == 0) {
0x00000a22 beq 0xb06 | goto label_38;
| }
0x00000a24 mov r3, r0 | r3 = r0;
0x00000a26 mov.w fp, 0 |
0x00000a2a strb fp, [r3], 1 | *(r3) = fp;
| r3++;
0x00000a2e ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x00000a30 cmp r2, 0 |
| if (r2 == 0) {
0x00000a32 beq 0xb0e | goto label_39;
| }
0x00000a34 mov r2, r4 | r2 = r4;
0x00000a36 str r4, [r6, -0x4] | *((r6 - 0x4)) = r4;
0x00000a3a mov r1, sl | r1 = sl;
0x00000a3c str r3, [r6], 8 | *(r6) = r3;
| r6 += 8;
0x00000a40 movs r0, 1 | r0 = 1;
0x00000a42 add.w r8, r8, 1 | r8++;
0x00000a46 blx 0x6bc | printf_chk ();
0x00000a4a mov r0, fp | r0 = fp;
0x00000a4c mov r1, sb | r1 = sb;
0x00000a4e blx 0x6e0 | r0 = strtok (r0, r1);
0x00000a52 mov r4, r0 | r4 = r0;
0x00000a54 cmp r0, 0 |
0x00000a56 bne 0xa18 |
| } while (r0 != 0);
| label_37:
0x00000a58 ldr r4, [sp, 0x1c] | r4 = *(arg_1ch);
0x00000a5a movs r3, 0 | r3 = 0;
0x00000a5c subs r7, 2 | r7 -= 2;
0x00000a5e adds r5, 8 | r5 += 8;
0x00000a60 mov r0, r4 | r0 = r4;
0x00000a62 str.w r3, [r4, r8, lsl 3] | __asm ("str.w r3, [r4, r8, lsl 3]");
0x00000a66 bl 0xccc | fcn_00000ccc ();
0x00000a6a mov r0, r4 | r0 = r4;
0x00000a6c blx 0x638 | free (r0);
0x00000a70 b 0x820 | goto label_8;
| label_35:
0x00000a72 ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x00000a74 cmp r3, 0 |
| if (r3 != 0) {
0x00000a76 bne 0x9b0 | goto label_10;
| }
0x00000a78 cmp r6, 0 |
| if (r6 <= 0) {
0x00000a7a ble 0xb1e | goto label_29;
| }
0x00000a7c ldr r1, [pc, 0x11c] |
0x00000a7e ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00000a80 add r1, pc | r1 = 0x1620;
0x00000a82 blx 0x6e0 | r0 = strtok (r0, r1);
0x00000a86 mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x00000a88 cbz r0, 0xae6 | goto label_40;
| }
0x00000a8a ldr.w sb, [pc, 0x114] |
0x00000a8e ldr.w r8, [pc, 0x114] | r8 = *(0x00000ba4);
0x00000a92 ldr r6, [pc, 0x114] |
0x00000a94 ldr r4, [sp, 0x18] | r4 = *(arg_18h);
0x00000a96 add sb, pc | sb = 0x163c;
0x00000a98 add r8, pc | r8 += pc;
0x00000a9a add r6, pc | r6 = 0x1648;
0x00000a9c b 0xac2 |
| while (r0 != 0) {
0x00000a9e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00000aa0 cmp r3, sl |
| if (r3 != sl) {
0x00000aa2 beq 0xaaa |
0x00000aa4 movs r0, 0x20 | r0 = 0x20;
0x00000aa6 blx 0x6b0 | putchar (r0);
| }
0x00000aaa mov r2, fp | r2 = fp;
0x00000aac mov r1, r6 | r1 = r6;
0x00000aae movs r0, 1 | r0 = 1;
0x00000ab0 blx 0x6bc | printf_chk ();
| label_11:
0x00000ab4 ldr r1, [pc, 0xf4] |
0x00000ab6 movs r0, 0 | r0 = 0;
0x00000ab8 add r1, pc | r1 = 0x1668;
0x00000aba blx 0x6e0 | r0 = strtok (r0, r1);
0x00000abe mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x00000ac0 cbz r0, 0xae6 | goto label_40;
| }
0x00000ac2 mov r0, sl | r0 = sl;
0x00000ac4 blx 0x644 | r0 = bootblock_get ();
0x00000ac8 mov fp, r0 |
0x00000aca cmp r0, 0 |
0x00000acc bne 0xa9e |
| }
0x00000ace ldr r2, [pc, 0xa4] | r2 = *(0xb76);
0x00000ad0 mov r3, sl | r3 = sl;
0x00000ad2 movs r1, 1 | r1 = 1;
0x00000ad4 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00000ad6 ldr r0, [r2] | r0 = *(0xb76);
0x00000ad8 mov r2, sb | r2 = sb;
0x00000ada blx 0x6c8 | fprintf_chk ()
0x00000ade movs r3, 1 | r3 = 1;
0x00000ae0 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00000ae4 b 0xab4 | goto label_11;
| label_40:
0x00000ae6 subs r7, 2 | r7 -= 2;
0x00000ae8 adds r5, 8 | r5 += 8;
0x00000aea b 0x820 | goto label_8;
| label_21:
0x00000aec ldr r0, [pc, 0xc0] |
0x00000aee str r3, [sp, 8] | *(arg_8h) = r3;
0x00000af0 add r0, pc | r0 = 0x16a4;
0x00000af2 blx 0x65c | puts (r0);
0x00000af6 ldr r3, [sp, 8] | r3 = *(arg_8h);
0x00000af8 mov r0, r3 | r0 = r3;
0x00000afa blx 0x68c | exit (r0);
| label_18:
0x00000afe mov r6, r7 | r6 = r7;
0x00000b00 mov r5, r4 | r5 = r4;
0x00000b02 mov r7, r8 | r7 = r8;
0x00000b04 b 0x760 | goto label_12;
| label_38:
0x00000b06 ldr r2, [pc, 0xac] |
0x00000b08 ldr r0, [pc, 0x68] | r0 = *(0xb74);
0x00000b0a add r2, pc | r2 = 0x16c4;
0x00000b0c b 0x8c6 | goto label_13;
| label_39:
0x00000b0e ldr r2, [pc, 0xa8] |
0x00000b10 ldr r0, [pc, 0x60] | r0 = *(0xb74);
0x00000b12 add r2, pc | r2 = 0x16d0;
0x00000b14 b 0x8c6 | goto label_13;
| label_34:
0x00000b16 ldr r2, [pc, 0xa4] |
0x00000b18 ldr r0, [pc, 0x58] | r0 = *(0xb74);
0x00000b1a add r2, pc | r2 = 0x16dc;
0x00000b1c b 0x8c8 | goto label_14;
| label_29:
0x00000b1e ldr r0, [pc, 0xa0] |
0x00000b20 ldr r3, [pc, 0x50] | r3 = *(0xb74);
0x00000b22 add r0, pc | r0 = 0x16e8;
0x00000b24 b 0x84c | goto label_15;
| label_23:
0x00000b26 ldr r0, [pc, 0x9c] |
0x00000b28 movs r2, 0x2d | r2 = 0x2d;
0x00000b2a ldr r3, [pc, 0x48] | r3 = *(0xb76);
0x00000b2c add r0, pc | r0 = 0x16f6;
0x00000b2e b 0x850 | goto label_16;
| label_32:
0x00000b30 ldr r0, [pc, 0x94] |
0x00000b32 movs r2, 0x16 | r2 = 0x16;
0x00000b34 ldr r3, [pc, 0x3c] | r3 = *(0xb74);
0x00000b36 add r0, pc | r0 = 0x1702;
0x00000b38 b 0x850 | goto label_16;
| label_36:
0x00000b3a ldr r0, [pc, 0x90] |
0x00000b3c movs r2, 0x16 | r2 = 0x16;
0x00000b3e ldr r3, [pc, 0x34] | r3 = *(0xb76);
0x00000b40 add r0, pc | r0 = 0x1712;
0x00000b42 b 0x850 | goto label_16;
0x00000c04 adds r0, 0x14 | r0 += 0x14;
0x00000c06 b 0x748 | goto label_17;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/bin/bootblocktool @ 0xccc */
| #include <stdint.h>
|
; (fcn) fcn.00000ccc () | void fcn_00000ccc () {
0x00000ccc push {r4, lr} |
0x00000cce blx 0x6ec | r0 = bootblock_add ();
0x00000cd2 cmp r0, 0x11 |
0x00000cd4 ldr.w ip, [pc, 0x64] | ip = *(0x00000d3c);
0x00000cd8 add ip, pc |
| if (r0 != 0x11) {
0x00000cda beq 0xce4 |
0x00000cdc cmp r0, 0x16 |
| if (r0 == 0x16) {
0x00000cde beq 0xd22 | goto label_0;
| }
| if (r0 != 0) {
0x00000ce0 cbnz r0, 0xd02 | goto label_1;
| }
0x00000ce2 pop {r4, pc} |
| }
0x00000ce4 ldr r3, [pc, 0x58] |
0x00000ce6 movs r2, 0x21 | r2 = 0x21;
0x00000ce8 ldr r0, [pc, 0x58] |
0x00000cea movs r1, 1 | r1 = 1;
0x00000cec ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00000cf0 add r0, pc | r0 = 0x1a38;
0x00000cf2 ldr r3, [r3] | r3 = *(0xd40);
0x00000cf4 blx 0x650 | fwrite (r0, r1, r2, r3);
0x00000cf8 ldr r3, [pc, 0x4c] |
0x00000cfa movs r2, 1 | r2 = 1;
0x00000cfc add r3, pc | r3 = 0x1a48;
0x00000cfe str r2, [r3] | *(r3) = r2;
0x00000d00 pop {r4, pc} |
| label_1:
0x00000d02 ldr r3, [pc, 0x3c] | r3 = *(0xd42);
0x00000d04 ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00000d08 ldr r4, [r3] | r4 = *(0xd42);
0x00000d0a blx 0x674 | strerror (r0);
0x00000d0e ldr r2, [pc, 0x3c] |
0x00000d10 mov r3, r0 | r3 = r0;
0x00000d12 movs r1, 1 | r1 = 1;
0x00000d14 mov r0, r4 | r0 = r4;
0x00000d16 add r2, pc | r2 = 0x1a68;
0x00000d18 blx 0x6c8 | fprintf_chk ()
0x00000d1c movs r0, 1 | r0 = 1;
0x00000d1e blx 0x68c | exit (r0);
| label_0:
0x00000d22 ldr r3, [pc, 0x1c] |
0x00000d24 movs r2, 0x17 | r2 = 0x17;
0x00000d26 ldr r0, [pc, 0x28] |
0x00000d28 movs r1, 1 | r1 = 1;
0x00000d2a ldr.w r3, [ip, r3] | r3 = *((ip + r3));
0x00000d2e add r0, pc | r0 = 0x1a84;
0x00000d30 ldr r3, [r3] | r3 = *(0xd42);
0x00000d32 blx 0x650 | fwrite (r0, r1, r2, r3);
0x00000d36 movs r0, 1 | r0 = 1;
0x00000d38 blx 0x68c | exit (r0);
0x00000d3c asrs r0, r6, 0xa | r0 = r6 >> 0xa;
0x00000d3e movs r1, r0 | r1 = r0;
0x00000d40 lsls r4, r4, 1 | r4 <<= 1;
0x00000d42 movs r0, r0 |
0x00000d44 lsls r4, r2, 4 | r4 = r2 << 4;
0x00000d46 movs r0, r0 |
0x00000d48 asrs r4, r1, 0xc | r4 = r1 >> 0xc;
0x00000d4a movs r1, r0 | r1 = r0;
0x00000d4c lsls r2, r2, 4 | r2 <<= 4;
0x00000d4e movs r0, r0 |
0x00000d50 lsls r6, r7, 2 | r6 = r7 << 2;
0x00000d52 movs r0, r0 |
| /* [14] -r-x section size 8 named .fini */
0x00000d54 ands r0, r1 | r0 &= r1;
0x00000d56 invalid |
| }
[*] Function fprintf used 5 times bootblocktool