首页
社区
课程
招聘
[旧帖] IDA插件编程 0.00雪花
发表于: 2011-5-18 10:17 5993

[旧帖] IDA插件编程 0.00雪花

2011-5-18 10:17
5993
如何获得API函数的参数个数…
数据段中API函数定义时,注释中有函数调用参数的定义,但不知道怎么获得…

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 116
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请参考《ida pro 权威指南》!
2011-5-18 10:54
0
雪    币: 1137
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
试了蛮多种方式了,也没给弄出来

实在没找到相关的api
2011-5-18 14:04
0
雪    币: 316
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
就是要获取定义在数据段中有关参数的信息
也就是

的这句话

,用了反汇编这个地址的方法也不行,只能求助于各位大虾了。。。。

或者用别的方法也行,只要能获取API参数个数就行。。。。
上传的附件:
2011-5-18 15:08
0
雪    币: 316
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那本书我也看了,没找到合适的方法啊,你有什么好的方法没有,谢谢啦。。
2011-5-18 15:10
0
雪    币: 316
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我又补充了,你看看这回有合适的方法么,谢谢啦。。
2011-5-18 15:11
0
雪    币: 1137
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
我明白你的意思,可是中午翻了两个小时,也试了不少api,都没能得到这一块的数据~~我也郁闷了
2011-5-18 22:46
0
雪    币: 2242
活跃值: (488)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
8
    if ( get_ti(ea, type, sizeof(type), fnames, sizeof(fnames))
      && print_type_to_one_line(
                decl, sizeof(decl),
                idati,
                type,
                true_name,
                NULL,
                fnames) == T_NORMAL )
    {
//    found type info -- calc the args size
      ulong arglocs[MAX_FUNC_ARGS];
      type_t *types[MAX_FUNC_ARGS];
      char *names[MAX_FUNC_ARGS];
      int a = build_funcarg_arrays(type, fnames, arglocs, types, names, MAX_FUNC_ARGS, false);
      if ( a != 0 )
      {
        for ( int k=0; k < a; k++ )
        {
          const type_t *ptr = types[k];
          int s1 = get_type_size(idati, ptr);
          s1 = qmax(s1, inf.cc.size_i);
          argsize += s1;
        }
        free_funcarg_arrays(types, names, a);
      }
    }
    else if ( get_long_name(BADADDR, ea, decl, sizeof(decl)) != NULL
           && get_true_name(BADADDR, ea, true_name, sizeof(true_name)) != NULL
           && strcmp(decl, true_name) != 0 )
    {
//      found mangled name
    }
    else
    {
//      found nothing, just show the name
      qstrncpy(decl, get_name(BADADDR, ea, true_name, sizeof(true_name)), sizeof(decl));
    }
    if ( argsize == 0 )
    {
      func_t *pfn = get_func(ea);
      if ( pfn != NULL )
        argsize = pfn->argsize;
    }


copy自 ida5sdk\plugins\funclist\funclist.cpp
2011-5-18 23:28
0
雪    币: 1137
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
谢谢"疯子"指点:)已测试

中午可是把sdk翻来翻去的,试了不少api,从界面的操作上按"Y"键也知道了是type类型,不过怎么也没找到get_ti以及print_type_to_one_line,看来sdk里面的插件源码还是非常值得学习的..之前忽视了

谢谢:)
2011-5-19 00:45
0
游客
登录 | 注册 方可回帖
返回
//