[*] Binary protection state of tc.iproute2
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of tc.iproute2
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x42078 */
| #include <stdint.h>
|
; (fcn) sym.print_color_0xhex () | void print_color_0xhex (int16_t arg_78h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_20h;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_14h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042078 push.w {r4, r5, r6, r7, r8, sl, fp, lr} |
0x0004207c mov r7, r2 | r7 = r2;
0x0004207e ldr r2, [pc, 0xac] |
0x00042080 mov r6, r3 | r6 = r3;
0x00042082 sub sp, 0x58 |
0x00042084 mov r4, r0 | r4 = r0;
0x00042086 ldr r3, [pc, 0xa8] | r3 = *(0x42132);
0x00042088 mov r8, r1 | r8 = r1;
0x0004208a add r2, pc | r2 = 0x841bc;
0x0004208c ldr r5, [pc, 0xa4] |
0x0004208e ldrd sl, fp, [sp, 0x78] | __asm ("ldrd sl, fp, [arg_78h]");
0x00042092 ldr r3, [r2, r3] |
0x00042094 add r5, pc | r5 = 0x841cc;
0x00042096 ldr r3, [r3] | r3 = *(0x841bc);
0x00042098 str r3, [sp, 0x54] | var_54h = r3;
0x0004209a mov.w r3, 0 | r3 = 0;
0x0004209e bl 0x418bc | r0 = is_json_context ();
| if (r0 != 0) {
0x000420a2 cbz r0, 0x420aa |
0x000420a4 tst.w r4, 6 |
| if ((r4 & 6) != 0) {
0x000420a8 bne 0x420fe | goto label_1;
| }
| }
0x000420aa bl 0x418bc | r0 = is_json_context ();
0x000420ae cbz r0, 0x420cc |
| while ((r4 & 5) == 0) {
| label_0:
0x000420b0 ldr r2, [pc, 0x84] |
0x000420b2 ldr r3, [pc, 0x7c] | r3 = *(0x42132);
0x000420b4 add r2, pc | r2 = 0x841f0;
0x000420b6 ldr r3, [r2, r3] | r3 = *(0x841f0);
0x000420b8 ldr r2, [r3] | r2 = *(0x841f0);
0x000420ba ldr r3, [sp, 0x54] | r3 = var_54h;
0x000420bc eors r2, r3 | r2 ^= r3;
0x000420be mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000420c2 bne 0x42126 | goto label_2;
| }
0x000420c4 movs r0, 0 | r0 = 0;
0x000420c6 add sp, 0x58 |
0x000420c8 pop.w {r4, r5, r6, r7, r8, sl, fp, pc} |
0x000420cc tst.w r4, 5 |
0x000420d0 beq 0x420b0 |
| }
0x000420d2 ldr r2, [pc, 0x68] |
0x000420d4 ldr r3, [pc, 0x58] | r3 = *(0x42130);
0x000420d6 add r2, pc | r2 = 0x84218;
0x000420d8 ldr r3, [r2, r3] | r3 = *(0x84218);
0x000420da ldr r2, [r3] | r2 = *(0x84218);
0x000420dc ldr r3, [sp, 0x54] | r3 = var_54h;
0x000420de eors r2, r3 | r2 ^= r3;
0x000420e0 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000420e4 bne 0x42126 |
0x000420e6 ldr r3, [pc, 0x58] | r3 = *(0x42142);
0x000420e8 mov r2, r6 | r2 = r6;
0x000420ea mov r1, r8 | r1 = r8;
0x000420ec ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x000420ee strd sl, fp, [sp, 0x78] | __asm ("strd sl, fp, [var_20hx78]");
0x000420f0 add r3, sp, 0x78 | r3 = sp + 0x78;
0x000420f2 ldr r0, [r3] | r0 = *(0x42142);
0x000420f4 add sp, 0x58 |
0x000420f6 pop.w {r4, r5, r6, r7, r8, sl, fp, lr} |
0x000420fa b.w 0x42a14 | void (*0x42a14)() ();
| label_1:
0x000420fe ldr r1, [pc, 0x44] |
0x00042100 movs r3, 0x40 | r3 = 0x40;
0x00042102 add r4, sp, 0x14 | r4 += var_14h;
0x00042104 movs r2, 1 | r2 = 1;
0x00042106 mov r0, r4 | r0 = r4;
0x00042108 strd sl, fp, [sp, 8] | __asm ("strd sl, fp, [var_8h]");
0x0004210c add r1, pc | r1 = 0x84256;
0x0004210e str r1, [sp] | *(sp) = r1;
0x00042110 mov r1, r3 | r1 = r3;
0x00042112 blx 0x92e0 | fcn_000092e0 ();
0x00042116 movs r3, 0 | r3 = 0;
0x00042118 mov r2, r7 | r2 = r7;
0x0004211a movs r1, 6 | r1 = 6;
0x0004211c str r4, [sp] | *(sp) = r4;
0x0004211e movs r0, 2 | r0 = 2;
0x00042120 bl 0x41e50 | print_color_string ();
0x00042124 b 0x420b0 | goto label_0;
| }
| label_2:
0x00042126 blx 0x93ac | fcn_000093ac ();
0x0004212a nop |
0x0004212c lsrs r6, r5, 0x10 | r6 = r5 >> 0x10;
0x0004212e movs r2, r0 | r2 = r0;
0x00042130 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00042132 movs r0, r0 |
0x00042134 lsrs r4, r4, 0x10 | r4 >>= 0x10;
0x00042136 movs r2, r0 | r2 = r0;
0x00042138 lsrs r4, r0, 0x10 | r4 = r0 >> 0x10;
0x0004213a movs r2, r0 | r2 = r0;
0x0004213c lsrs r2, r4, 0xf | r2 = r4 >> 0xf;
0x0004213e movs r2, r0 | r2 = r0;
0x00042140 lsls r0, r3, 0xc | r0 = r3 << 0xc;
0x00042142 movs r0, r0 |
| if (r4 != 0) {
0x00042144 cbnz r4, 0x42192 | void (*0x42192)() ();
| }
0x00042146 movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41f58 */
| #include <stdint.h>
|
; (fcn) sym.print_color_bool () | void print_color_bool (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041f58 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041f5c mov r4, r0 | r4 = r0;
0x00041f5e ldrb.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041f62 mov r7, r1 | r7 = r1;
0x00041f64 mov sb, r2 | sb = r2;
0x00041f66 mov r6, r3 | r6 = r3;
0x00041f68 ldr r5, [pc, 0x68] |
0x00041f6a add r5, pc | r5 = 0x83f42;
0x00041f6c cmp.w r8, 0 |
| if (r8 != 0) {
0x00041f70 bne 0x41fc0 | goto label_2;
| }
0x00041f72 ldr.w sl, [pc, 0x64] | sl = *(0x00041fd8);
0x00041f76 add sl, pc | sl += pc;
| label_1:
0x00041f78 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041f7c cbz r0, 0x41f9e | goto label_3;
| }
0x00041f7e tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041f82 beq 0x41f9e | goto label_3;
| }
0x00041f84 ldr r3, [pc, 0x54] |
0x00041f86 add r3, pc | r3 = 0x83f66;
0x00041f88 ldr r0, [r3] | r0 = *(0x83f66);
0x00041f8a cmp.w sb, 0 |
| if (sb == 0) {
0x00041f8e beq 0x41fc8 | goto label_4;
| }
0x00041f90 mov r2, r8 | r2 = r8;
0x00041f92 mov r1, sb | r1 = sb;
0x00041f94 bl 0x47b7c | jsonw_bool_field ();
| do {
| label_0:
0x00041f98 movs r0, 0 | r0 = 0;
0x00041f9a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x00041f9e bl 0x418bc | r0 = is_json_context ();
0x00041fa2 cmp r0, 0 |
0x00041fa4 bne 0x41f98 |
| } while (r0 != 0);
0x00041fa6 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041faa beq 0x41f98 | goto label_0;
| }
0x00041fac ldr r0, [pc, 0x30] |
0x00041fae mov r3, sl | r3 = sl;
0x00041fb0 mov r2, r6 | r2 = r6;
0x00041fb2 mov r1, r7 | r1 = r7;
0x00041fb4 ldr r0, [r5, r0] | r0 = *((r5 + r0));
0x00041fb6 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041fba ldr r0, [r0] | r0 = *(0x41fe0);
0x00041fbc b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041fc0 ldr.w sl, [pc, 0x20] |
0x00041fc4 add sl, pc | sl = 0x83fac;
0x00041fc6 b 0x41f78 | goto label_1;
| label_4:
0x00041fc8 mov r1, r8 | r1 = r8;
0x00041fca bl 0x47aa8 | jsonw_bool ();
0x00041fce movs r0, 0 | r0 = 0;
0x00041fd0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41d68 */
| #include <stdint.h>
|
; (fcn) sym.print_color_float () | void print_color_float (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041d68 push.w {r4, r5, r6, r7, r8, lr} |
0x00041d6c mov r4, r0 | r4 = r0;
0x00041d6e ldr r6, [pc, 0x6c] |
0x00041d70 mov r8, r1 | r8 = r1;
0x00041d72 mov r7, r2 | r7 = r2;
0x00041d74 mov r5, r3 | r5 = r3;
0x00041d76 vpush {d8} | __asm ("vpush {d8}");
0x00041d7a sub sp, 8 |
0x00041d7c vmov.f64 d8, d0 | __asm ("vmov.f64 d8, d0");
0x00041d80 add r6, pc | r6 = 0x83b62;
0x00041d82 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041d86 cbz r0, 0x41dac | goto label_1;
| }
0x00041d88 tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041d8c beq 0x41dac | goto label_1;
| }
0x00041d8e ldr r3, [pc, 0x50] |
0x00041d90 vmov.f64 d0, d8 | __asm ("vmov.f64 d0, d8");
0x00041d94 add r3, pc | r3 = 0x83b7a;
0x00041d96 ldr r0, [r3] | r0 = *(0x83b7a);
| if (r7 == 0) {
0x00041d98 cbz r7, 0x41dd6 | goto label_2;
| }
0x00041d9a mov r1, r7 | r1 = r7;
0x00041d9c bl 0x47b94 | jsonw_float_field ();
| do {
| label_0:
0x00041da0 movs r0, 0 | r0 = 0;
0x00041da2 add sp, 8 |
0x00041da4 vpop {d8} | __asm ("vpop {d8}");
0x00041da8 pop.w {r4, r5, r6, r7, r8, pc} |
| label_1:
0x00041dac bl 0x418bc | r0 = is_json_context ();
0x00041db0 cmp r0, 0 |
0x00041db2 bne 0x41da0 |
| } while (r0 != 0);
0x00041db4 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041db8 beq 0x41da0 | goto label_0;
| }
0x00041dba ldr r3, [pc, 0x28] | r3 = *(0x41de6);
0x00041dbc mov r2, r5 | r2 = r5;
0x00041dbe mov r1, r8 | r1 = r8;
0x00041dc0 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00041dc2 vstr d8, [sp] | __asm ("vstr d8, [sp]");
0x00041dc6 ldr r0, [r3] | r0 = *(0x41de6);
0x00041dc8 bl 0x42a14 | color_fprintf ()
0x00041dcc add sp, 8 |
0x00041dce vpop {d8} | __asm ("vpop {d8}");
0x00041dd2 pop.w {r4, r5, r6, r7, r8, pc} |
| label_2:
0x00041dd6 bl 0x47ad4 | jsonw_float ();
0x00041dda b 0x41da0 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x42148 */
| #include <stdint.h>
|
; (fcn) sym.print_color_hex () | void print_color_hex (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_ch;
| int16_t var_4ch;
| int16_t var_20h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042148 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0004214c mov sb, r2 | sb = r2;
0x0004214e ldr r2, [pc, 0xbc] |
0x00042150 mov r6, r3 | r6 = r3;
0x00042152 sub sp, 0x54 |
0x00042154 mov r4, r0 | r4 = r0;
0x00042156 ldr r3, [pc, 0xb8] | r3 = *(0x42212);
0x00042158 mov r7, r1 | r7 = r1;
0x0004215a add r2, pc | r2 = 0x8436c;
0x0004215c ldr r5, [pc, 0xb4] |
0x0004215e ldr.w r8, [sp, 0x70] | r8 = var_20h;
0x00042162 ldr r3, [r2, r3] |
0x00042164 add r5, pc | r5 = 0x8437c;
0x00042166 ldr r3, [r3] | r3 = *(0x8436c);
0x00042168 str r3, [sp, 0x4c] | var_4ch = r3;
0x0004216a mov.w r3, 0 | r3 = 0;
0x0004216e bl 0x418bc | r0 = is_json_context ();
| if (r0 != 0) {
0x00042172 cbz r0, 0x4217a |
0x00042174 tst.w r4, 6 |
| if ((r4 & 6) != 0) {
0x00042178 bne 0x421cc | goto label_1;
| }
| }
0x0004217a bl 0x418bc | r0 = is_json_context ();
0x0004217e cbz r0, 0x4219c |
| while ((r4 & 5) == 0) {
| label_0:
0x00042180 ldr r2, [pc, 0x94] |
0x00042182 ldr r3, [pc, 0x8c] | r3 = *(0x42212);
0x00042184 add r2, pc | r2 = 0x843a0;
0x00042186 ldr r3, [r2, r3] | r3 = *(0x843a0);
0x00042188 ldr r2, [r3] | r2 = *(0x843a0);
0x0004218a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0004218c eors r2, r3 | r2 ^= r3;
0x0004218e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00042192 bne 0x42206 | goto label_2;
| }
0x00042194 movs r0, 0 | r0 = 0;
0x00042196 add sp, 0x54 |
0x00042198 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0004219c tst.w r4, 5 |
0x000421a0 beq 0x42180 |
| }
0x000421a2 ldr r2, [pc, 0x78] |
0x000421a4 ldr r3, [pc, 0x68] | r3 = *(0x42210);
0x000421a6 add r2, pc | r2 = 0x843c8;
0x000421a8 ldr r3, [r2, r3] | r3 = *(0x843c8);
0x000421aa ldr r2, [r3] | r2 = *(0x843c8);
0x000421ac ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000421ae eors r2, r3 | r2 ^= r3;
0x000421b0 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000421b4 bne 0x42206 |
0x000421b6 ldr r0, [pc, 0x68] |
0x000421b8 mov r3, r8 | r3 = r8;
0x000421ba mov r2, r6 | r2 = r6;
0x000421bc mov r1, r7 | r1 = r7;
0x000421be ldr r0, [r5, r0] | r0 = *((r5 + r0));
0x000421c0 ldr r0, [r0] | r0 = *(0x42222);
0x000421c2 add sp, 0x54 |
0x000421c4 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000421c8 b.w 0x42a14 | void (*0x42a14)() ();
| label_1:
0x000421cc ldr r2, [pc, 0x54] |
0x000421ce add r4, sp, 0xc | r4 += var_ch;
0x000421d0 movs r3, 0x40 | r3 = 0x40;
0x000421d2 mov r0, r4 | r0 = r4;
0x000421d4 mov r1, r3 | r1 = r3;
0x000421d6 add r2, pc | r2 = 0x843fe;
0x000421d8 strd r2, r8, [sp] | __asm ("strd r2, r8, [sp]");
0x000421dc movs r2, 1 | r2 = 1;
0x000421de blx 0x92e0 | fcn_000092e0 ();
0x000421e2 cmp.w sb, 0 |
| if (sb != 0) {
0x000421e6 beq 0x421f8 |
0x000421e8 ldr r3, [pc, 0x3c] |
0x000421ea mov r2, r4 | r2 = r4;
0x000421ec mov r1, sb | r1 = sb;
0x000421ee add r3, pc | r3 = 0x8441a;
0x000421f0 ldr r0, [r3] | r0 = *(0x8441a);
0x000421f2 bl 0x47b64 | jsonw_string_field ();
0x000421f6 b 0x42180 | goto label_0;
| }
0x000421f8 ldr r3, [pc, 0x30] |
0x000421fa mov r1, r4 | r1 = r4;
0x000421fc add r3, pc | r3 = 0x8442c;
0x000421fe ldr r0, [r3] | r0 = *(0x8442c);
0x00042200 bl 0x47a88 | jsonw_string ();
0x00042204 b 0x42180 | goto label_0;
| }
| label_2:
0x00042206 blx 0x93ac | fcn_000093ac ();
0x0004220a nop |
0x0004220c lsrs r6, r3, 0xd | r6 = r3 >> 0xd;
0x0004220e movs r2, r0 | r2 = r0;
0x00042210 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00042212 movs r0, r0 |
0x00042214 lsrs r4, r2, 0xd | r4 = r2 >> 0xd;
0x00042216 movs r2, r0 | r2 = r0;
0x00042218 lsrs r4, r6, 0xc | r4 = r6 >> 0xc;
0x0004221a movs r2, r0 | r2 = r0;
0x0004221c lsrs r2, r2, 0xc | r2 >>= 0xc;
0x0004221e movs r2, r0 | r2 = r0;
0x00042220 lsls r0, r3, 0xc | r0 = r3 << 0xc;
0x00042222 movs r0, r0 |
0x00042224 ldm r3, {r1, r2, r3, r4, r5} | r1 = *(r3);
| r2 = *((r3 + 4));
| r3 = *((r3 + 8));
| r4 = *((r3 + 12));
| r5 = *((r3 + 16));
0x00042226 movs r0, r0 |
0x00042228 ldr r6, [r0, 0x68] | r6 = *((r0 + 0x68));
0x0004222a movs r2, r0 | r2 = r0;
0x0004222c ldr r0, [r7, 0x64] | r0 = *((r7 + 0x64));
0x0004222e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41ab0 */
| #include <stdint.h>
|
; (fcn) sym.print_color_hhu () | void print_color_hhu (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00041ab0 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00041ab4 mov r4, r0 | r4 = r0;
0x00041ab6 ldr r6, [pc, 0x60] |
0x00041ab8 mov r7, r1 | r7 = r1;
0x00041aba mov sb, r2 | sb = r2;
0x00041abc mov r5, r3 | r5 = r3;
0x00041abe ldrb.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041ac2 add r6, pc | r6 = 0x835e0;
0x00041ac4 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041ac8 cbz r0, 0x41aea | goto label_1;
| }
0x00041aca tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041ace beq 0x41aea | goto label_1;
| }
0x00041ad0 ldr r3, [pc, 0x48] |
0x00041ad2 add r3, pc | r3 = 0x835f2;
0x00041ad4 ldr r0, [r3] | r0 = *(0x835f2);
0x00041ad6 cmp.w sb, 0 |
| if (sb == 0) {
0x00041ada beq 0x41b0c | goto label_2;
| }
0x00041adc mov r2, r8 | r2 = r8;
0x00041ade mov r1, sb | r1 = sb;
0x00041ae0 bl 0x47c08 | jsonw_hhu_field ();
| do {
| label_0:
0x00041ae4 movs r0, 0 | r0 = 0;
0x00041ae6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041aea bl 0x418bc | r0 = is_json_context ();
0x00041aee cmp r0, 0 |
0x00041af0 bne 0x41ae4 |
| } while (r0 != 0);
0x00041af2 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041af6 beq 0x41ae4 | goto label_0;
| }
0x00041af8 ldr r0, [pc, 0x24] |
0x00041afa mov r3, r8 | r3 = r8;
0x00041afc mov r2, r5 | r2 = r5;
0x00041afe mov r1, r7 | r1 = r7;
0x00041b00 ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00041b02 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041b06 ldr r0, [r0] | r0 = *(0x41b20);
0x00041b08 b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041b0c mov r1, r8 | r1 = r8;
0x00041b0e bl 0x47ae4 | jsonw_hhu ();
0x00041b12 movs r0, 0 | r0 = 0;
0x00041b14 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41b24 */
| #include <stdint.h>
|
; (fcn) sym.print_color_hu () | void print_color_hu (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041b24 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041b28 mov r4, r0 | r4 = r0;
0x00041b2a ldr r6, [pc, 0x60] |
0x00041b2c mov r7, r1 | r7 = r1;
0x00041b2e mov sb, r2 | sb = r2;
0x00041b30 mov r5, r3 | r5 = r3;
0x00041b32 ldrh.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041b34 strh r0, [r4] | *(r4) = r0;
0x00041b36 add r6, pc | r6 = 0x836c8;
0x00041b38 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041b3c cbz r0, 0x41b5e | goto label_1;
| }
0x00041b3e tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041b42 beq 0x41b5e | goto label_1;
| }
0x00041b44 ldr r3, [pc, 0x48] |
0x00041b46 add r3, pc | r3 = 0x836da;
0x00041b48 ldr r0, [r3] | r0 = *(0x836da);
0x00041b4a cmp.w sb, 0 |
| if (sb == 0) {
0x00041b4e beq 0x41b80 | goto label_2;
| }
0x00041b50 mov r2, r8 | r2 = r8;
0x00041b52 mov r1, sb | r1 = sb;
0x00041b54 bl 0x47c20 | jsonw_hu_field ();
| do {
| label_0:
0x00041b58 movs r0, 0 | r0 = 0;
0x00041b5a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041b5e bl 0x418bc | r0 = is_json_context ();
0x00041b62 cmp r0, 0 |
0x00041b64 bne 0x41b58 |
| } while (r0 != 0);
0x00041b66 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041b6a beq 0x41b58 | goto label_0;
| }
0x00041b6c ldr r0, [pc, 0x24] |
0x00041b6e mov r3, r8 | r3 = r8;
0x00041b70 mov r2, r5 | r2 = r5;
0x00041b72 mov r1, r7 | r1 = r7;
0x00041b74 ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00041b76 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041b7a ldr r0, [r0] | r0 = *(0x41b94);
0x00041b7c b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041b80 mov r1, r8 | r1 = r8;
0x00041b82 bl 0x47af4 | jsonw_hu ();
0x00041b86 movs r0, 0 | r0 = 0;
0x00041b88 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41cf4 */
| #include <stdint.h>
|
; (fcn) sym.print_color_lluint () | void print_color_lluint (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041cf4 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041cf8 mov r4, r0 | r4 = r0;
0x00041cfa ldr r7, [pc, 0x60] |
0x00041cfc mov r6, r1 | r6 = r1;
0x00041cfe mov r5, r2 | r5 = r2;
0x00041d00 mov sl, r3 | sl = r3;
0x00041d02 ldrd r8, sb, [sp, 0x20] | __asm ("ldrd r8, sb, [arg_20h]");
0x00041d06 add r7, pc | r7 = 0x83a68;
0x00041d08 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041d0c cbz r0, 0x41d2c | goto label_1;
| }
0x00041d0e tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041d12 beq 0x41d2c | goto label_1;
| }
0x00041d14 ldr r3, [pc, 0x48] |
0x00041d16 mov r2, r8 | r2 = r8;
0x00041d18 add r3, pc | r3 = 0x83a7c;
0x00041d1a ldr r0, [r3] | r0 = *(0x83a7c);
0x00041d1c mov r3, sb | r3 = sb;
| if (r5 == 0) {
0x00041d1e cbz r5, 0x41d50 | goto label_2;
| }
0x00041d20 mov r1, r5 | r1 = r5;
0x00041d22 bl 0x47c50 | jsonw_lluint_field ();
| do {
| label_0:
0x00041d26 movs r0, 0 | r0 = 0;
0x00041d28 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041d2c bl 0x418bc | r0 = is_json_context ();
0x00041d30 cmp r0, 0 |
0x00041d32 bne 0x41d26 |
| } while (r0 != 0);
0x00041d34 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041d38 beq 0x41d26 | goto label_0;
| }
0x00041d3a ldr r3, [pc, 0x28] | r3 = *(0x41d66);
0x00041d3c mov r2, sl | r2 = sl;
0x00041d3e mov r1, r6 | r1 = r6;
0x00041d40 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00041d42 strd r8, sb, [sp, 0x20] | __asm ("strd r8, sb, [sp, 0x20]");
0x00041d44 ldrh r0, [r1, 8] | r0 = *((r1 + 8));
0x00041d46 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041d4a ldr r0, [r3] | r0 = *(0x41d66);
0x00041d4c b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041d50 bl 0x47b3c | jsonw_lluint ();
0x00041d54 movs r0, 0 | r0 = 0;
0x00041d56 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41c80 */
| #include <stdint.h>
|
; (fcn) sym.print_color_luint () | void print_color_luint (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041c80 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041c84 mov r4, r0 | r4 = r0;
0x00041c86 ldr r6, [pc, 0x60] |
0x00041c88 mov r7, r1 | r7 = r1;
0x00041c8a mov sb, r2 | sb = r2;
0x00041c8c mov r5, r3 | r5 = r3;
0x00041c8e ldr.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041c92 add r6, pc | r6 = 0x83980;
0x00041c94 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041c98 cbz r0, 0x41cba | goto label_1;
| }
0x00041c9a tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041c9e beq 0x41cba | goto label_1;
| }
0x00041ca0 ldr r3, [pc, 0x48] |
0x00041ca2 add r3, pc | r3 = 0x83992;
0x00041ca4 ldr r0, [r3] | r0 = *(0x83992);
0x00041ca6 cmp.w sb, 0 |
| if (sb == 0) {
0x00041caa beq 0x41cdc | goto label_2;
| }
0x00041cac mov r2, r8 | r2 = r8;
0x00041cae mov r1, sb | r1 = sb;
0x00041cb0 bl 0x47c38 | jsonw_luint_field ();
| do {
| label_0:
0x00041cb4 movs r0, 0 | r0 = 0;
0x00041cb6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041cba bl 0x418bc | r0 = is_json_context ();
0x00041cbe cmp r0, 0 |
0x00041cc0 bne 0x41cb4 |
| } while (r0 != 0);
0x00041cc2 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041cc6 beq 0x41cb4 | goto label_0;
| }
0x00041cc8 ldr r0, [pc, 0x24] |
0x00041cca mov r3, r8 | r3 = r8;
0x00041ccc mov r2, r5 | r2 = r5;
0x00041cce mov r1, r7 | r1 = r7;
0x00041cd0 ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00041cd2 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041cd4 blx lr | r0 = lr (r4, r3, r2, r1, r0);
0x00041cd6 ldr r0, [r0] | r0 = *(0x41cf0);
0x00041cd8 b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041cdc mov r1, r8 | r1 = r8;
0x00041cde bl 0x47b2c | jsonw_luint ();
0x00041ce2 movs r0, 0 | r0 = 0;
0x00041ce4 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x42230 */
| #include <stdint.h>
|
; (fcn) sym.print_color_null () | void print_color_null (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042230 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00042234 mov r4, r0 | r4 = r0;
0x00042236 ldr r6, [pc, 0x5c] |
0x00042238 mov r7, r1 | r7 = r1;
0x0004223a mov sb, r2 | sb = r2;
0x0004223c mov r5, r3 | r5 = r3;
0x0004223e ldr.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00042242 add r6, pc | r6 = 0x844dc;
0x00042244 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00042248 cbz r0, 0x42268 | goto label_1;
| }
0x0004224a tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x0004224e beq 0x42268 | goto label_1;
| }
0x00042250 ldr r3, [pc, 0x44] |
0x00042252 add r3, pc | r3 = 0x844ee;
0x00042254 ldr r0, [r3] | r0 = *(0x844ee);
0x00042256 cmp.w sb, 0 |
| if (sb == 0) {
0x0004225a beq 0x4228a | goto label_2;
| }
0x0004225c mov r1, sb | r1 = sb;
0x0004225e bl 0x47ca0 | jsonw_null_field ();
| do {
| label_0:
0x00042262 movs r0, 0 | r0 = 0;
0x00042264 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00042268 bl 0x418bc | r0 = is_json_context ();
0x0004226c cmp r0, 0 |
0x0004226e bne 0x42262 |
| } while (r0 != 0);
0x00042270 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00042274 beq 0x42262 | goto label_0;
| }
0x00042276 ldr r0, [pc, 0x24] |
0x00042278 mov r3, r8 | r3 = r8;
0x0004227a mov r2, r5 | r2 = r5;
0x0004227c mov r1, r7 | r1 = r7;
0x0004227e ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00042280 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00042284 ldr r0, [r0] | r0 = *(0x4229e);
0x00042286 b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x0004228a bl 0x47ac8 | jsonw_null ();
0x0004228e movs r0, 0 | r0 = 0;
0x00042290 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41fe8 */
| #include <stdint.h>
|
; (fcn) sym.print_color_on_off () | void print_color_on_off (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041fe8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041fec mov r4, r0 | r4 = r0;
0x00041fee ldrb.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041ff2 mov r7, r1 | r7 = r1;
0x00041ff4 mov sb, r2 | sb = r2;
0x00041ff6 mov r6, r3 | r6 = r3;
0x00041ff8 ldr r5, [pc, 0x68] |
0x00041ffa add r5, pc | r5 = 0x84062;
0x00041ffc cmp.w r8, 0 |
| if (r8 != 0) {
0x00042000 bne 0x42050 | goto label_2;
| }
0x00042002 ldr.w sl, [pc, 0x64] | sl = *(0x00042068);
0x00042006 add sl, pc | sl += pc;
| label_1:
0x00042008 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x0004200c cbz r0, 0x4202e | goto label_3;
| }
0x0004200e tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00042012 beq 0x4202e | goto label_3;
| }
0x00042014 ldr r3, [pc, 0x54] |
0x00042016 add r3, pc | r3 = 0x84086;
0x00042018 ldr r0, [r3] | r0 = *(0x84086);
0x0004201a cmp.w sb, 0 |
| if (sb == 0) {
0x0004201e beq 0x42058 | goto label_4;
| }
0x00042020 mov r2, r8 | r2 = r8;
0x00042022 mov r1, sb | r1 = sb;
0x00042024 bl 0x47b7c | jsonw_bool_field ();
| do {
| label_0:
0x00042028 movs r0, 0 | r0 = 0;
0x0004202a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x0004202e bl 0x418bc | r0 = is_json_context ();
0x00042032 cmp r0, 0 |
0x00042034 bne 0x42028 |
| } while (r0 != 0);
0x00042036 tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x0004203a beq 0x42028 | goto label_0;
| }
0x0004203c ldr r0, [pc, 0x30] |
0x0004203e mov r3, sl | r3 = sl;
0x00042040 mov r2, r6 | r2 = r6;
0x00042042 mov r1, r7 | r1 = r7;
0x00042044 ldr r0, [r5, r0] | r0 = *((r5 + r0));
0x00042046 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0004204a ldr r0, [r0] | r0 = *(0x42070);
0x0004204c b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00042050 ldr.w sl, [pc, 0x20] |
0x00042054 add sl, pc | sl = 0x840cc;
0x00042056 b 0x42008 | goto label_1;
| label_4:
0x00042058 mov r1, r8 | r1 = r8;
0x0004205a bl 0x47aa8 | jsonw_bool ();
0x0004205e movs r0, 0 | r0 = 0;
0x00042060 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41a3c */
| #include <stdint.h>
|
; (fcn) sym.print_color_s64 () | void print_color_s64 (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041a3c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041a40 mov r4, r0 | r4 = r0;
0x00041a42 ldr r7, [pc, 0x60] |
0x00041a44 mov r6, r1 | r6 = r1;
0x00041a46 mov r5, r2 | r5 = r2;
0x00041a48 mov sl, r3 | sl = r3;
0x00041a4a ldrd r8, sb, [sp, 0x20] | __asm ("ldrd r8, sb, [arg_20h]");
0x00041a4e add r7, pc | r7 = 0x834f8;
0x00041a50 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041a54 cbz r0, 0x41a74 | goto label_1;
| }
0x00041a56 tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041a5a beq 0x41a74 | goto label_1;
| }
0x00041a5c ldr r3, [pc, 0x48] |
0x00041a5e mov r2, r8 | r2 = r8;
0x00041a60 add r3, pc | r3 = 0x8350c;
0x00041a62 ldr r0, [r3] | r0 = *(0x8350c);
0x00041a64 mov r3, sb | r3 = sb;
| if (r5 == 0) {
0x00041a66 cbz r5, 0x41a98 | goto label_2;
| }
0x00041a68 mov r1, r5 | r1 = r5;
0x00041a6a bl 0x47c84 | jsonw_s64_field ();
| do {
| label_0:
0x00041a6e movs r0, 0 | r0 = 0;
0x00041a70 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041a74 bl 0x418bc | r0 = is_json_context ();
0x00041a78 cmp r0, 0 |
0x00041a7a bne 0x41a6e |
| } while (r0 != 0);
0x00041a7c tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041a80 beq 0x41a6e | goto label_0;
| }
0x00041a82 ldr r3, [pc, 0x28] | r3 = *(0x41aae);
0x00041a84 mov r2, sl | r2 = sl;
0x00041a86 mov r1, r6 | r1 = r6;
0x00041a88 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00041a8a strd r8, sb, [sp, 0x20] | __asm ("strd r8, sb, [sp, 0x20]");
0x00041a8e pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041a92 ldr r0, [r3] | r0 = *(0x41aae);
0x00041a94 b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041a98 bl 0x47b58 | jsonw_s64 ();
0x00041a9c movs r0, 0 | r0 = 0;
0x00041a9e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41e50 */
| #include <stdint.h>
|
; (fcn) sym.print_color_string () | void print_color_string (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041e50 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041e54 mov r4, r0 | r4 = r0;
0x00041e56 ldr r6, [pc, 0x8c] |
0x00041e58 mov r7, r1 | r7 = r1;
0x00041e5a mov sb, r2 | sb = r2;
0x00041e5c mov r5, r3 | r5 = r3;
0x00041e5e ldr.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041e62 add r6, pc | r6 = 0x83d4c;
0x00041e64 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041e68 cbz r0, 0x41ea6 | goto label_1;
| }
0x00041e6a tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041e6e beq 0x41ea6 | goto label_1;
| }
0x00041e70 subs.w r2, sb, 0 | r2 = sb - 0;
0x00041e74 ldr r3, [pc, 0x70] |
0x00041e76 it ne |
| if (r2 == sb) {
0x00041e78 movne r2, 1 | r2 = 1;
| }
0x00041e7a cmp.w r8, 0 |
0x00041e7e it ne |
| if (r8 == 0) {
0x00041e80 movne r2, 0 | r2 = 0;
| }
0x00041e82 add r3, pc | r3 = 0x83d6e;
0x00041e84 ldr r0, [r3] | r0 = *(0x83d6e);
| if (r2 != 0) {
0x00041e86 cbnz r2, 0x41ed6 | goto label_2;
| }
0x00041e88 clz r3, sb | r3 &= sb;
0x00041e8c cmp.w r8, 0 |
0x00041e90 lsr.w r3, r3, 5 | r3 >>= 5;
0x00041e94 it eq |
| if (r8 != 0) {
0x00041e96 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00041e98 cbz r3, 0x41ec8 | goto label_3;
| }
0x00041e9a mov r1, r8 | r1 = r8;
0x00041e9c bl 0x47a88 | jsonw_string ();
| do {
| label_0:
0x00041ea0 movs r0, 0 | r0 = 0;
0x00041ea2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041ea6 bl 0x418bc | r0 = is_json_context ();
0x00041eaa cmp r0, 0 |
0x00041eac bne 0x41ea0 |
| } while (r0 != 0);
0x00041eae tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041eb2 beq 0x41ea0 | goto label_0;
| }
0x00041eb4 ldr r0, [pc, 0x34] |
0x00041eb6 mov r3, r8 | r3 = r8;
0x00041eb8 mov r2, r5 | r2 = r5;
0x00041eba mov r1, r7 | r1 = r7;
0x00041ebc ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00041ebe pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041ec2 ldr r0, [r0] | r0 = *(0x41eec);
0x00041ec4 b.w 0x42a14 | void (*0x42a14)() ();
| label_3:
0x00041ec8 mov r2, r8 | r2 = r8;
0x00041eca mov r1, sb | r1 = sb;
0x00041ecc bl 0x47b64 | jsonw_string_field ();
0x00041ed0 movs r0, 0 | r0 = 0;
0x00041ed2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x00041ed6 mov r1, sb | r1 = sb;
0x00041ed8 bl 0x478c8 | jsonw_name ();
0x00041edc movs r0, 0 | r0 = 0;
0x00041ede pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41c0c */
| #include <stdint.h>
|
; (fcn) sym.print_color_u64 () | void print_color_u64 (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041c0c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041c10 mov r4, r0 | r4 = r0;
0x00041c12 ldr r7, [pc, 0x60] |
0x00041c14 mov r6, r1 | r6 = r1;
0x00041c16 mov r5, r2 | r5 = r2;
0x00041c18 mov sl, r3 | sl = r3;
0x00041c1a ldrd r8, sb, [sp, 0x20] | __asm ("ldrd r8, sb, [arg_20h]");
0x00041c1e add r7, pc | r7 = 0x83898;
0x00041c20 bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041c24 cbz r0, 0x41c44 | goto label_1;
| }
0x00041c26 tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041c2a beq 0x41c44 | goto label_1;
| }
0x00041c2c ldr r3, [pc, 0x48] |
0x00041c2e mov r2, r8 | r2 = r8;
0x00041c30 add r3, pc | r3 = 0x838ac;
0x00041c32 ldr r0, [r3] | r0 = *(0x838ac);
0x00041c34 mov r3, sb | r3 = sb;
| if (r5 == 0) {
0x00041c36 cbz r5, 0x41c68 | goto label_2;
| }
0x00041c38 mov r1, r5 | r1 = r5;
0x00041c3a bl 0x47bd0 | jsonw_u64_field ();
| do {
| label_0:
0x00041c3e movs r0, 0 | r0 = 0;
0x00041c40 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041c44 bl 0x418bc | r0 = is_json_context ();
0x00041c48 cmp r0, 0 |
0x00041c4a bne 0x41c3e |
| } while (r0 != 0);
0x00041c4c tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041c50 beq 0x41c3e | goto label_0;
| }
0x00041c52 ldr r3, [pc, 0x28] | r3 = *(0x41c7e);
0x00041c54 mov r2, sl | r2 = sl;
0x00041c56 mov r1, r6 | r1 = r6;
0x00041c58 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00041c5a strd r8, sb, [sp, 0x20] | __asm ("strd r8, sb, [sp, 0x20]");
0x00041c5e pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041c62 ldr r0, [r3] | r0 = *(0x41c7e);
0x00041c64 b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041c68 bl 0x47b14 | jsonw_u64 ();
0x00041c6c movs r0, 0 | r0 = 0;
0x00041c6e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/tc.iproute2 @ 0x41b98 */
| #include <stdint.h>
|
; (fcn) sym.print_color_uint () | void print_color_uint (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041b98 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041b9c mov r4, r0 | r4 = r0;
0x00041b9e ldr r6, [pc, 0x60] |
0x00041ba0 mov r7, r1 | r7 = r1;
0x00041ba2 mov sb, r2 | sb = r2;
0x00041ba4 mov r5, r3 | r5 = r3;
0x00041ba6 ldr.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x00041baa add r6, pc | r6 = 0x837b0;
0x00041bac bl 0x418bc | r0 = is_json_context ();
| if (r0 == 0) {
0x00041bb0 cbz r0, 0x41bd2 | goto label_1;
| }
0x00041bb2 tst.w r4, 6 |
| if ((r4 & 6) == 0) {
0x00041bb6 beq 0x41bd2 | goto label_1;
| }
0x00041bb8 ldr r3, [pc, 0x48] |
0x00041bba add r3, pc | r3 = 0x837c2;
0x00041bbc ldr r0, [r3] | r0 = *(0x837c2);
0x00041bbe cmp.w sb, 0 |
| if (sb == 0) {
0x00041bc2 beq 0x41bf4 | goto label_2;
| }
0x00041bc4 mov r2, r8 | r2 = r8;
0x00041bc6 mov r1, sb | r1 = sb;
0x00041bc8 bl 0x47bb8 | jsonw_uint_field ();
| do {
| label_0:
0x00041bcc movs r0, 0 | r0 = 0;
0x00041bce pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00041bd2 bl 0x418bc | r0 = is_json_context ();
0x00041bd6 cmp r0, 0 |
0x00041bd8 bne 0x41bcc |
| } while (r0 != 0);
0x00041bda tst.w r4, 5 |
| if ((r4 & 5) == 0) {
0x00041bde beq 0x41bcc | goto label_0;
| }
0x00041be0 ldr r0, [pc, 0x24] |
0x00041be2 mov r3, r8 | r3 = r8;
0x00041be4 mov r2, r5 | r2 = r5;
0x00041be6 mov r1, r7 | r1 = r7;
0x00041be8 ldr r0, [r6, r0] | r0 = *((r6 + r0));
0x00041bea pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041bee ldr r0, [r0] | r0 = *(0x41c08);
0x00041bf0 b.w 0x42a14 | void (*0x42a14)() ();
| label_2:
0x00041bf4 mov r1, r8 | r1 = r8;
0x00041bf6 bl 0x47b04 | jsonw_uint ();
0x00041bfa movs r0, 0 | r0 = 0;
0x00041bfc pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
[*] Function fprintf used 2 times tc.iproute2