当前位置: 首页 > news >正文

openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)

文章目录

    • openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)
    • 概述
    • 笔记
    • 备注
    • 备注
    • END

openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)

概述

将openssl3.2编译出来了(openssl3.2 - 编译)
安装后的openssl.exe可以干openssl3.2所有的事情, 用openssl.exe 加上各种参数来完成具体的功能.
如果想迁移openssl.exe的功能到自己工程, 就要知道openssl.exe命令行的实现, 如果能用VS单步调试, 那就太舒服了.
这时, 如果编译一个openssl.exe的VS工程, 那最适合不过了.

在网上找了一下, 没人这么搞…
都是拿openssl.exe直接干活去了? 还是直接看官方的demo工程将需要的功能摘出来?

明显看官方的openssl.exe工程来的直接啊.

我这里用VS2019, 建立一个控制台工程, 将openssl.exe的源码进行重建.
里面有个小坑, windows.h和winsock2.h同时包含有冲突, 通过实验, 琢磨了半天才发现是这个小问题(以前遇到过这个问题).

笔记

建立一个VS2019控制台工程, 工程名称为my_openssl_cmd. 将模板工程生成的.cpp删掉, 成为一个空工程.
解决方案选择DebugX64
工程根目录下建立一个文件夹 openssl_3d2_x64, 将编译好的openssl-3.2.0源码目录中的apps目录, include目录拷贝进入.
删掉不用的东西如下:
删掉 openssl_3d2_x64\apps\demoSRP 子目录
删掉 openssl_3d2_x64\include\openssl 子目录
只保留openssl_3d2_x64 目录中*.c, *.h, *.rc, 其他都删掉.
在这里插入图片描述

在工程过滤器中, 建立相应的过滤器目录名称, 和openssl_3d2_x64目录中的子文件夹对应.
在这里插入图片描述

在VS2019工程中, 将文件都加入对应的过滤器.
添加工程的头文件路径

.;C:\openssl_3d2\include\;.\openssl_3d2_x64\apps;.\openssl_3d2_x64\apps\include;.\openssl_3d2_x64\include\;

设置工程库路径

C:\openssl_3d2\lib

工程预处理器 加入 _CRT_SECURE_NO_WARNINGS

在工程中查找 include <winsock2.h>, 在这行下面包含windows.h
在工程中查找 #include <windows.h>, 在这行上面包含winsock2.h
统一的包含winsock2.h, windows.h如下

		#include <winsock2.h>#include <windows.h>

在openssl.c的头文件包含后面, 加入库包含

#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */#pragma comment(lib, "ws2_32.lib")

在VS2019中, 将apps\lib\engine.c改名为engine_lib.c
在这里插入图片描述
在工程选项中禁用特定警告 : 4267;4090;4244;

上面做的这些编译改动, 都是编译 报错或有编译警告, 才加上的.
发现编译错误或者警告, 就加编译选项或者去稍微改一下代码中关于编译的部分.

最后全部编译一次. 编译完成, 0错误, 0警告.
在这里插入图片描述
将安装好的openssl的2个DLL, 放到编译出的my_openssl_cmd.exe的同级目录, 试试是否能正常运行?
在这里插入图片描述
可以正常运行.

备注

这下就爽飞了, 如果openssl能带参数干啥活(正好咱工程中也需要 😛 ), 直接用VS2019带着工程(带同样的命令行参数)跑起来, 单步调试, 就知道具体实现了.
然后就是整理一下openSSL.exe的实现到自己工程中. 作为研发, 移植(抄代码)这事, 大家都熟 😛

备注

openssl.exe干活是需要环境变量的, 和普通命令行程序调试不太一样.
如果不设置环境变量(告诉openssl该使用怎样的配置文件), openssl干活会失败.
已经做了笔记(openssl3.2 - 在VS2019下源码调试openssl.exe)

END

相关文章:

  • TensorRT模型优化模型部署(七)--Quantization量化(PTQ and QAT)(二)
  • 观成科技-加密C2框架EvilOSX流量分析
  • Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行
  • ros2+gazebo(ign)激光雷达+摄像头模拟
  • R语言【base】——tempfile():返回一个字符串向量,这些字符串可以用作临时文件的名称
  • Three.js 纹理贴图的实现
  • 医院患者满意度调查方案
  • Servlet-体系结构
  • 开关电源PFC电路原理详解及matlab仿真
  • 聊聊 Java 集合框架中的 ArrayList
  • 全新加密叙事,以Solmash为代表的 LaunchPad 平台如何为用户赋能?
  • uniapp 打包成 apk(原生APP-云打包)免费
  • 软件测试|Python数据可视化神器——pyecharts教程(九)
  • 确保CentOS系统中的静态HTTP服务器的数据安全
  • 深入了解Java多线程编程:JVM内存模型与同步机制
  • 【译】JS基础算法脚本:字符串结尾
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Babel配置的不完全指南
  • CSS 三角实现
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES10 特性的完整指南
  • fetch 从初识到应用
  • Java|序列化异常StreamCorruptedException的解决方法
  • learning koa2.x
  • magento2项目上线注意事项
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PAT A1050
  • scrapy学习之路4(itemloder的使用)
  • spring boot下thymeleaf全局静态变量配置
  • 半理解系列--Promise的进化史
  • 关于Java中分层中遇到的一些问题
  • 浅谈Golang中select的用法
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何优雅地使用 Sublime Text
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​linux启动进程的方式
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (1)Nginx简介和安装教程
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)汇编语言——简单程序
  • (小白学Java)Java简介和基本配置
  • (一)appium-desktop定位元素原理
  • (转)我也是一只IT小小鸟
  • .cfg\.dat\.mak(持续补充)
  • .NET Core 中的路径问题
  • .NET MVC之AOP
  • .net refrector
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 中创建支持集合初始化器的类型