-
-
[原创]IDA输出器API指南
-
发表于:
2022-4-14 23:13
8939
-
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直播授课