获得函数大小

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

还有同学一直说的可以遍历符号文件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越觉得这款反汇编引擎的强大,继续努力吧。

时间: 2024-11-03 22:05:28

获得函数大小的相关文章

Matlab:max函数

Matlab中max函数在矩阵中求函数大小的实例如下: C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一行向量包含了每一列的最大元素.如果A是多为数组,max(A) treats the values along the first non-singleton dimension as vectors, returning the maximum value of each ve

matlab 中max函数用法

Matlab中max函数在矩阵中求函数大小的实例如下:(1)C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的每一列作为一个向量,返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值. 如果A是多维数组,max(A) treats the values along the first non-singleton dimension as vectors, returning the maximum v

Python函数设计原则

在任何编程语言中,函数的应用主要出于以下两种情况: 代码块重复,这时候必须考虑用到函数,降低程序的冗余度 代码块复杂,这时候可以考虑用到函数,增强程序的可读性 当流程足够繁杂时,就要考虑函数,及如何将函数组合在一起.在Python中做函数设计,主要考虑到函数大小.聚合性.耦合性三个方面,这三者应该归结于规划与设计的范畴.高内聚.低耦合则是任何语言函数设计的总体原则. 如何将任务分解成更有针对性的函数从而导致了聚合性 如何设计函数间的通信则又涉及到耦合性 如何设计函数的大小用以加强其聚合性及降低其

hdu 5105 求函数极值 函数求导/三分法

http://acm.hdu.edu.cn/showproblem.php?pid=5105 给定a,b,c,d,l,r,表示有一个函数f(x)=|a?x3+b?x2+c?x+d|(L≤x≤R),求函数最大值. 考虑极点可能有0~2个.在极值点处函数的单调性会发生变化,所以最大值一定就在区间边界和极值点上.所以求下l,r,极值点的函数大小然后取最大的即可. #include <cstdio> #include <cstdlib> #include <cmath> #in

python爬虫总结

主要涉及的库 requests 处理网络请求 logging 日志记录 threading 多线程 Queue 用于线程池的实现 argparse shell参数解析 sqlite3 sqlite数据库 BeautifulSoup html页面解析 urlparse 对链接的处理 关于requests 我没有选择使用python的标准库urllib2,urllib2不易于代码维护,修改起来麻烦,而且不易扩展, 总体来说,requests就是简单易用,如requests的介绍所说: built f

编程的智慧(王垠)(http://www.cocoachina.com/programmer/20151125/14410.html)

编程是一件创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称三天瘦二十斤的减肥药,它并不能代替你自己的勤奋.然而我希望它能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获. 反复推敲代码 既然“天才是百分之一的灵感,百分之九十九的汗水”,那我先来谈谈这汗水的部分吧.有人问我,提高编程水平最有效的办法是什么?我想了很久,终于发现最有效的办法,其实是反反复复地修改和推敲代码. 在IU的时候,由于Dan Friedman

【C++探索之旅】第一部分第九课:数组威武,动静合一

内容简介 1.第一部分第九课:数组威武,动静合一 2.第一部分第十课预告:文件读写,海阔凭鱼跃 数组威武,动静合一 上一课<[C++探索之旅]第一部分第八课:传值引用,文件源头>中,我们学习了函数参数的不同传递形式:值传递和引用传递,也学习了如何用头文件和源文件来更好地组织项目. 在不少程序中,我们都需要使用多个相同类型的变量.例如:一个网站的用户名列表(一般是string类型):或者一场比赛的前10个最佳得分(一般是int类型). 类似地,C++和大多数编程语言一样,也有将多个相同类型的数据

一种简单的ELF加固方法

介绍一种ELF文件函数粒度的加固方法,可以有效防止对程序的静态分析.这是一种有源码加固方式,需要被加固程序中代码配合.加固流程如下: 1)读取ELF文件头,获取e_phoff和e_phnum2)通过Elf64_Phdr中的p_type字段,找到DYNAMIC3)遍历.dynamic,找到.dynsym..dynstr 节区偏移,和.dynstr节区的大小4)遍历.dynsym,找到函数对应的Elf64_Sym符号后,根据st_value和st_size字段找到函数在ELF的偏移和函数大小5)根据

leNET——网络结构prototxt的详解

leNET算是caffe学习的第一个例子了,例子来源于caffe官网:http://caffe.berkeleyvision.org/gathered/examples/mnist.html 接口部分都用python写好,所以只跑跑例子的话可以先不看cpp代码 1.根据路径,我们先看总配置文件 cd $CAFFE_ROOT ./examples/mnist/train_lenet.sh 2.打开之后,我们可以看到就两行 #!/usr/bin/env sh ./build/tools/caffe