码迷,mamicode.com
首页 > 其他好文 > 详细

获得函数大小

时间:2016-03-22 06:18:45      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

   在网上找了好久的获得函数大小方法,也没找到很好的方法,在看雪论坛上看的也就是递归找返回点,将所有返回插入一个链表,然后根据最下面的返回点确定函数末尾得到大小。

   还有同学一直说的可以遍历符号文件pdb来得到函数大小,我也没有尝试过-_-

   最近在看IDA Pro权威指南,刚好看到IDC脚本,当发现可以通过脚本语言函数 GetFunctionAttr(addr,FUNCATTR_END) 得到函数结束地址,真的是特别兴奋,因为困惑好久的问题终于解决了,就是检测InLine的时候该检测多少字节,网上的方法大多都是检测前5个字节,但是很多杀软的hook点都在函数中间的很猥琐的地方,但是PC Hunter又能检测出来,应该是通过函数大小比较的。

   将Ntoskrnl.exe拖入IDA之后,按Shift+F2,打开IDC脚本界面,写入下面的这段脚本

 1 #include<idc.idc>
 2 static main()
 3 {
 4   auto addr,end,name,number;
 5   addr = 0;
 6   for(addr = NextFunction(addr);addr != BADADDR ; addr = NextFunction(addr))
 7   {
 8     name = Name(addr);
 9     end = GetFunctionAttr(addr,FUNCATTR_END);
10     number = end-addr;
11     Message("L\"%s\",%x\n",name,number);
12   }
13 }

  这样,就能在输出界面打印各个函数的名称和大小了,这里由于没有找到比较字符的函数,所以打印的是所有ntoskrnl.exe函数的大小和名称,如果   要找SSDT函数就要自己一个个去找了。

  越用IDA越觉得这款反汇编引擎的强大,继续努力吧。

获得函数大小

标签:

原文地址:http://www.cnblogs.com/aliflycoris/p/5304469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!