个人的一些幼稚理解,供各位朋友参考讨论。
昨天晚上想了想,今天上午认真看了OD的SDK文档,
和IDA的SDK接口。
IDA的bytes.hpp头文件中的get_cmt接口可以获取
被反汇编文件中的指定地址的注释,定义如下:
// Get an indented comment
// ea - linear address. may point to tail byte, the function
// will find start of the item
// rptble - get repeatable comment?
// buf - output buffer, may be NULL
// bufsize - size of output buffer
// Returns: size of comment or -1
idaman ssize_t ida_export get_cmt(ea_t ea, bool rptble, char *buf, size_t bufsize);
然后又在OD的SDK文档中,发现一组名为Name functions的接口中有一个
叫做Insertname的函数,定义如下:
int Insertname(ulong addr,int type,char *name);
addr是虚拟地址,type若设置为NM_COMMENT,就可在指定地址处添加自定义的
注释,name为注释的内容。
有了这两个接口,就简单测试了一下,先用IDA 4.9反汇编了w2k下的扫雷程序
winmine.exe,然后在winmine的WinMain函数中,0x1001426地址处,手动添加了“模块句柄”一行注释,
如图
然后用get_cmt在IDA插件中,获取这个地址的注释,如下:
/************************************************************************/
/* */
/* !注意:测试起见,addr变量用了硬编码 */
/* */
/************************************************************************/
ea_t addr = 0x1001426;
char comment[MAXSTR]; // 保存注释的缓冲区
// 获取指定地址的注释
get_cmt(addr, false, comment, MAXSTR);
msg("%x处的注释为:%s", addr, comment);
运行这段代码后,IDA的日志窗口显示了刚才手动添加的注释,
如下图:
接下来就是测试OD的添加注释接口了,我简单修改了olly提供的
cmdline插件源代码中的ODBG_Pluginaction函数,在其中一个分支
里添加如下代码,
/************************************************************************/
/* */
/* !注意:测试起见,Insertname函数用了硬编码 */
/* */
/************************************************************************/
Insertname( 0x1001426, NM_COMMENT, "模块句柄");
这样,编译好修改后的cmdline插件,当祭起OD的时候,
用OD加载winmine,运行插件,然后就可以看到OD里面也自动
添加了注释。
个人的一些简单想法,供wangdell和各位朋友参考讨论。
上传的附件: