美食健康网站的建设做爰片的网站

张小明 2026/1/2 17:05:34
美食健康网站的建设,做爰片的网站,网站正在建设中空白模板,企业名录大全查询Fuzzing Book Coverage Assignment 写在前面#xff1a;文档中标注此次作业会查重#xff0c;有需要的同学记得稍微修改一部分#xff0c;别完全照搬了 还没有在本地配置好Fuzzing Book的同学可以参考#xff1a; Fuzzing Book安装指南 《Fuzzing Book》的Code …Fuzzing BookCoverage Assignment写在前面文档中标注此次作业会查重有需要的同学记得稍微修改一部分别完全照搬了还没有在本地配置好Fuzzing Book的同学可以参考Fuzzing Book安装指南《Fuzzing Book》的Code Coverage章节介绍了用于测量Python程序覆盖率的Coverage类。在模糊测试的上下文中覆盖率信息用于引导测试向未覆盖的代码位置。该章节主要介绍了Coverage类基础用法基本语法使用with Coverage() as cov:上下文管理器来捕获代码执行可视化输出打印覆盖率对象会显示已覆盖和未覆盖的代码行未覆盖行用#标记作业任务改写Coverage类增加event的种类为linecallreturn。通过调用fuzzer()随机生成长度在100个字符以内的字符串连续跑10次分别输入到cgi_decode()观察程序的执行情况打印出执行trace和覆盖率。我们对任务进行分解首先我们分析一下原Coverage类__init__函数首先定义了一个初始化函数该部分会初始化一个空列表_trace用于存储按执行顺序记录的每一行代码因为原Coverage定义了event是line的位置。接下来我们先看这部分与with配合使用我们在这里先介绍一下with的使用方法。with需要配套实现__enter__()和__exit__()两个方法这里定义通过OBJECT进行管理然后将__enter__()的返回值给VARIABLE之后执行BODY那原Coverage这部分代码中:首先__enter__()保存了原有的追踪函数保存为original_trace_function接下来将追踪函数设为我们自己实现的traceit()然后返回自身给cov相当于Coverage类的一个示例可以用来访问和调用函数变量然后__exit__()恢复原有的追踪函数返回None(表示让所有异常通过即异常会向外抛出)traceit函数该函数是追踪函数如果original_trace_function不是None即先调用原有的追踪函数如果存在的话这时候会将frame帧上下文、event事件类型arg参数传给原有的追踪函数如果不存在就执行下面的内容判断事件是否是line原Coverage只定义了追踪换行事件如果是的话获取当前行的函数名、行号如果是__exit__函数就跳过避免追踪自己的退出函数否则结果会含有大量的__exit__行号将函数名和行号加入_trace列表。结果获取方法trace、coverage、function_names该部分是对外返回结果的函数。trace会直接返回_trace原始结果coverage会对原始结构进行去重操作(set是集合)function_names会返回所有执行过的函数名也会去重有set操作__repr__函数这部分是可视化输出遍历所有执行过的函数名通过eval将函数名对应到具体的函数位置如果出现异常会进入except块把异常赋值给exc然后记录跳过原因跳过某个函数因为什么原因然后继续执行下一个函数。之后通过inspect.getsourcelines(fun) 获取函数的源代码行数和起始行号分别赋值给source_linesstart_line_num对于源代码的所有行进行遍历如果这个行没有出现在我们的_trace中就将开头标记上#执行过的行就在前面加上空格与上面对齐然后加上对应的行号格式化对齐至少两个字符宽度接下来把这行的内容加到后面。fuzzer函数这个函数是最fuzzing book介绍的最基础的函数这个函数是用来生成一组随机字符串定义了最大字符串长度是100起始charASCII码值是32char可选长度是32即可以选择32-63的字符。接下来用随机数随机初始化字符串长度0到100然后构建字符串每一位字符通过随机生成32-63的值然后通过chr函数得到一个字符将字符作为字符串out的当前位。最终输出outcgi_decode函数这个函数是用来对字符串进行处理遇到“”会转为空格如果是%后续会读取两个字符通过预先定义的hex_values将其作为十六进制数转为十进制数然后再转成ASCII码对应的字符如果出现不符合的值就弹出错误。如果是普通的字符就直接拷贝最终返回处理完的字符串。作业实现首先对返回结果我们定义一个四元组分别是函数名字行号触发的事件类型和如果是return类型额外添加了其返回值补充实现之后分别将cgi_decode和fuzzer函数拷贝过来直接复用即可。之后便是修改Coverage类通过前面对于这个类各个功能的实现我们很容易发现需要修改的地方traceit中对于event的操作前面原实现只进行了行的追踪所以判断只需要判断event是否是line即可而我们需要扩展为line、call、return故需要对其进行修改使用in来判断event是否是其中之一。我们前面提到return不同于其他两个它应该多一个元素即返回值需要记录所以我们还需要单独对其进行处理注意这里的哈希是为什么因为原返回值可能是数字字符串等可哈希的结果为什么需要可哈希因为coverage方法采用了集合集合中的元素要求是可哈希的对象直接返回就可以看见真实返回值如果不可哈希就通过repr将返回值变成字符串类型与str()相似然后返回四个元素注意line和call第四个元素是None__repr__函数的实现主要修改这一部分跟输出挂钩我们使用了一个嵌套生成器表达式any函数作用检查追踪的事件集合中是否存在函数名为当前函数名、行号是当前行号、事件类型符合我们的要求的结果只要有一个满足条件any就返回True表示这一行被覆盖——即判断当前函数的当前行有没有被line、call、return任意一个事件触发。虽然这样修改后直接执行以及能得到大概符合要求的结果了但是依旧存在一个问题为什么会出现这个问题因为原__repr__函数在获取当前函数名的时候使用了eval来获取该函数的具体位置而我们出现的错误是这些都是系统内部函数无法通过eval()获取。需要修复__repr__方法我们还是先尝试使用eval调用如果不能获取捕获两种异常找不到函数名或解析失败那就尝试从全局主命名空间寻找函数对象导入__main__python当前运行的主模块命名空间存放所有在主脚本定义的函数/变量使用hasattr检查当前主命名空间是否存在当前名为function_name的对象如果存在就使用getattr来获取这个对象并且赋值给fun跟前面正常情况对应如果__main__也不能获取到该函数名hasattr返回false就降级打印只显示函数名和行号并且去重并且按行号排序尽管后续运行基本上二次搜索也会失败但可视性会比之前好很多这部分尝试获取源代码如果出现异常源代码文件不存在或为内置函数则降级跟前面类似只显示函数名覆盖的行号如果能获取源代码这部分是我们修复前的部分就不重复讲了。接下来是测试代码首先定义了一个全局变量all_coverage记录覆盖情况去重接下来使用range(1,11)实现遍历十次含前不含后且默认步长是1调用fuzzer生成一个随机字符串作为测试的输入然后讲这个字符串先进行一个打印然后进入with部分使用Coverage类进行跟踪为了增强代码的健壮性与测试的可视性我们增加了对执行结果的判断执行目标cgi_decode进行解码如果成功就把值返回给result并且打印成功信息如果出现异常ValueError(这部分是原本cgi_decode实现了的对于%后的两位数进行十六进制转十进制如果是无效编码就会返回这个)、IndexError越界情况即%可能出现后面不足两个字符的情况、Exception其他异常然后打印具体异常类型的情况。代码如下接下来是输出部分首先我们使用print(cov)这个会自动调用Coverage类里面的__repr__函数即可以将具体的覆盖情况打印出来如图结果与我们预期的__repr__中的结果一致对于前面和后面出现的内置函数无法获取源码我们只打印函数名和覆盖的行号对于可以获取源码也是我们核心目标的cgi_decode我们可以按照预期讲整个函数的覆盖情况打印出来标记未运行到的行号然后打印我们追踪的三个事件每个事件的不同情况由于覆盖的行号很多全部显示不太合理我们只显示前20条接下来打印call事件的情况然后是return事件注意我们前面在traceit中提到了return应该相比前两种方法加上对应的返回值需要注意有些函数是没有返回值的所以我们需要兼容原本考虑三个元素的情况单独考虑返回值每一轮执行完成我们进行一个覆盖率总结按每个事件类型单独统计使用set会去重通过前面定义的location元组的第2位即event类型来区分然后分别打印每个事件覆盖的位置数将具体的覆盖情况打印出来最后将这一轮的情况存入前面定义的all_coverage中最后对十次结果进行一个统一的总结输出优化我们刚才的实现以及符合要求了但是在可视化方面仍然有缺陷因为我们还是不能直观的了解程序是怎么执行的执行顺序所以可以对输出进行优化将结果按照执行的顺序依次打印linecallreturn混合可以帮助我们更好的了解程序怎么执行在哪里做了什么操作可以看看结果对于这样一串成功运行的字符串我们可以查看追踪结果首先进行了call调用cgi_decode然后在该程序中进行运行然后在循环进行字符串格式转换后在33行return返回了操作完成的字符串接着call了write函数调用cgi_decode后续我们进行了print操作打印了执行结果这部分进行write内的调用操作一直到这里返回了我们写了62位字符。其实这里主要原因是因为我们在调用Coverage类的时候在里面使用了print语句如果不希望出现这些函数可以将print删除。不过针对这个作业我们还是希望出现多用的call与return事件的所以我进行了保留。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

广州市番禺建筑设计院有限公司seo网站有哪些

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

张小明 2025/12/31 1:19:47 网站建设

模板网站建设制作和百度一样的网站

ComfyUI_ACE-Step:当AI成为你的作曲搭档 你有没有过这样的时刻?脑海里浮现出一段旋律的轮廓——可能是黄昏下缓缓流淌的钢琴音符,或是深夜街头回响的布鲁斯吉他riff——但当你试图把它写下来时,乐理知识的门槛、编曲经验的缺失&a…

张小明 2025/12/30 20:25:21 网站建设

想做个网站都需要什么有哪些好玩的网页游戏

常见 Linux 命令全解析 在 Linux 系统的使用过程中,掌握各种命令是高效操作和管理系统的关键。以下将详细介绍一些常见且实用的 Linux 命令。 1. 文本编辑命令 在文本编辑方面,有许多命令可以帮助我们快速定位和修改文本。 | 命令 | 效果 | | ---- | ---- | | ^ 或 …

张小明 2025/12/31 4:02:02 网站建设

免费外贸网站源码免费网站建设排行表

Linly-Talker单元测试覆盖率提升至85%以上 在AI驱动的数字人系统逐渐从概念走向落地的过程中,一个常被忽视但至关重要的问题浮出水面:我们如何确保这个由多个复杂模型拼接而成的“会说话的头像”不仅看起来聪明,而且运行得足够稳定&#xff1…

张小明 2025/12/29 20:12:05 网站建设

网站后台更新后前台没有同步更新网站建设方案书封面

目录 已开发项目效果实现截图开发技术介绍 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 已开发项目…

张小明 2025/12/30 3:06:53 网站建设