openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

本文主要是介绍openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板
    • 概述
    • 笔记
    • 工程中需要的openssl的库实现
    • END

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

概述

openssl3.2 - 测试程序的学习
整了几个test.c, 每开一个新的测试工程, 总要改这改那的. 挺麻烦的.
想建立一个专门用于学习openssl测试工程的VS2019模板工程. 等做新实验时, 将openssl的测试程序加入工程, 做少量改动, 就能做实验.
如果每次做一个实验, 都要向工程中加入大量支持文件, 受不了.

观察了一下makefile中的测试工程的生成, 普遍都是一个测试程序的.c + 一个测试库 + openssl的公共库.


// 测试.exe的实现组成
test\afalgtest.exe: test\afalgtest-bin-afalgtest.obj test\libtestutil.lib libcrypto.libIF EXIST test\afalgtest.exe.manifest DEL /F /Q test\afalgtest.exe.manifest$(LD) $(LDFLAGS) $(BIN_LDFLAGS) @<<
test\afalgtest-bin-afalgtest.obj// 测试.c的实现组成
test\afalgtest-bin-afalgtest.obj: test\afalgtest.c$(CC)  $(BIN_CFLAGS) -I"include" -I"apps\include" $(BIN_CPPFLAGS)  -c $(COUTFLAG)$@ "test\afalgtest.c"cmd /C "$(CC) /Zs /showIncludes  $(BIN_CFLAGS) -I"include" -I"apps\include" $(BIN_CPPFLAGS)  "test\afalgtest.c" > test\afalgtest-bin-afalgtest.d 2>&1"// libtestutil.lib的实现组成
test\libtestutil.lib: apps\lib\libtestutil-lib-opt.obj apps\lib\libtestutil-lib-win32_init.obj test\testutil\libtestutil-lib-apps_shims.obj test\testutil\libtestutil-lib-basic_output.obj test\testutil\libtestutil-lib-cb.obj test\testutil\libtestutil-lib-driver.obj test\testutil\libtestutil-lib-fake_random.obj test\testutil\libtestutil-lib-format_output.obj test\testutil\libtestutil-lib-load.obj test\testutil\libtestutil-lib-main.obj test\testutil\libtestutil-lib-options.obj test\testutil\libtestutil-lib-output.obj test\testutil\libtestutil-lib-provider.obj test\testutil\libtestutil-lib-random.obj test\testutil\libtestutil-lib-stanza.obj test\testutil\libtestutil-lib-test_cleanup.obj test\testutil\libtestutil-lib-test_options.obj test\testutil\libtestutil-lib-tests.obj test\testutil\libtestutil-lib-testutil_init.obj$(AR) $(ARFLAGS) $(AROUTFLAG)test\libtestutil.lib @<<
apps\lib\libtestutil-lib-opt.obj
apps\lib\libtestutil-lib-win32_init.obj
test\testutil\libtestutil-lib-apps_shims.obj
test\testutil\libtestutil-lib-basic_output.obj
test\testutil\libtestutil-lib-cb.obj
test\testutil\libtestutil-lib-driver.obj
test\testutil\libtestutil-lib-fake_random.obj
test\testutil\libtestutil-lib-format_output.obj
test\testutil\libtestutil-lib-load.obj
test\testutil\libtestutil-lib-main.obj
test\testutil\libtestutil-lib-options.obj
test\testutil\libtestutil-lib-output.obj
test\testutil\libtestutil-lib-provider.obj
test\testutil\libtestutil-lib-random.obj
test\testutil\libtestutil-lib-stanza.obj
test\testutil\libtestutil-lib-test_cleanup.obj
test\testutil\libtestutil-lib-test_options.obj
test\testutil\libtestutil-lib-tests.obj
test\testutil\libtestutil-lib-testutil_init.obj
<<
apps\lib\libtestutil-lib-opt.obj: apps\lib\opt.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "apps\lib\opt.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "apps\lib\opt.c" > apps\lib\libtestutil-lib-opt.d 2>&1"
apps\lib\libtestutil-lib-win32_init.obj: apps\lib\win32_init.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "apps\lib\win32_init.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "apps\lib\win32_init.c" > apps\lib\libtestutil-lib-win32_init.d 2>&1"
test\testutil\libtestutil-lib-apps_shims.obj: test\testutil\apps_shims.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\apps_shims.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\apps_shims.c" > test\testutil\libtestutil-lib-apps_shims.d 2>&1"
test\testutil\libtestutil-lib-basic_output.obj: test\testutil\basic_output.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\basic_output.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\basic_output.c" > test\testutil\libtestutil-lib-basic_output.d 2>&1"
test\testutil\libtestutil-lib-cb.obj: test\testutil\cb.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\cb.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\cb.c" > test\testutil\libtestutil-lib-cb.d 2>&1"
test\testutil\libtestutil-lib-driver.obj: test\testutil\driver.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\driver.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\driver.c" > test\testutil\libtestutil-lib-driver.d 2>&1"
test\testutil\libtestutil-lib-fake_random.obj: test\testutil\fake_random.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\fake_random.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\fake_random.c" > test\testutil\libtestutil-lib-fake_random.d 2>&1"
test\testutil\libtestutil-lib-format_output.obj: test\testutil\format_output.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\format_output.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\format_output.c" > test\testutil\libtestutil-lib-format_output.d 2>&1"
test\testutil\libtestutil-lib-load.obj: test\testutil\load.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\load.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\load.c" > test\testutil\libtestutil-lib-load.d 2>&1"
test\testutil\libtestutil-lib-main.obj: test\testutil\main.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\main.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\main.c" > test\testutil\libtestutil-lib-main.d 2>&1"
test\testutil\libtestutil-lib-options.obj: test\testutil\options.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\options.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\options.c" > test\testutil\libtestutil-lib-options.d 2>&1"
test\testutil\libtestutil-lib-output.obj: test\testutil\output.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\output.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\output.c" > test\testutil\libtestutil-lib-output.d 2>&1"
test\testutil\libtestutil-lib-provider.obj: test\testutil\provider.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\provider.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\provider.c" > test\testutil\libtestutil-lib-provider.d 2>&1"
test\testutil\libtestutil-lib-random.obj: test\testutil\random.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\random.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\random.c" > test\testutil\libtestutil-lib-random.d 2>&1"
test\testutil\libtestutil-lib-stanza.obj: test\testutil\stanza.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\stanza.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\stanza.c" > test\testutil\libtestutil-lib-stanza.d 2>&1"
test\testutil\libtestutil-lib-test_cleanup.obj: test\testutil\test_cleanup.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\test_cleanup.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\test_cleanup.c" > test\testutil\libtestutil-lib-test_cleanup.d 2>&1"
test\testutil\libtestutil-lib-test_options.obj: test\testutil\test_options.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\test_options.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\test_options.c" > test\testutil\libtestutil-lib-test_options.d 2>&1"
test\testutil\libtestutil-lib-tests.obj: test\testutil\tests.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\tests.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\tests.c" > test\testutil\libtestutil-lib-tests.d 2>&1"
test\testutil\libtestutil-lib-testutil_init.obj: test\testutil\testutil_init.c$(CC)  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  -c $(COUTFLAG)$@ "test\testutil\testutil_init.c"cmd /C "$(CC) /Zs /showIncludes  $(LIB_CFLAGS) -I"include" -I"apps\include" -I"." $(LIB_CPPFLAGS)  "test\testutil\testutil_init.c" > test\testutil\libtestutil-lib-testutil_init.d 2>&1"
engines\capi.dll: engines\capi-dso-e_capi.obj engines\capi.def libcrypto.libIF EXIST engines\capi.dll.manifest DEL /F /Q engines\capi.dll.manifestcmd /C "$(LD) $(LDFLAGS) $(DSO_LDFLAGS) @<< || (DEL /Q $(@B).* engines\capi.* & EXIT 1)"

那应该建立一个以 libtestutil.lib 实现为主的工程, 补充一些空实现(在自己添加的2个公共实现里面, 用宏来控制空实现的有无), 让这个.exe工程能自编译过.
那么这就是专门做openssl测试程序实验的工程.

等做openssl测试程序新实验时, 如果测试.c有程序里面需要的要求的几个必须实现, 用宏关掉模板公共实现中的空实现即可.
试了一下好使, 做新实验时方便多了.

笔记

工程中需要的openssl的库实现

将编译过的openssl源码目录中的apps, test/testutil 目录直接拷贝到模板工程下, 将垃圾都删掉(只保留.c, .h)
工程设置合适的头文件路径和库路径
按照makefile中, test\libtestutil.lib 的实现要求, 加入对应的.c
加入自己做的2个公共文件, 里面有头文件包含和库包含, 还有宏控制的openssl测试专用的几个空实现.
在这里插入图片描述

/*!
\file my_openSSL_lib.h
*/#ifndef __MY_OPENSSL_LIB_H__
#define __MY_OPENSSL_LIB_H__#ifdef  _WIN32
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib") // for select()#include <windows.h>
#endif /* #ifdef  _WIN32 */#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")#ifdef  _WIN32
#define MY_SLEEP(x) Sleep(x)
#else
#define MY_SLEEP(x) sleep(x)
#endif /* #ifdef  _WIN32 */#define USE_MY_SETUP_TEST// #define USE_MY_OPTION_choice#ifdef USE_MY_OPTION_choice#include "testutil.h"// 需要将其他实现中的enum定义拷贝过来
typedef enum OPTION_choice {OPT_ERR = -1,OPT_EOF = 0,OPT_CONFIG_FILE,OPT_TEST_ENUM
} OPTION_CHOICE;#endif // #ifdef USE_MY_OPTION_choice#endif /* #ifndef __MY_OPENSSL_LIB_H__ */
/*!
* \file D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_005_afalgtest.c\my_openSSL_lib.c
*/#include "my_openSSL_lib.h"#define MY_USE_APPLINK
#ifdef MY_USE_APPLINK
#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */
#endif // #ifdef MY_USE_APPLINK#ifdef USE_MY_OPTION_choiceconst OPTIONS* test_get_options(void)
{// 这个函数返回不能为空, 从其他有实现的函数中拷贝一个实现过来, 否则有崩溃报错static const OPTIONS test_options[] = {OPT_TEST_OPTIONS_DEFAULT_USAGE,{ "config", OPT_CONFIG_FILE, '<',"The configuration file to use for the libctx" },{ NULL }};return test_options;
}#endif // #ifdef USE_MY_OPTION_choice#ifdef USE_MY_SETUP_TEST
int setup_tests(void)
{return 0;
}# endif // 

编译通过

1>  正在创建库 D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_openssl_test_template\x64\Debug\prj_template.lib 和对象 D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_openssl_test_template\x64\Debug\prj_template.exp
1>prj_template.vcxproj -> D:\my_dev\my_local_git_prj\study\openSSL\nmake_test\test_c\prj_openssl_test_template\x64\Debug\prj_template.exe
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0==========

就将这个工程作为openssl测试(test/*.c)专用的工程模板

END

这篇关于openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651308

相关文章

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板