10 #include "../../asm/arch/pic/pic_midrange.h"
31 #define INST_HANDLER(OPCODE_NAME) \
32 static void _inst__##OPCODE_NAME(RzAnalysis *analysis, RzAnalysisOp *op, \
34 PicMidrangeOpArgsVal *args)
35 #define INST_DECL(NAME, ARGS) \
37 PIC_MIDRANGE_OPCODE_##NAME, PIC_MIDRANGE_OP_ARGS_##ARGS, \
41 #define e(frag) rz_strbuf_append(&op->esil, frag)
42 #define ef(frag, ...) rz_strbuf_appendf(&op->esil, frag, __VA_ARGS__)
44 #define PIC_MIDRANGE_ESIL_SRAM_START (1 << 16)
45 #define PIC_MIDRANGE_ESIL_CSTACK_TOP ((1 << 16) + (1 << 12))
47 #define PIC_MIDRANGE_ESIL_BSR_ADDR "bsr,0x80,*,0x%x,+,_sram,+"
49 #define PIC_MIDRANGE_ESIL_OPTION_ADDR "0x95,_sram,+"
51 #define PIC_MIDRANGE_ESIL_UPDATE_FLAGS \
56 #define PIC_MIDRANGE_ESIL_LW_OP(O) \
57 "0x%x,wreg," #O "=," PIC_MIDRANGE_ESIL_UPDATE_FLAGS
59 #define PIC_MIDRANGE_ESIL_FWF_OP(O) \
60 "wreg," PIC_MIDRANGE_ESIL_BSR_ADDR "," #O \
61 "=[1]," PIC_MIDRANGE_ESIL_UPDATE_FLAGS
63 #define PIC_MIDRANGE_ESIL_WWF_OP(O) \
64 PIC_MIDRANGE_ESIL_BSR_ADDR \
66 "wreg," #O "=," PIC_MIDRANGE_ESIL_UPDATE_FLAGS
68 #define PIC_MIDRANGE_ESIL_FWF_OP_C(O) \
70 "+," PIC_MIDRANGE_ESIL_BSR_ADDR "," #O \
71 "=[1]," PIC_MIDRANGE_ESIL_UPDATE_FLAGS
73 #define PIC_MIDRANGE_ESIL_WWF_OP_C(O) \
74 "c," PIC_MIDRANGE_ESIL_BSR_ADDR ",[1]," #O "," \
75 "wreg," #O "=," PIC_MIDRANGE_ESIL_UPDATE_FLAGS
93 e(
"0x1f,stkptr,==,$z,?{,BREAK,},");
94 e(
"_stack,stkptr,2,*,+,[2],2,*,pc,=,");
96 e(
"0xff,stkptr,==,$z,?{,0x1f,stkptr,=,},");
103 op->jump = 2 * (((pclath & 0x78) << 8) +
args->k);
104 ef(
"8,pclath,0x78,&,<<,0x%x,+,2,*,pc,=,",
args->k);
105 e(
"0x1f,stkptr,==,$z,?{,0xff,stkptr,=,},");
106 e(
"0x0f,stkptr,==,$z,?{,0xff,stkptr,=,},");
107 e(
"0x01,stkptr,+=,");
108 ef(
"0x%" PFMT64x ",_stack,stkptr,2,*,+,=[2],", (
addr + 2) / 2);
115 op->jump = 2 * (((pclath & 0x78) << 8) +
args->k);
116 ef(
"8,pclath,0x78,&,<<,0x%x,+,2,*,pc,=,",
args->k);
138 ef(
PIC_MIDRANGE_ESIL_BSR_ADDR ",[1],0x%x,&,!,?{,0x%" PFMT64x ",pc,=,},",
147 ef(
PIC_MIDRANGE_ESIL_BSR_ADDR ",[1],0x%x,&,?{,0x%" PFMT64x ",pc,=,},",
args->f,
156 ef(
"%s0x%x,1,+,2,*,pc,+=,",
branch < 0 ?
"-" :
"",
164 op->jump =
addr + 2 * (wreg + 1);
165 e(
"wreg,1,+,2,*,pc,+=,");
183 e(
"wreg,0x00,-,wreg,=,c,!=,dc,!=,");
197 ef(
PIC_MIDRANGE_ESIL_BSR_ADDR ",[1],!,?{,0x%" PFMT64x ",pc,=,},",
args->f,
211 ef(
PIC_MIDRANGE_ESIL_BSR_ADDR ",[1],!,?{,0x%" PFMT64x ",pc,=,},",
args->f,
300 ef(
"0x%x,wreg,=,",
args->k);
305 ef(
"0x%x,wreg,=,",
args->k);
306 e(
"0x1f,stkptr,==,$z,?{,BREAK,},");
307 e(
"_stack,stkptr,2,*,+,[2],2,*,pc,=,");
308 e(
"0x01,stkptr,-=,");
309 e(
"0xff,stkptr,==,$z,?{,0x1f,stkptr,=,},");
314 ef(
"0x%x,pclath,=,",
args->f);
319 ef(
"0x%x,bsr,=,",
args->k);
324 e(
"8,pclath,<<,0x%x,+,wreg,2,*,pc,=,");
325 e(
"0x1f,stkptr,==,$z,?{,0xff,stkptr,=,},");
326 e(
"0x0f,stkptr,==,$z,?{,0xff,stkptr,=,},");
327 e(
"0x01,stkptr,+=,");
328 ef(
"0x%" PFMT64x ",_stack,stkptr,2,*,+,=[2],", (
addr + 2) / 2);
441 ef(
"0x%x,fsr0l,+=,",
args->k);
442 e(
"7,$c,?{,0x01,fsr0h,+=,},");
444 ef(
"0x%x,fsr1l,+=,",
args->k);
445 e(
"7,$c,?{,0x01,fsr1h,+=,},");
466 e(
"wreg,0x00,-,wreg,=,c,!=,dc,!=,");
481 if (!(
args->m & 2)) {
482 ef(
"1,fsr0l,%s=,", (
args->m & 1) ?
"-" :
"+");
483 ef(
"7,$c%s,fsr0h,%s,", (
args->m & 1) ?
",!" :
"",
484 (
args->m & 1) ?
"-" :
"+");
489 ef(
"1,fsr0l,%s=,", (
args->m & 1) ?
"-" :
"+");
490 ef(
"7,$c%s,fsr0h,%s,", (
args->m & 1) ?
",!" :
"",
491 (
args->m & 1) ?
"-" :
"+");
494 if (!(
args->m & 2)) {
495 ef(
"1,fsr1l,%s=,", (
args->m & 1) ?
"-" :
"+");
496 ef(
"7,$c%s,fsr1h,%s,", (
args->m & 1) ?
",!" :
"",
497 (
args->m & 1) ?
"-" :
"+");
502 ef(
"1,fsr1l,%s=,", (
args->m & 1) ?
"-" :
"+");
503 ef(
"7,$c%s,fsr1h,%s,", (
args->m & 1) ?
",!" :
"",
504 (
args->m & 1) ?
"-" :
"+");
511 if (!(
args->m & 2)) {
512 ef(
"1,fsr0l,%s=,", (
args->m & 1) ?
"-" :
"+");
513 ef(
"$c7%s,fsr0h,%s,", (
args->m & 1) ?
",!" :
"",
514 (
args->m & 1) ?
"-" :
"+");
519 ef(
"1,fsr0l,%s=,", (
args->m & 1) ?
"-" :
"+");
520 ef(
"$c7%s,fsr0h,%s,", (
args->m & 1) ?
",!" :
"",
521 (
args->m & 1) ?
"-" :
"+");
524 if (!(
args->m & 2)) {
525 ef(
"1,fsr1l,%s=,", (
args->m & 1) ?
"-" :
"+");
526 ef(
"$c7,fsr1h,%s,", (
args->m & 1) ?
",!" :
"");
531 ef(
"1,fsr1l,%s=,", (
args->m & 1) ?
"-" :
"+");
532 ef(
"$c7%s,fsr1h,%s,", (
args->m & 1) ?
",!" :
"",
533 (
args->m & 1) ?
"-" :
"+");
540 e(
"fsr0l,8,fsr0h,<<,+,");
542 e(
"fsr1l,8,fsr1h,<<,+,");
544 ef(
"0x%x,+,[1],wreg,=,",
args->k);
550 e(
"fsr0l,8,fsr0h,<<,+,");
552 e(
"fsr1l,8,fsr1h,<<,+,");
557 #define PIC_MIDRANGE_OPINFO_LEN 52
663 static bool init_done =
false;
665 if (!init_done || force) {
740 ut32 dword_instr = 0;
747 if (dword_instr >> 28 != 0xf) {
775 if (dword_instr >> 28 != 0xf) {
821 if (dword_instr >> 28 != 0xf) {
826 op->jump = ((dword_instr & 0xff) | ((dword_instr & 0xfff0000) >> 8)) * 2;
834 rz_strbuf_setf(&
op->esil,
"0x%x,wreg,+=,$z,z,:=,7,$s,n,:=,7,$c,c,:=,7,$o,ov,:=,", *(
ut16 *)
buf & 0xff);
854 rz_strbuf_setf(&
op->esil,
"0x%x,wreg,&=,$z,z,:=,7,$s,n,:=,", *(
ut16 *)
buf & 0xff);
859 rz_strbuf_setf(&
op->esil,
"0x%x,wreg,^=,$z,z,:=,7,$s,n,:=,", *(
ut16 *)
buf & 0xff);
864 rz_strbuf_setf(&
op->esil,
"0x%x,wreg,^=,$z,z,:=,7,$s,n,:=,", *(
ut16 *)
buf & 0xff);
870 rz_strbuf_setf(&
op->esil,
"wreg,0x%x,-,wreg,=,$z,z,:=,7,$s,n,:=,7,$c,c,:=,7,$o,ov,:=,", *(
ut16 *)
buf & 0xff);
879 if (dword_instr >> 28 != 0xf) {
1016 "gpr indf0 .8 0 0\n"
1017 "gpr indf1 .8 1 0\n"
1019 "gpr status .8 3 0\n"
1025 "gpr fsr0l .8 4 0\n"
1026 "gpr fsr0h .8 5 0\n"
1027 "gpr fsr1l .8 6 0\n"
1028 "gpr fsr1h .8 7 0\n"
1031 "gpr pclath .8 10 0\n"
1032 "gpr intcon .8 11 0\n"
1034 "gpr stkptr .8 14 0\n"
1035 "gpr _sram .32 15 0\n"
1036 "gpr _stack .32 19 0\n";
1042 "#pc lives in nowhere actually"
1049 "gpr pclath .8 1 0\n"
1050 "gpr pclatu .8 2 0\n"
1051 "#bsr max is 0b111\n"
1053 "#tos doesn't exist\n"
1054 "#general rule of thumb any register of size >8 bits has no existence\n"
1060 "gpr indf0 .16 9 0\n"
1061 "gpr fsr0 .12 9 0\n"
1062 "gpr fsr0l .8 9 0\n"
1063 "gpr fsr0h .8 10 0\n"
1064 "gpr indf1 .16 11 0\n"
1065 "gpr fsr1 .12 11 0\n"
1066 "gpr fsr1l .8 11 0\n"
1067 "gpr fsr1h .8 12 0\n"
1068 "gpr indf2 .16 13 0\n"
1069 "gpr fsr2 .12 13 0\n"
1070 "gpr frs2l .8 13 0\n"
1071 "gpr fsr2h .8 14 0\n"
1072 "gpr tblptr .22 15 0\n"
1073 "gpr tblptrl .8 15 0\n"
1074 "gpr tblptrh .8 16 0\n"
1075 "gpr tblptru .8 17 0\n"
1076 "gpr rcon .8 18 0\n"
1077 "gpr memcon .8 19 0\n"
1078 "gpr intcon .8 20 0\n"
1079 "gpr intcon2 .8 21 0\n"
1080 "gpr intcon3 .8 22 0\n"
1081 "gpr pie1 .8 23 0\n"
1082 "gpr porta .7 29 0\n"
1083 "gpr trisa .8 30 0\n"
1084 "gpr portb .8 33 0\n"
1085 "gpr tisb .8 34 0\n"
1086 "gpr latb .8 35 0\n"
1087 "gpr portc .8 36 0\n"
1088 "gpr trisc .8 37 0\n"
1089 "gpr latc .8 38 0\n"
1090 "gpr portd .8 39 0\n"
1091 "gpr trisd .8 40 0\n"
1092 "gpr latd .8 41 0\n"
1093 "gpr pspcon .8 42 0\n"
1094 "gpr porte .8 43 0\n"
1095 "gpr trise .8 44 0\n"
1096 "gpr late .8 45 0\n"
1097 "gpr t0con .8 46 0\n"
1098 "gpr t1con .8 47 0\n"
1099 "gpr t2con .8 48 0\n"
1100 "gpr tmr1h .8 50 0\n"
1101 "gpr tmr0h .8 51 0\n"
1102 "gpr tmr1l .8 52 0\n"
1103 "gpr tmr2 .8 53 0\n"
1105 "gpr ccpr1h .8 55 0\n"
1106 "gpr postinc2 .8 56 0\n"
1107 "gpr ccpr1l .8 57 0\n"
1108 "gpr postdec2 .8 58 0\n"
1109 "gpr ccp1con .8 59 0\n"
1110 "gpr preinc2 .8 60 0\n"
1111 "gpr ccpr2h .8 61 0\n"
1112 "gpr plusw2 .8 62 0\n"
1113 "gpr ccpr2l .8 63 0\n"
1114 "gpr ccp2con .8 64 0\n"
1115 "gpr status .8 65 0\n"
1117 "flg dc .1 .521 0\n"
1119 "flg ov .1 .523 0\n"
1121 "gpr prod .16 66 0\n"
1122 "gpr prodl .8 66 0\n"
1123 "gpr prodh .8 67 0\n"
1124 "gpr osccon .8 68 0\n"
1125 "gpr tmr3h .8 69 0\n"
1126 "gpr lvdcon .8 70 0\n"
1127 "gpr tmr3l .8 71 0\n"
1128 "gpr wdtcon .8 72 0\n"
1129 "gpr t3con .8 73 0\n"
1130 "gpr spbrg .8 74 0\n"
1131 "gpr postinc0 .8 75 0\n"
1132 "gpr rcreg .8 76 0\n"
1133 "gpr postdec0 .8 77 0\n"
1134 "gpr txreg .8 78 0\n"
1135 "gpr preinc0 .8 79 0\n"
1136 "gpr txsta .8 80 0\n"
1137 "gpr plusw0 .8 81 0\n"
1138 "gpr rcsta .8 82 0\n"
1139 "gpr sspbuf .8 83 0\n"
1140 "gpr wreg .8 84 0\n"
1141 "gpr sspadd .8 85 0\n"
1142 "gpr sspstat .8 86 0\n"
1143 "gpr postinc1 .8 87 0\n"
1144 "gpr sspcon1 .8 88 0\n"
1145 "gpr postdec1 .8 89 0\n"
1146 "gpr sspcon2 .8 90 0\n"
1147 "gpr preinc1 .8 91 0\n"
1148 "gpr adresh .8 92 0\n"
1149 "gpr plusw1 .8 93 0\n"
1150 "gpr adresl .8 94 0\n"
1151 "gpr adcon0 .8 95 0\n"
1152 "#stkprt max is 0b11111\n"
1153 "gpr stkptr .8 96 0\n"
1154 "gpr tablat .8 14 0\n";
1160 if (analysis->
cpu && strcasecmp(analysis->
cpu,
"baseline") == 0) {
1164 if (analysis->
cpu && strcasecmp(analysis->
cpu,
"midrange") == 0) {
1167 if (analysis->
cpu && strcasecmp(analysis->
cpu,
"pic18") == 0) {
1174 if (analysis->
cpu && strcasecmp(analysis->
cpu,
"baseline") == 0) {
1178 if (analysis->
cpu && strcasecmp(analysis->
cpu,
"midrange") == 0) {
1181 if (analysis->
cpu && strcasecmp(analysis->
cpu,
"pic18") == 0) {
1189 .desc =
"PIC analysis plugin",
1198 #ifndef RZ_PLUGIN_INCORE
#define PIC_MIDRANGE_ESIL_WWF_OP_C(O)
static int analysis_pic_pic18_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len)
#define PIC_MIDRANGE_ESIL_CSTACK_TOP
static int analysis_pic_midrange_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len)
struct _pic_midrange_op_analysis_info PicMidrangeOpAnalInfo
RzAnalysisPlugin rz_analysis_plugin_pic
static RzIODesc * mem_sram
#define PIC_MIDRANGE_ESIL_BSR_ADDR
static char * analysis_pic_midrange_get_reg_profile(RzAnalysis *esil)
#define PIC_MIDRANGE_ESIL_FWF_OP(O)
struct _pic_midrange_op_args_val PicMidrangeOpArgsVal
#define PIC_MIDRANGE_ESIL_WWF_OP(O)
static char * analysis_pic_pic18_get_reg_profile(RzAnalysis *esil)
RZ_API RzLibStruct rizin_plugin
#define PIC_MIDRANGE_OPINFO_LEN
static const PicMidrangeOpAnalInfo pic_midrange_op_analysis_info[PIC_MIDRANGE_OPINFO_LEN]
static RzIODesc * cpu_memory_map(RzIOBind *iob, RzIODesc *desc, ut32 addr, ut32 size)
static void analysis_pic_midrange_extract_args(ut16 instr, PicMidrangeOpArgs args, PicMidrangeOpArgsVal *args_val)
void(* pic_midrange_inst_handler_t)(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, PicMidrangeOpArgsVal *args)
static void pic18_cond_branch(RzAnalysisOp *op, ut64 addr, const ut8 *buf, char *flag)
#define INST_HANDLER(OPCODE_NAME)
#define PIC_MIDRANGE_ESIL_FWF_OP_C(O)
static char * analysis_pic_get_reg_profile(RzAnalysis *analysis)
static bool pic_midrange_reg_write(RzReg *reg, const char *regname, ut32 num)
static RzIODesc * mem_stack
#define PIC_MIDRANGE_ESIL_LW_OP(O)
static void analysis_pic_midrange_malloc(RzAnalysis *analysis, bool force)
#define INST_DECL(NAME, ARGS)
static int analysis_pic_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask)
#define PIC_MIDRANGE_ESIL_SRAM_START
RZ_API int rz_analysis_esil_reg_read(RzAnalysisEsil *esil, const char *regname, ut64 *num, int *size)
RZ_API void Ht_() free(HtName_(Ht) *ht)
return memset(p, 0, total)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
static static fork const void static count static fd const char const char static newpath char char char static envp time_t static t const char static mode static whence const char static dir time_t static t unsigned static seconds const char struct utimbuf static buf static inc static sig const char static mode static oldfd struct tms static buf static getgid static geteuid const char static filename static arg static mask struct ustat static ubuf static getppid static setsid static egid sigset_t static set struct timeval struct timezone static tz fd_set fd_set fd_set struct timeval static timeout const char char static bufsiz const char static swapflags void static offset const char static length static mode static who const char struct statfs static buf unsigned unsigned num
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
PicMidrangeOpcode pic_midrange_get_opcode(ut16 instr)
#define PIC_MIDRANGE_OP_ARGS_1D_7F_MASK_F
#define PIC_MIDRANGE_OP_ARGS_3B_7F_MASK_F
#define PIC_MIDRANGE_OP_ARGS_1D_7F_MASK_D
#define PIC_MIDRANGE_OP_ARGS_3B_7F_MASK_B
#define PIC_MIDRANGE_OP_ARGS_1N_6K_MASK_N
#define PIC_MIDRANGE_OP_ARGS_2F_MASK_F
#define PIC_MIDRANGE_OP_ARGS_1N_2M_MASK_M
#define PIC_MIDRANGE_OP_ARGS_4K_MASK_K
#define PIC_MIDRANGE_OP_ARGS_9K_MASK_K
#define PIC_MIDRANGE_OP_ARGS_1N_2M_MASK_N
#define PIC_MIDRANGE_OP_ARGS_11K_MASK_K
#define PIC_MIDRANGE_OP_ARGS_7F_MASK_F
@ PIC_MIDRANGE_OP_ARGS_11K
@ PIC_MIDRANGE_OP_ARGS_2F
@ PIC_MIDRANGE_OP_ARGS_4K
@ PIC_MIDRANGE_OP_ARGS_1D_7F
@ PIC_MIDRANGE_OP_ARGS_9K
@ PIC_MIDRANGE_OP_ARGS_1N_6K
@ PIC_MIDRANGE_OP_ARGS_8K
@ PIC_MIDRANGE_OP_ARGS_1N_2M
@ PIC_MIDRANGE_OP_ARGS_NONE
@ PIC_MIDRANGE_OP_ARGS_3B_7F
@ PIC_MIDRANGE_OP_ARGS_7F
#define PIC_MIDRANGE_OP_ARGS_1N_6K_MASK_K
#define PIC_MIDRANGE_OP_ARGS_8K_MASK_K
RZ_API RzRegItem * rz_reg_get(RzReg *reg, const char *name, int type)
RZ_API bool rz_reg_set_value(RzReg *reg, RzRegItem *item, ut64 value)
@ RZ_ANALYSIS_OP_TYPE_CMP
@ RZ_ANALYSIS_OP_TYPE_SUB
@ RZ_ANALYSIS_OP_TYPE_LOAD
@ RZ_ANALYSIS_OP_TYPE_UNK
@ RZ_ANALYSIS_OP_TYPE_MUL
@ RZ_ANALYSIS_OP_TYPE_ROL
@ RZ_ANALYSIS_OP_TYPE_JMP
@ RZ_ANALYSIS_OP_TYPE_AND
@ RZ_ANALYSIS_OP_TYPE_UJMP
@ RZ_ANALYSIS_OP_TYPE_ROR
@ RZ_ANALYSIS_OP_TYPE_CALL
@ RZ_ANALYSIS_OP_TYPE_ADD
@ RZ_ANALYSIS_OP_TYPE_STORE
@ RZ_ANALYSIS_OP_TYPE_CPL
@ RZ_ANALYSIS_OP_TYPE_PUSH
@ RZ_ANALYSIS_OP_TYPE_SHR
@ RZ_ANALYSIS_OP_TYPE_POP
@ RZ_ANALYSIS_OP_TYPE_CJMP
@ RZ_ANALYSIS_OP_TYPE_MOV
@ RZ_ANALYSIS_OP_TYPE_SHL
@ RZ_ANALYSIS_OP_TYPE_ILL
@ RZ_ANALYSIS_OP_TYPE_UCALL
@ RZ_ANALYSIS_OP_TYPE_RET
@ RZ_ANALYSIS_OP_TYPE_NOP
@ RZ_ANALYSIS_OP_TYPE_XOR
static ut16 rz_read_le16(const void *src)
RZ_API char * rz_str_newf(const char *fmt,...) RZ_PRINTF_CHECK(1
RZ_API const char * rz_strbuf_setf(RzStrBuf *sb, const char *fmt,...) RZ_PRINTF_CHECK(2
pic_midrange_inst_handler_t handler
RzIOFdGetName fd_get_name
ut64(WINAPI *w32_GetEnabledXStateFeatures)()
static char * regname(int reg)