openEuler
OpenSSL编译安装
我们去OpenSSL官网下载最新版本OpenSSL 1.1.1k的源码openssl-1.1.1k.tar.gz,然后把代码上传到openEuler云服务器中。
建立两个文件夹,分别放置OpenSSL的源码和安装路径,记住pwd运行的结果/root/rocopenssl:
mkdir rocopensslsrc rocopenssl
cd rocopenssl
pwd
解压源代码到rocopensslsrc文件夹:
tar -zxvf openssl-1.1.1k.tar.gz -C rocopensslsrc
配置编译安装路径(/root/rocopenssl),和openEuler系统默认的不同。
cd rocopensslsrc/openssl-1.1.1k
./config --prefix=/root/rocopenssl
编译(make时间稍长,耐心等待),测试、安装,其中测试步骤需要全部测试:
make
make test
make install
查看安装后的版本,确定是最新安装的1.1.1k版:
cd ~/rocopenssl
./bin/openssl version
查看帮助手册
OpenSSL编程
简单测试
编写一个测试代码test_openssl.c:
#include <stdio.h>
#include <openssl/evp.h>
int main(){
OpenSSL_add_all_algorithms();
return 0;
}
然后用下面命令编译:
gcc -o to test_openssl.c -I /root/rocopenssl/include -L /root/rocopenssl/lib -lcrypto -lpthread
执行./to;echo $?,结果打印0.
实验
3.2查找最大数
实验代码:
.section .data
.align 3
my_data:
.quad 1
.quad 2
.quad 5
.quad 8
.quad 10
.quad 12
my_data_count:
.quad 6
.align 3
print_data:
.string "big data: %d\n"
.section .text
.globl main
main:
stp x29, x30, [sp, -16]!
ldr x0, =my_data
ldr x1, my_data_count
add x4, x0, #40
mov x3, xzr
1:
ldr x2, [x0], #8
cmp x2, x3
csel x3, x2, x3, hi
cmp x0, x4
b.ls 1b
ldr x0, =print_data
mov x1, x3
bl printf
ldp x29, x30, [sp], 16
ret
结果截图:
3.3 :汇编语言练习——通过 C 语言调用汇编函数
//compare.c 文件如下。
int compare_data(int a, int b)
{
return (a >= b) ? a : b;
}
//main.S 文件如下。
.section .data
.align 3
print_data:
.string "big data: %d\n"
.section .text
.globl main
main:
stp x29, x30, [sp, -16]!
mov x0, #6
mov x1, #5
bl compare_data
mov x1, x0
ldr x0, =print_data
bl printf
ldp x29, x30, [sp], 16
ret
结果截图
3.4通过汇编语言调用C函数
实验代码:
//compare.S
.section .text
.globl compare_data
compare_data:
cmp x0, x1
csel x0, x0, x1, hi
ret
//main.c
#include <stdio.h>
extern int compare_data(int a, int b);
int main()
{
int val;
val = compare_data(5, 6);
printf("big data: %d\n", val);
}
结果截图:
3.5GCC内联汇编
实验代码:
#include <stdio.h>
static int compare_data(int a, int b)
{
int val;
asm volatile (
"cmp %1, %2\n"
"csel %0, %1, %2, hi\n"
: "+r" (val)
: "r" (a), "r" (b)
: "memory");
return val;
}
int main()
{
int val;
val = compare_data(5, 6);
printf("big data: %d\n", val);
val = compare_data(6, 4);
printf("big data: %d\n", val);
}
结果截图: