栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Custom Mutator Fuzz】简单Protobuf使用练习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Custom Mutator Fuzz】简单Protobuf使用练习

前言

前面两篇文章中已经讲解了protobuf的结构以及生成代码的分析,这篇文章简单的介绍一下protobuf的使用。这里主要跟着libprotobuf-mutator_fuzzing_learning项目进行结构感知模糊测试练习

编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ
PS:文章末尾有联系方式,交个朋友吧~

本文链接:https://hollk.blog.csdn.net/article/details/124680716

模糊测试系列往期回顾:
【Custom Mutator Fuzz】Protocol Buffer基础(下):C++生成代码介绍 + 配套代码
【Custom Mutator Fuzz】Protocol Buffer基础(上):proto2编写格式
【Custom Mutator Fuzz】libprotobuf-mutator安装
LibFuzzer学习(三):使用小trick
LibFuzzer学习(二):提高代码覆盖率和速度
LibFuzzer学习(一):轻松找到心脏出血漏洞
Fuzz出结果不会看?Address Sanitizer(ASan)各类溢出demo分析
Fuzzing101 Exercise 5 - LibXML2 学习笔记
Fuzzing101 Exercise 4 - LibTIFF 学习笔记
Fuzzing101 Exercise 3 - TCPdump 学习笔记
Fuzzing101 Exercise 2 - Libexif 学习笔记
Fuzzing101 Exercise 1 - Xpdf学习笔记
AFL源码分析之afl-fuzz.c详细注释(二):FUZZ执行流程(五万字警告,慎入)
AFL源码分析之afl-fuzz.c详细注释(一):初始配置(6万字警告,慎入)
AFL源码分析之afl-gcc.c详细注释
AFL源码分析之afl-as.c详细注释
免费资源:AFL-2.57b.zip(AFL源码分析章节版本)

编译protobuf
syntax = "proto2";

message Hollk {
  required uint32 a = 1;
  required string b = 2;
}

这里定义了一个required的无符号整型a,和一个required的字符串类型b。接下来使用前面【Custom Mutator Fuzz】libprotobuf-mutator安装中已经装好了的protoc编译器编一下:

/home/hollk/libprotobuf-mutator/build/external.protobuf/bin/protoc-3.17.3.0 ./test.proto  --cpp_out=./

接下来就可以在当前目录下看到hollk.pb.h和hollk.pb.cc两个文件了

编写protobuf测试程序

我们希望能在测试程序中对a和b进行赋值并且输出,因此代码如下:

#include "hollk.pb.h"

#include 

using std::cin;
using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
    Hollk hollk;
    hollk.set_a(101);
    hollk.set_b("testtest");
    cout << hollk.a() << endl;
    cout << hollk.b() << endl;   
    return 0;
}    

这个测试程序主要是用来为proto数据进行赋值和输出的,一起看一下这个过程。首先将编译好的hollk.pb.h include进代码中,后面会用到其中的方法。接着构造出一个hollk,利用set_a()函数和set_b()函数进行赋值,对a赋值为整型的101,对b赋值为字符串类型的testtest。接着输出a()函数和b()函数(其中用到的方法函数用法可以在上一篇【Custom Mutator Fuzz】Protocol Buffer基础(下):C++生成代码介绍 + 配套代码文章中看到解释)

编写Makefile文件
CXX=clang++
PB_SRC=hollk.pb.cc

PROTOBUF_DIR=$(HOME)/libprotobuf-mutator/build/external.protobuf
PROTOBUF_LIB=$(PROTOBUF_DIR)/lib/libprotobufd.a
INC=-I$(PROTOBUF_DIR)/include

test_proto: test_proto.cc $(PB_SRC)
	$(CXX) -o $@ $^ $(PROTOBUF_LIB) $(INC)

.PHONY: clean
clean: 
	rm test_proto
  • CXX:指定编译器为clang++(如果提示没有,就直接apt装一下clang)
  • PB_SRC:protobuf生成的C++源码
  • PROTOBUF_DIR:protobuf位置(可参考【Custom Mutator Fuzz】libprotobuf-mutator安装)
  • PROTOBUF_LIB:protobuf动态链接库libprotobufd.a
  • INC:将protobuf的include目录添加到包含文件的搜索路径
  • $@:目标文件
  • $^:所有依赖

接下来只要make就可以创建出proto_test程序了:

运行test_proto程序

运行test_proto程序就可以看到之前set_a()函数和set_b()函数设置的两个值了:


这就是protobuf的简单利用,后面文章中的几个例子也需要protoc-3.17.3.0编译器创建的hollk.pb.h和hollk.pb.cc两个文件,不然会出现错误

参考链接
https://github.com/bruce30262/libprotobuf-mutator_fuzzing_learning

交个朋友吧~

扫描下方微信二维码,一起讨论研究

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873025.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号