首页
社区
课程
招聘
[求助]IDA插件编写中如何添加注释呢
2007-10-22 20:05 19132

[求助]IDA插件编写中如何添加注释呢

2007-10-22 20:05
19132
收藏
点赞7
打赏
分享
最新回复 (21)
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 30 2007-10-22 21:03
2
0
set_cmt

有篇E文的教程,名字记不住了自己找找
也可以翻翻SDK的头文件
雪    币: 8021
活跃值: (1688)
能力值: ( LV8,RANK:122 )
在线值:
发帖
回帖
粉丝
SnowFox 2007-10-22 22:54
3
0
谢谢, 可以了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
月夜野狼 2007-11-7 01:32
4
0
可以了就写出来,让我们这些菜鸟也学习一下嘛
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-11-8 12:21
5
0
以下头函数定义摘自IDA SDK 5.1
 
//--------------------------------------------------------------------------
//      I N D E N T E D  C O M M E N T S
//--------------------------------------------------------------------------
// Set an indented comment
//      ea     - linear address         有效地址,比如在IDA的反汇编代码中,
//                                      有这么一行:.text:00404108         push    ebp
//                                      则有效地址即为404108。
//
//      comm   - comment string         要添加的注释内容。
//
//      rptble - is repeatable?         是否设置成可重复性注释,设置为true,则是可重复性注释
// returns: 1-ok, 0-failure             返回1表示成功,0表示错误。

idaman bool ida_export set_cmt(ea_t ea, const char *comm, bool rptble);


楼上的朋友,可能你已经知道怎么用这个set_cmt函数,下面的代码十分简单地在IDA光标所在的一行,添加了可重复性注释,

    ea_t current = get_screen_ea();         //返回当前光标所在的有效地址,
    bool ret = set_cmt(current, "添加成功", true);
    if (ret)
    {
        info("添加注释成功");
    }
    else
    {
        warning("添加注释错误");
    }
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 30 2007-11-8 18:18
6
0
repeatable==可重复
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-11-8 20:37
7
0
softworm,谢谢你指出我的错误,
是我翻译错误了,repeatable是你解释的这个意思,”重复的“。

我有一点不明白的是,
好像在IDA里按下分号键,就弹出repeatable comment对话框,
比如输入“逆向”二字,注释显示 “逆向”。

再在同一行,按下Shift+分号键,则弹出一个Enter comment对话框,
输入“工程”二字,注释就被覆盖成 “工程",刚才输入的”逆向“,就看不到了,
而且,按下分号键,还能看到,”逆向“还在那里。

这样感觉,就好象有点被替换的感觉,为什么会这样的 设计?
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 30 2007-11-8 20:50
8
0
按分号输入的注释,所有交叉参考处都会出现,按冒号(你的是Shift+分号? 我不知道 )
的注释只在该处出现,如果一个地址有2种注释,在该地址只会显示非重复注释.

我只是随手写的,没有查帮助,希望没错
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-11-11 14:24
9
0
是啊,经过一些简单测试,正如你所说,可重复注释
添加在一个有参考引用的地址,那么被参考引用的地方
也会出现同样的注释。
    形如:
0040EA21         jnz     short loc_40EA3F ; 测试
……

0040EA3F loc_40EA3F:                   ; CODE XREF: sub_40E9B0+71j
0040EA3F         cmp     edi, ebx      ; 测试

     在40EA3F处的“测试”二字是手动添加的,而0040EA21处的注释,
则是IDA自动添加的。
     而非重复性注释,则IDA不会自动添加注释。
softworm,你说的是正确的。
雪    币: 79
活跃值: (30)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
nnhy 3 2007-11-13 08:52
10
0
很想很想好好学学IDA SDK,但是我不怎么喜欢这样编写代码

想问一下,IDA的SDK一共有多少个API?我上次看到一篇文章,如何用VB和C#编写IDA插件的,原理其实就是做一个COM,然后真正的插件是C++写的,负责调用那个COM,也就是一个代理而已。如果API不多,我想做一个支持全部API的C++代理,方便使用C#来编写IDA插件^_^

还有,IDA的API函数在不同的版本更新是否频繁?

如果只有几十个、一百多个,并且更新不频繁的话,肯定很容易做到的。
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-11-13 15:56
11
0
nnhy,你说的比较高深,C#和COM这些我都不懂,
    你的想法可能会很高效,支持你的思路,如果需要我做
什么,你说一声,你说在这个帖子里讨论具体细节如何?
我们也好跟你学习COM和C#。
:)
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 30 2007-11-13 22:51
12
0
我觉得这样反而更复杂了
雪    币: 79
活跃值: (30)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
nnhy 3 2007-11-14 20:52
13
0
如果这是一个简单的功能,当然是C++来的简单,但是如果要做一些比较强大一点的功能,代码量非常多的那种,可就是C#好写了,并且还可以借助强大的开发工具。

我分析软件绝大多数都是使用IDA,很少使用OD。在用IDA的时候,经常需要做很多无聊的重复的手工工作,我就想着以后用插件来实现它^_^

用C#来写插件,效率肯定比C++要低,但是它更适合于构架一个很复杂的程序而不至于显得零乱。
其实我的C++用起来比C#还要熟悉得多
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-11-15 07:55
14
0
nnhy,你认为C#可以设计IDA插件的UI界面的吗?
C#和COM,有什么入门书籍吗?指导一下?
雪    币: 79
活跃值: (30)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
nnhy 3 2007-11-16 16:36
15
0
这个东西,不是认为可以不可以,而是我实际上已经做出来了。

相关的技术难点我也已经一一记录下来了,剩下的工作,我需要有人来帮忙
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
daniao 2007-11-19 13:56
16
0
我以前也遇到过这个问题
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-12-6 04:18
17
0
唉,机器也没得用,nnhy说的正事,我差点忘了。
      见鬼,这阵子,在下过得跟老鼠一样,每天找工作,
送维修好的机器到客户家,车费还得自己出。
    up nnhy。
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2007-12-6 04:28
18
0
nnhy,希望你能成功,要我做什么,就说吧。
雪    币: 79
活跃值: (30)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
nnhy 3 2007-12-6 15:31
19
0
呵呵,我睡得晚,想不到你比我更晚。

其实我已经成功了一半,至少我成功导出函数,成功在IDA上显示C#做的界面了。

只是,我现在是手工在C++中添加导出函数的,如果能自己把IDA的函数导出来就好了。

如果你要帮忙的话,最好能把所有函数整理一下^_^,然后我写程序去读取,生成c++代码,再编译导出。

目前正在全力研究一个分析COM生成IDC的程序,几乎已经完成了,过几天发布,同时提供源码下载。

今天上来是有一个问题,如何使用IDC在结构体成员中添加注释?这里没有地址行,不知道该怎么做。既然手工可以添加,我想IDC应该也可以。
雪    币: 141
活跃值: (1125)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
mavermaver 3 2008-1-11 15:05
20
0
可以试一试如下两个IDC函数:
SetMemberComment 和 SetStrucComment。

long SetMemberComment(long id,long member_offset,string comment,long repeatable);

long SetStrucComment(long id,string comment,long repeatable);
雪    币: 254
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
terren 1 2008-2-25 21:50
21
0
自己up一下.
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
filx 2008-2-26 13:25
22
0
通过callui(ui_get_hwnd).vptr可以获得IDA窗口句柄,直接创建子窗口就行了.
游客
登录 | 注册 方可回帖
返回