python函数覆盖 python覆盖文件内容( 二 )


9.2.6块与组 135
9.3行刺WarFTPD 136
9.3.1FTP 101 137
9.3.2创建FTP协议描述框架 138
9.3.3Sulley会话 139
9.3.4网络和进程监控 140
9.3.5Fuzzing测试以及Sulley的Web界面 141
第10章面向Windows驱动的Fuzzing测试技术 145
10.1驱动通信基础 146
10.2使用Immunity Debugger进行驱动级的Fuzzing测试 147
10.3Driverlib——面向驱动的静态分析工具 151
10.3.1寻找设备名称 152
10.3.2寻找IOCTL分派例程 153
10.3.3搜寻有效的IOCTL控制码 155
10.4构建一个驱动Fuzzer 157
第11章IDAPython——IDA PRO环境下的Python脚本编程 162
11.1安装IDAPython 163
11.2IDAPython函数 164
11.2.1两个工具函数 164
11.2.2段(Segment) 164
11.2.3函数 165
11.2.4交叉引用 166
11.2.5调试器钩子 166
11.3脚本实例 167
11.3.1搜寻危险函数的交叉代码 168
11.3.2函数覆盖检测 169
11.3.3检测栈变量大小 171
第12章PYEmu——脚本驱动式仿真器 174
12.1安装PyEmu 174
12.2PyEmu概览 175
12.2.1PyCPU 175
12.2.2PyMemory 176
12.2.3PyEmu 176
12.2.4指令执行 176
12.2.5内存修改器与寄存器修改器 177
12.2.6处理例程(Handler) 177
12.3IDAPyEmu 182
12.3.1函数仿真 184
12.3.2PEPyEmu 187
12.3.3可执行文件加壳器 188
12.3.4UPX加壳器 188
12.3.5利用PEPyEmu脱UPX壳 189
如何在特定的作用域将python系统函数替换成自己的函数这篇文章主要介绍python函数覆盖了Python函数式编程指南(一):函数式编程概述,本文讲解了什么是函数式编程概述、什么是函数式编程、为什么使用函数式编程、如何辨认函数式风格等核心知识,需要python函数覆盖的朋友可以参考下1pareTo(o2))相信从这个小小python函数覆盖的例子你也能感受到强大的生产效率:)封装控制结构的内置模板函数为了避开边界效应,函数式风格尽量避免使用变量,而仅仅为了控制流程而定义的循环变量和流程中产生的临时变量无疑是最需要避免的 。假如python函数覆盖我们需要对刚才的数集进行过滤得到所有的正数,使用指令式风格的代码应该像是这样:代码如下:lst2 = list()for i in range(len(lst)): #模拟经典for循环if lst[i]0:lst2.append(lst[i])这段代码把从创建新列表、循环、取出元素、判断、添加至新列表的整个流程完整的展示了出来,俨然把解释器当成了需要手把手指导的傻瓜 。然而,“过滤”这个动作是很常见的,为什么解释器不能掌握过滤的流程,而我们只需要告诉它过滤规则呢?在Python里,过滤由一个名为filter的内置函数实现 。有了这个函数 , 解释器就学会了如何“过滤”,而我们只需要把规则告诉它:代码如下:lst2 = filter(lambda n: n0, lst)这个函数带来的好处不仅仅是少写了几行代码这么简单 。封装控制结构后,代码中就只需要描述功能而不是做法,这样的代码更清晰,更可读 。因为避开了控制结构的干扰,第二段代码显然能让你更容易了解它的意图 。另外,因为避开了索引 , 使得代码中不太可能触发下标越界这种异常,除非你手动制造一个 。函数式编程语言通常封装了数个类似“过滤”这样的常见动作作为模板函数 。唯一的缺点是这些函数需要少量的学习成本,但这绝对不能掩盖使用它们带来的好处 。闭包(closure)闭包是绑定了外部作用域的变量(但不是全局变量)的函数 。大部分情况下外部作用域指的是外部函数 。闭包包含了自身函数体和所需外部函数中的“变量名的引用” 。引用变量名意味着绑定的是变量名 , 而不是变量实际指向的对象;如果给变量重新赋值,闭包中能访问到的将是新的值 。闭包使函数更加灵活和强大 。即使程序运行至离开外部函数 , 如果闭包仍然可见,则被绑定的变量仍然有效;每次运行至外部函数,都会重新创建闭包,绑定的变量是不同的,不需要担心在旧的闭包中绑定的变量会被新的值覆盖 。回到刚才过滤数集的例子 。假设过滤条件中的 0 这个边界值不再是固定的,而是由用户控制 。如果没有闭包,那么代码必须修改为:代码如下:class greater_than_helper:def __init__(self, minval):self.minval = minvaldef is_greater_than(self, val):return valself.minvaldef my_filter(lst, minval):helper = greater_than_helper(minval)return filter(helper.is_greater_than, lst)请注意我们现在已经为过滤功能编写了一个函数my_filter 。如你所见,我们需要在别的地方(此例中是类greater_than_helper)持有另一个操作数minval 。如果支持闭包,因为闭包可以直接使用外部作用域的变量,我们就不再需要greater_than_helper了:代码如下:def my_filter(lst, minval):return filter(lambda n: nminval, lst)可见 , 闭包在不影响可读性的同时也省下了不少代码量 。函数式编程语言都提供了对闭包的不同程度的支持 。在Python2.x中,闭包无法修改绑定变量的值 , 所有修改绑定变量的行为都被看成新建了一个同名的局部变量并将绑定变量隐藏 。Python 3.x中新加入了一个关键字nonlocal 以支持修改绑定变量 。但不管支持程度如何,你始终可以访问(读取)绑定变量 。内置的不可变数据结构为了避开边界效应 , 不可变的数据结构是函数式编程中不可或缺的部分 。不可变的数据结构保证数据的一致性,极大地降低了排查问题的难度 。例如,Python中的元组(tuple)就是不可变的,所有对元组的操作都不能改变元组的内容,所有试图修改元组内容的操作都会产生一个异常 。函数式编程语言一般会提供数据结构的两种版本(可变和不可变),并推荐使用不可变的版本 。递归递归是另一种取代循环的方法 。递归其实是函数式编程很常见的形式,经常可以在一些算法中见到 。但之所以放到最后 , 是因为实际上我们一般很少用到递归 。如果一个递归无法被编译器或解释器优化,很容易就会产生栈溢出;另一方面复杂的递归往往让人感觉迷惑 , 不如循环清晰,所以众多最佳实践均指出使用循环而非递归 。这一系列短文中都不会关注递归的使用 。第一节完

推荐阅读