使用IDA的map文件好像只是生成label可以转到OD中。
那么comment如何转到OD中呢?
发到新兵论坛没有响应,发到这里请高手指点下。

  • 标 题:答复
  • 作 者:terren
  • 时 间:2008-03-07 11:49

个人的一些幼稚理解,供各位朋友参考讨论。
      昨天晚上想了想,今天上午认真看了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和各位朋友参考讨论。