/
/
[
*
]表示必须设置的字段
struct processor_t
{
int32 version;
/
/
[
*
]必须为IDP_INTERFACE_VERSION
int32
id
;
/
/
[
*
]自定义的处理器模块必要大于
0x8000
uint32 flag;
/
/
以PR_开头的flag组合,根据需要添加,可以设置为
0
uint32 flag2;
/
/
以PR2_开头的flag组合,根据需要添加,可以设置为
0
int32 cnbits;
/
/
[
*
]代码段中
1
个字节有多少个bit可用,设置为
8
即可
int32 dnbits;
/
/
[
*
]非代码段中
1
个字节有多少个bit可用,设置为
8
即可
const char
*
const
*
psnames;
/
/
[
*
]处理器模块的短名称,最多
9
个字符,数组以NULL指针结尾
const char
*
const
*
plnames;
/
/
[
*
]处理器模块的长名称,长度不限,数组以NULL指针结尾
const asm_t
*
const
*
assemblers ;
/
/
汇编清单,可以设置为{ NULL },数组以NULL指针结尾
hook_cb_t
*
_notify;
/
/
[
*
]事件通知的回调函数,在该函数中处理IDA发出的各种事件,包括ev_ana_insn、ev_emu_insn、ev_out_insn、ev_out_operand,上述四个事件分别对应旧版SDK的
4
个回调函数
const char
*
const
*
reg_names;
/
/
[
*
]寄存器名称数组
int32 regs_num;
/
/
[
*
]寄存器名称数组的元素个数
int32 reg_first_sreg;
/
/
第一个段寄存器的序号,可以设置为rVcs
int32 reg_last_sreg;
/
/
最后一个段寄存器的序号,可以设置为rVds
int32 segreg_size;
/
/
段寄存器大小,单位为字节,可以设置为
0
int32 reg_code_sreg;
/
/
代码段寄存器,可以设置为rVcs
int32 reg_data_sreg;
/
/
数据段寄存器,可以设置为rVds
const bytes_t
*
codestart;
/
/
代码
/
函数开始的特征码,可以设置为NULL
const bytes_t
*
retcodes;
/
/
代码
/
函数结束的特征码,可以设置为NULL
int32 instruc_start;
/
/
[
*
]指令枚举的第一个数
int32 instruc_end;
/
/
[
*
]指令枚举的最后一个数,枚举最后一个数设置为XXX_LAST,
const instruc_t
*
instruc;
/
/
[
*
]定义指令的汇编输出和操作数属性,要与指令枚举一一对应
size_t tbyte_size;
/
/
长浮点(
long
double)类型的大小,单位为字节,可以设置为
0
char real_width[
4
];
/
/
浮点数中小数点后位数,用于浮点数显示时保留多少位,可以设置为{
0
}
int32 icode_return;
/
/
返回指令的指令码(指令枚举),可以设置为非指令枚举中的元素,一般设置为XXX_NULL(指令枚举的第一个元素)
void
*
unused_slot;
/
/
预留,设置为NULL
};