首页
社区
课程
招聘
[原创]IDA输出器API指南
发表于: 2022-4-14 23:13 8976

[原创]IDA输出器API指南

2022-4-14 23:13
8976

IDA输出器使用outctx_t类管理输出,它是outctx_base_t类的一个子类实现。使用该类时,无须像《IDA权威指南》那样手动申请、释放缓冲区,但仍然需要调用flush_outbuf刷新缓冲区。
IDA为所有输出事件初始化了outctx_t对象,可以在事件处理中直接使用该对象进行输出。
输出器常用的三个事件为ev_out_insn、ev_out_mnem、ev_out_operand,分别对应输出指令、输出助记符、输出操作数。你可以直接在ev_out_insn用类似gen_printf的函数把整条指令输出,但IDA不建议这样做,因为这样将让其他人难以编写插件。当你使用out_mnemonic()时会触发ev_out_mnem事件,这让插件有机会优先处理该事件,比如你可以修改输出的字体颜色和排布让反汇编清单看起来更加美观,或者输出一些额外的信息。
IDA的多次更新后,《IDA权威指南》中IDA处理器一章部分代码已经过时。以下是基于SDK7.6汇总的一些在输出器中常用的函数和变量。

IDA中的颜色输出很受限,无法定制颜色,如有其他方法,敬请告知。

API 描述
void out_char(char c) 输出字符,无着色
void out_symbol(char c) 输出字符,用COLOR_SYMBOL着色
void out_btoa(uval_t Word, char radix=0) 以指定进制输出立即数,无着色
flags_t out_value(const op_t &x, int outf=0) 输出操作数中立即数,有着色
void out_line(const char *str, color_t color=0) 输出字符串,用指定颜色着色
void out_keyword(const char *str) 以COLOR_KEYWORD着色输出字符串
void out_register(const char *str) 以COLOR_REG着色输出字符串,一般用于输出寄存器
void out_spaces(ssize_t len) 以空格填充输出行至指定长度
void idaapi out_mnemonic(void) 输出操作数,覆盖ev_out_mnem事件可以自定义输出的形式
bool idaapi out_name_expr(const op_t &x,ea_t ea,adiff_t off=BADADDR) 输出指定地址的命名(如果存在),一般用于输出call sub_401000中的sub_401000中
bool gen_printf(int indent, const char *format, ...) 以类似printf的形式输出字符串,有着色
bool out_name_expr(const op_t &x,ea_t ea,adiff_t off=BADADDR) 将操作数的立即数引用到指定地址
void out_tagon(color_t tag) 开启着色缓冲区,之后输出的字符串用tag着色
void out_tagoff(color_t tag) 关闭着色缓冲区
void out_immchar_cmts(void) 将指令中的立即数以字符形式输出到注释中
bool flush_outbuf(int indent=-1) 刷新缓冲行,一般在输出的最后调用
颜色 描述
COLOR_REGCMT 白底蓝字
COLOR_RPTCMT 白底灰字
COLOR_AUTOCMT 白底灰字
COLOR_INSN 白底深蓝字
COLOR_DATNAME 白底深蓝字
COLOR_DNAME 白底蓝字
COLOR_DEMNAME 白底蓝字
COLOR_SYMBOL 白底深蓝字
COLOR_CHAR 白底深蓝字
COLOR_STRING 白底亮绿字
COLOR_NUMBER 白底绿字
COLOR_VOIDOP 白底浅橙字
COLOR_CREF 白底绿字
COLOR_DREF 白底淡紫字
COLOR_CREFTAIL 白底红字
COLOR_DREFTAIL 白底暗黄字
COLOR_ERROR 红底黑字
COLOR_PREFIX 白底暗红字
COLOR_BINPREF 白底蓝字
COLOR_EXTRA 白底蓝字
COLOR_ALTOP 白底蓝字
COLOR_HIDNAME 白底灰字
COLOR_LIBNAME 白底淡紫字
COLOR_LOCNAME 白底绿字
COLOR_CODNAME 白底深蓝字
COLOR_ASMDIR 白底蓝字
COLOR_MACRO 白底酒红字
COLOR_DSTR 白底绿字
COLOR_DCHAR 白底绿字
COLOR_DNUM 白底绿字
COLOR_KEYWORD 白底深蓝字
COLOR_REG 白底深蓝字
COLOR_IMPNAME 白底粉字
COLOR_SEGNAME 白底暗黄字
COLOR_UNKNAME 白底深蓝字
COLOR_CNAME 白底蓝字
COLOR_UNAME 白底深蓝字
COLOR_COLLAPSED 白底蓝字

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 100
活跃值: (2498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文,刚好在开发处理器模块,新版 SDK 太少资料了
2022-6-25 08:38
0
游客
登录 | 注册 方可回帖
返回
//