python中字符串函数的用法,编写程序,要求输入一个字符串,然后将用python语言

  python中字符串函数的用法,编写程序,要求输入一个字符串,然后将用python语言

  0x 1手动代码插装和编译成中间代码编译好KLEE后,可以通过测试一些简单的程序开始使用KLEE。如果您有以下代码:

  int get_sign(int x) {if (x==0)返回0;if(x ^ 0)返回-1;否则返回1;} KLEE通过在源代码级别对变量进行追溯,对源代码中的变量进行了符号化。变量用klee.h头文件中声明的klee_make_symbolic函数来符号化(这个函数只声明了没有定义,它的语义是通过klee中的固有函数来实现的)。为了测试上面的get_sign函数,需要将变量X标记为符号变量。通过构造一个main函数调用get_sign函数,在main函数中传递一个符号参数给get_sign,就可以完成代码的构造了。主要函数的构造如下:

  int main(){ int a;klee_make_symbolic(a,sizeof(a), a );返回get _ sign(a);}整个源代码已经写在source _ to _ klee/example/get _ sign目录下的get_sign.c文件中。KLEE虽然插装是在源代码级别,但是符号执行的分析过程是在LLVM IR级别完成的。所以,首先你需要把源代码编译成LLVM IR的二进制格式,也就是,bc文件。按如下方式编译该命令:

  叮当-9 -I././include-emit-llvm-c-g-O0-Xclang-disable-O0-optnone-fno-discard-value-names get _ sign . c

  -I …/…/include选项是查找klee/klee.h头文件包含的目录。-g选项是让clang在编译时保留调试信息。-O0 -Xclang -disable-O0-optnone选项是为了保证Klee可以优化生成的中间代码。-fno-discard-value-names选项是为了在生成文本IR时保留源代码中某些变量的命名方法,使其更易于阅读。

  0xRun KLEE。运行上面编译好的命令后,当前目录下会生成get_sign.bc文件,作为KLEE的输入。同时,为了打印出符号执行时所解释的指令信息,可将以下选项添加到运行配置中:

  -debug-print-instructions=all:stderr/home/Nino/klee _ env/klee-2.2/examples/get _ sign/get _ sign . BC

  运行KLEE,您可以在控制台上看到以下输出:

  在分析中间的每一条指令之前,会把与指令相关的一些信息打印出来。在分析结束时,会打印出三条黄色语句。从这些信息中,我们可以知道KLEE总共分析了33条指令。get_sign函数中有三条路径,每条路径KLEE生成一个测试用例。对于一些大型程序,KLEE可能无法完成每一条路径的探索,这主要是受时间限制和内存大小的限制。在这种情况下,KLEE还会给出这些路径在被探索之前被中断的数量。同时,每执行一次KLEE,当前目录下就会生成一个klee-out-N的目录,里面记录了第n次执行的所有信息。例如,对于上面提到的第0次执行,我们可以检查其目录中的内容:

  assembly.ll文件是LLVM IR可读格式的文件。

  Info记录了这次分析的一些基本信息,包括分析开始时间,搜索策略等等。

  三个。ktest后缀文件是生成的测试用例信息。

  0x查看生成的测试用例文件。ktest后缀是生成的测试用例数据,是二进制文件,不能直接查看其内容。通过KLEE提供的ktest-tool工具,可以查看其内容如下:

  可以发现,对于每个测试用例,KLEE都报告了调用程序时使用的参数(在上面的例子中,只使用了它自己)、符号对象的数量、符号对象的名称和符号对象的值。其中,符号对象的值以几种格式给出。注意数据的数据格式,低位在左边,高位在右边。

  0x4运行生成的测试用例,虽然我们可以通过手动修改源代码来运行我们的测试用例(这太麻烦了!),KLEE仍然提供了一个复制库,允许我们自动运行生成的测试用例。为了使用它,我们只需要在编译我们的源代码时链接共享库libkleeRuntest,然后指定环境变量KTEST_FILE指向对应的。ktest测试用例。操作如下所示:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python语言基本语句用法总结大全,python语言基本语句用法总结怎么写
  • python语言基本语句用法总结大全,python语言基本语句用法总结怎么写,python语言基本语句用法总结
  • python是一种什么类型的计算机语言,python语言是一种什么类型的编程语言
  • Python的保留字符,python语言中的保留字
  • python的指数e怎么表示,指数函数在python语言中怎么表示
  • python语言合法的变量命名,在python中变量的命名要注意哪些问题
  • python变量命名可以用中文吗,下面哪一个不是python语言合法的变量命名
  • Python分词库,用python语言中文分词第三方库jieba对文件data
  • python中复数类型的实部和虚部都是浮点数,python语言中,复数类型中实数部分和虚数部分
  • 用python语言判断一个数是否为素数,Python判断是不是素数
  • python语句变量命名规则,python语言命名变量规则
  • 简述python语言程序的特点,以下关于python语言技术特点
  • matlab中for循环的用法例子,python语言for循环语句
  • Python主网站,python语言的官方网站
  • 用python开发的软件有哪些,哪些工具可以使用python语言开发软件
  • 留言与评论(共有 条评论)
       
    验证码: