[*] Binary protection state of ip.iproute2
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function printf tear down of ip.iproute2
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x3d344).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52344 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_bool () | void jsonw_bool (int16_t arg1) {
| r0 = arg1;
0x00052344 invalid | goto label_0;
0x00052346 ldr r2, [pc, 0x10] |
0x00052348 add r2, pc | r2 = 0xa46a6;
| do {
0x0005234a ldr r1, [pc, 0x10] |
0x0005234c add r1, pc | r1 = 0xa46ae;
0x0005234e b.w 0x521d4 | void (*0x521d4)() ();
| label_0:
0x00052352 ldr r2, [pc, 0xc] |
0x00052354 add r2, pc | r2 = 0xa46ba;
0x00052356 b 0x5234a |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52418 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_bool_field () | void jsonw_bool_field (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00052418 push {r3, r4, r5, lr} |
0x0005241a mov r4, r0 | r4 = r0;
0x0005241c mov r5, r2 | r5 = r2;
0x0005241e bl 0x52164 | jsonw_name ();
0x00052422 mov r1, r5 | r1 = r5;
0x00052424 mov r0, r4 | r0 = r4;
0x00052426 pop.w {r3, r4, r5, lr} |
0x0005242a b.w 0x52344 | return void (*0x52344)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52370 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_float () | void jsonw_float (int16_t arg1) {
| r0 = arg1;
0x00052370 ldr r1, [pc, 8] | r1 = *(0x0005237c);
0x00052372 vmov r2, r3, d0 | __asm ("vmov r2, r3, d0");
0x00052376 add r1, pc | r1 += pc;
0x00052378 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52430 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_float_field () | void jsonw_float_field (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00052430 push {r4, lr} |
0x00052432 mov r4, r0 | r4 = r0;
0x00052434 vpush {d8} | __asm ("vpush {d8}");
0x00052438 vmov.f64 d8, d0 | __asm ("vmov.f64 d8, d0");
0x0005243c bl 0x52164 | jsonw_name ();
0x00052440 vmov.f64 d0, d8 | __asm ("vmov.f64 d0, d8");
0x00052444 mov r0, r4 | r0 = r4;
0x00052446 vpop {d8} | __asm ("vpop {d8}");
0x0005244a pop.w {r4, lr} |
0x0005244e b.w 0x52370 | return void (*0x52370)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52380 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_hhu () | void jsonw_hhu (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00052380 mov r2, r1 | r2 = r1;
0x00052382 ldr r1, [pc, 8] |
0x00052384 add r1, pc | r1 = 0xa4716;
0x00052386 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x524a4 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_hhu_field () | void jsonw_hhu_field (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000524a4 push {r3, r4, r5, lr} |
0x000524a6 mov r4, r0 | r4 = r0;
0x000524a8 mov r5, r2 | r5 = r2;
0x000524aa bl 0x52164 | jsonw_name ();
0x000524ae mov r1, r5 | r1 = r5;
0x000524b0 mov r0, r4 | r0 = r4;
0x000524b2 pop.w {r3, r4, r5, lr} |
0x000524b6 b.w 0x52380 | return void (*0x52380)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52390 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_hu () | void jsonw_hu (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00052390 mov r2, r1 | r2 = r1;
0x00052392 ldr r1, [pc, 8] |
0x00052394 add r1, pc | r1 = 0xa4736;
0x00052396 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x524bc */
| #include <stdint.h>
|
; (fcn) sym.jsonw_hu_field () | void jsonw_hu_field (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000524bc push {r3, r4, r5, lr} |
0x000524be mov r4, r0 | r4 = r0;
0x000524c0 mov r5, r2 | r5 = r2;
0x000524c2 bl 0x52164 | jsonw_name ();
0x000524c6 mov r1, r5 | r1 = r5;
0x000524c8 mov r0, r4 | r0 = r4;
0x000524ca pop.w {r3, r4, r5, lr} |
0x000524ce b.w 0x52390 | return void (*0x52390)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523e4 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_int () | void jsonw_int (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000523e4 mov r2, r1 | r2 = r1;
0x000523e6 ldr r1, [pc, 8] |
0x000523e8 add r1, pc | r1 = 0xa47de;
0x000523ea b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52508 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_int_field () | void jsonw_int_field (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00052508 push {r3, r4, r5, lr} |
0x0005250a mov r4, r0 | r4 = r0;
0x0005250c mov r5, r2 | r5 = r2;
0x0005250e bl 0x52164 | jsonw_name ();
0x00052512 mov r1, r5 | r1 = r5;
0x00052514 mov r0, r4 | r0 = r4;
0x00052516 pop.w {r3, r4, r5, lr} |
0x0005251a b.w 0x523e4 | return void (*0x523e4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523d8 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_lluint () | void jsonw_lluint (int16_t arg1) {
| r0 = arg1;
0x000523d8 ldr r1, [pc, 4] | r1 = *(0x000523e0);
0x000523da add r1, pc | r1 += pc;
0x000523dc b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x524ec */
| #include <stdint.h>
|
; (fcn) sym.jsonw_lluint_field () | void jsonw_lluint_field (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000524ec push {r4, r5, r6, lr} |
0x000524ee mov r4, r0 | r4 = r0;
0x000524f0 mov r6, r2 | r6 = r2;
0x000524f2 mov r5, r3 | r5 = r3;
0x000524f4 bl 0x52164 | jsonw_name ();
0x000524f8 mov r2, r6 | r2 = r6;
0x000524fa mov r3, r5 | r3 = r5;
0x000524fc mov r0, r4 | r0 = r4;
0x000524fe pop.w {r4, r5, r6, lr} |
0x00052500 eors r0, r6 | r0 ^= r6;
0x00052502 b.w 0x523d8 | return void (*0x523d8)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523c8 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_luint () | void jsonw_luint (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000523c8 mov r2, r1 | r2 = r1;
0x000523ca ldr r1, [pc, 8] |
0x000523cc add r1, pc | r1 = 0xa47a6;
0x000523ce b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x524d4 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_luint_field () | void jsonw_luint_field (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000524d4 push {r3, r4, r5, lr} |
0x000524d6 mov r4, r0 | r4 = r0;
0x000524d8 mov r5, r2 | r5 = r2;
0x000524da bl 0x52164 | jsonw_name ();
0x000524de mov r1, r5 | r1 = r5;
0x000524e0 mov r0, r4 | r0 = r4;
0x000524e2 pop.w {r3, r4, r5, lr} |
0x000524e6 b.w 0x523c8 | return void (*0x523c8)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52364 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_null () | void jsonw_null (int16_t arg1) {
| r0 = arg1;
0x00052364 ldr r1, [pc, 4] | r1 = *(0x0005236c);
0x00052366 add r1, pc | r1 += pc;
0x00052368 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x5253c */
| #include <stdint.h>
|
; (fcn) sym.jsonw_null_field () | void jsonw_null_field (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0005253c push {r4, lr} |
0x0005253e mov r4, r0 | r4 = r0;
0x00052540 bl 0x52164 | jsonw_name ();
0x00052544 mov r0, r4 | r0 = r4;
0x00052546 pop.w {r4, lr} |
0x0005254a b.w 0x52364 | return void (*0x52364)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523f4 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_s64 () | void jsonw_s64 (int16_t arg1) {
| r0 = arg1;
0x000523f4 ldr r1, [pc, 4] | r1 = *(0x000523fc);
0x000523f6 add r1, pc | r1 += pc;
0x000523f8 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52520 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_s64_field () | void jsonw_s64_field (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00052520 push {r4, r5, r6, lr} |
0x00052522 mov r4, r0 | r4 = r0;
0x00052524 mov r6, r2 | r6 = r2;
0x00052526 mov r5, r3 | r5 = r3;
0x00052528 bl 0x52164 | jsonw_name ();
0x0005252c mov r2, r6 | r2 = r6;
0x0005252e mov r3, r5 | r3 = r5;
0x00052530 mov r0, r4 | r0 = r4;
0x00052532 pop.w {r4, r5, r6, lr} |
0x00052536 b.w 0x523f4 | return void (*0x523f4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523b0 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_u64 () | void jsonw_u64 (int16_t arg1) {
| r0 = arg1;
0x000523b0 ldr r1, [pc, 4] | r1 = *(0x000523b8);
0x000523b2 add r1, pc | r1 += pc;
0x000523b4 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x5246c */
| #include <stdint.h>
|
; (fcn) sym.jsonw_u64_field () | void jsonw_u64_field (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0005246c push {r4, r5, r6, lr} |
0x0005246e mov r4, r0 | r4 = r0;
0x00052470 mov r6, r2 | r6 = r2;
0x00052472 mov r5, r3 | r5 = r3;
0x00052474 bl 0x52164 | jsonw_name ();
0x00052478 mov r2, r6 | r2 = r6;
0x0005247a mov r3, r5 | r3 = r5;
0x0005247c mov r0, r4 | r0 = r4;
0x0005247e pop.w {r4, r5, r6, lr} |
0x00052482 b.w 0x523b0 | return void (*0x523b0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523a0 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_uint () | void jsonw_uint (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000523a0 mov r2, r1 | r2 = r1;
0x000523a2 ldr r1, [pc, 8] |
0x000523a4 add r1, pc | r1 = 0xa4756;
0x000523a6 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52454 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_uint_field () | void jsonw_uint_field (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00052454 push {r3, r4, r5, lr} |
0x00052456 mov r4, r0 | r4 = r0;
0x00052458 mov r5, r2 | r5 = r2;
0x0005245a bl 0x52164 | jsonw_name ();
0x0005245e mov r1, r5 | r1 = r5;
0x00052460 mov r0, r4 | r0 = r4;
0x00052462 pop.w {r3, r4, r5, lr} |
0x00052466 b.w 0x523a0 | return void (*0x523a0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x523bc */
| #include <stdint.h>
|
; (fcn) sym.jsonw_xint () | void jsonw_xint (int16_t arg1) {
| r0 = arg1;
0x000523bc ldr r1, [pc, 4] | r1 = *(0x000523c4);
0x000523be add r1, pc | r1 += pc;
0x000523c0 b.w 0x521d4 | return void (*0x521d4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/sbin/ip.iproute2 @ 0x52488 */
| #include <stdint.h>
|
; (fcn) sym.jsonw_xint_field () | void jsonw_xint_field (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00052488 push {r4, r5, r6, lr} |
0x0005248a mov r4, r0 | r4 = r0;
0x0005248c mov r6, r2 | r6 = r2;
0x0005248e mov r5, r3 | r5 = r3;
0x00052490 bl 0x52164 | jsonw_name ();
0x00052494 mov r2, r6 | r2 = r6;
0x00052496 mov r3, r5 | r3 = r5;
0x00052498 mov r0, r4 | r0 = r4;
0x0005249a pop.w {r4, r5, r6, lr} |
0x0005249e b.w 0x523bc | return void (*0x523bc)() ();
| }
[*] Function printf used 1 times ip.iproute2