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

如何搭建符号执行环境并跑通第一个测试样例

0.如题

我使用的是verilator和klee进行符号执行的学习,目前还处于起步阶段,起步阶段除了要了解符号执行的定义和作用之外就是环境的搭建了,没想到搭建环境这一步就浪费了很多时间,主要问题出在按照官方的步骤进行搭建的时候,总是各种报错+版本依赖问题,在网上排查的时候,发现要改的内容太多,遂使用docker的方式进行快速搭建,结果在搭建的时候目前最推荐的是启动klee3的容器,在klee3的容器里安装verilator5.0这个方式是最好的组合,因为安装verilator要比安装klee3不管是虚拟机方式还是docker容器里安装都要顺利的多。

但是问题来了,在 Verilator 的不同版本中,访问 Verilog 模块内部信号的方式有所变化,特别是在 3.9 版本和 4.0 及以上版本之间。

Verilator 3.9 版本:

在此版本中,Verilator 允许用户通过生成的 C++ 模型直接访问模块的内部信号。这意味着,即使信号未被显式标记为公共的,用户仍然可以在 C++ 测试平台中访问这些信号。

Verilator 4.0 及以上版本:

从 4.0 版本开始,Verilator 引入了更严格的访问控制机制。为了在 C++ 测试平台中访问模块的内部信号,用户必须在 Verilog 代码中使用特定的注释标记这些信号为公共的。

这就导致一个问题,Verilator 3.9 允许测试代码直接访问模块内部寄存器如 Drg, Dnext, Knext 等,是进行故障注入和中间状态可观测性验证最方便的版本。而从 Verilator 4.0 起,默认不再暴露这些内部变量,除非在 Verilog 中显式添加 // verilator public 标记,因此本研究选择使用 Verilator 3.9 是为了保留对中间状态的完全可控与可观察能力。

但是klee3里安装verilator3的话版本依赖又冲突了装不上去,主要原因是

系统源和包管理器不再提供 Verilator 3.9

klee3 容器环境是基于Ubuntu22.04,而 Verilator 3.9 是较老的版本:

在 Ubuntu 官方仓库中已经移除了 verilator 3.x 的支持,默认 apt install verilator 安装的是 Verilator 4.02+。

即使尝试手动编译 Verilator 3.9,也会出现 C++ 标准兼容性问题(C++11/14 与新版编译器冲突),例如:

error: ISO C++17 does not allow dynamic exception specifications

KLEE 容器中环境依赖冲突

klee3 容器本身:

使用的是基于 LLVM 13/14 的工具链(通过 /tmp/llvm-130-install_O_D_A 路径可以确认);

该环境为保证 KLEE 符号执行兼容性,禁用了较多系统服务(如 GUI、动态包拉取等);

一些老版本 Verilator 依赖的工具(如旧版 Flex/Bison 或 autotools 组件)在 KLEE 容器里版本不兼容或缺失;

make install 阶段缺乏写权限或链接环境变量未配置完整。

基于以上原因,我提出了一种折衷的办法,那就是创建两个容器,一个是klee3一个是verilator3,这两个容器通过共享文件夹的方式对代码进行各司其职的操作,为行文方便,以下统称k3v3。 代码编写完成后放在共享文件夹里,首先使用v3进行模型转换,再使用k3进行符号执行。

1.符号执行

1.1.定义

符号执行是一种程序分析技术,其核心思想是将程序的输入表示为符号变量而非具体值,并沿程序的各条执行路径模拟执行,同时记录路径条件(Path Condition)——即一系列限制符号变量的逻辑约束。最终,符号执行引擎可通过约束求解器(如 Z3)验证路径可达性,或生成触发特定行为的输入。

这种技术广泛应用于自动化测试用例生成、程序验证、安全漏洞检测、逆向分析与加密协议验证等领域。

1.2.分类

符号执行根据执行方式和路径探索策略,可大致分为以下几类:

  • 静态符号执行(Pure Symbolic Execution)

以完全符号化输入执行程序,探索所有可能路径。

优点:理论完备,能覆盖所有逻辑路径。

缺点:易受路径爆炸影响,对环境建模要求高。

  • 动态符号执行(Concolic Execution,Concrete + Symbolic)

在真实输入驱动下执行程序,同时进行符号跟踪。

结合符号与具体值,能够更高效发现深层路径。

代表工具:KLEE、SAGE、Angr(支持二进制级 concolic 执行)。

  • 路径敏感符号执行(Path-sensitive SE)

精细分析每条路径上的约束条件,避免路径合并。

优点:精准,适合断言验证与精确漏洞定位。

缺点:路径数目呈指数增长,需剪枝与缓存策略。

  • 符号执行与模糊测试混合

将符号执行与 AFL/Fuzz 等模糊测试相结合,用符号执行补齐模糊测试难以覆盖的路径。

代表系统:Driller、QSYM、Hybrid-Fuzz。

2.verilator+klee

2.1.verilator

Verilator 是一种开源的 Verilog/SystemVerilog 到 C++/SystemC 的转换工具,它被广泛用于高性能仿真和验证数字硬件设计。

Verilator 会将 Verilog 或 SystemVerilog 代码转换(“Verilate”)成等效的 C++ 或 SystemC 模型代码。这些模型可以通过通用 C++ 编译器(如 gcc、clang)进行编译,然后运行以完成硬件电路的仿真。

Verilator 的主要功能:

静态转换: Verilator 不会解释运行时行为,而是将设计静态地转换为 C++ 代码,这使得仿真速度远高于传统解释型仿真器。

代码检查: 自动执行 Lint(语法和风格)检查,识别潜在问题。

断言与覆盖率支持: 可选插入断言检查点与覆盖率分析点,用于验证设计正确性。

多线程支持: 可生成多线程 C++ 模型,提高大规模设计的仿真效率。

高性能: 适合对复杂芯片级设计进行百万次周期级别的快速仿真。

与其他工具集成: 支持将 Verilated 代码封装成库,可与其他仿真器或工具链(如 SystemC、KLEE)集成。

Verilator 不适合的场景:

不能处理 SDF 注释(时序信息注入);

不支持混合信号仿真(模拟+数字);

不推荐用于快速课程作业(推荐使用 Icarus Verilog);

不具备 GUI 波形工具(但可输出 VCD 波形与 GTKWave 配合)。

使用 Verilator 的典型场景:

在芯片设计流程中替代传统慢速仿真器;

结合 KLEE 等符号执行工具进行硬件验证;

将 RTL 设计嵌入到 C++ 模拟环境或测试平台;

将硬件 IP 转为 C++,嵌入 AI 模型或软件控制流程中。

2.2.klee

KLEE 是一个基于 LLVM 的开源符号执行工具,用于自动生成高覆盖率测试用例,并发现程序中的潜在缺陷。它特别适合分析 C/C++ 语言编写的系统程序、加密算法实现和嵌入式软件,在学术界和工业界均有广泛应用。

KLEE 的核心机制是将程序输入视为符号变量,在执行程序时记录路径条件,并通过约束求解器生成覆盖各执行路径的具体输入。该过程无需预先指定输入集合,即可自动探索程序中的分支、错误路径和安全边界。

KLEE 的主要功能:

符号执行引擎: 支持执行 LLVM 位码程序,自动构造路径约束条件;

自动化测试用例生成: 输出能覆盖不同分支路径的具体输入,用于验证程序行为;

错误检测与断言验证: 自动捕捉如内存溢出、除零、断言失败等运行时错误;

POSIX 模拟层: 模拟系统调用、文件 I/O、环境变量等运行环境,提升现实适配度;

路径探索策略: 支持 DFS、BFS、随机路径等搜索算法,用于控制状态空间爆炸;

输入重放与分析: 支持将生成的 .ktest 文件回放到原生环境中进行调试与验证。

KLEE 的局限与注意事项:

不直接支持完整的 C++ STL 和多线程;

执行效率受限于路径爆炸与约束求解器性能;

需配合 LLVM 工具链使用,预处理阶段对构建环境要求较高;

某些外部库或系统调用需模拟或封装支持。

KLEE 的典型应用场景:

软件安全性验证: 检测加密算法中的差错传播、密钥恢复条件等安全属性;

自动化单元测试生成: 提高测试覆盖率,发现边界条件缺陷;

嵌入式系统验证: 配合 Verilator 分析 Verilog 转 C++ 的硬件模型行为;

漏洞挖掘与 CTF 工具链: 在安全研究中用于符号路径约束分析和自动反例生成。

3.环境搭建

3.1.创建虚拟机共享文件夹

mkdir /home/hx/hxv3k3
cp file /home/hx/hxv3k3
chmod 777 /home/hx/hxv3k3

3.2.verilator

sudo docker run -itd --name veri3 \--entrypoint /bin/bash \-v /home/hx/hxv3k3:/home/hxh \  13816a918f61 -c "tail -f /dev/null"sudo docker exec -it veri3 /bin/bash

3.3.klee

sudo docker run -itd --name veri3 -v /home/hx/hxv3k3:/home/hxh 13816a918f61 tail -f /dev/null
sudo docker exec -it klee3 /bin/bash 

4.环境运行方式

4.1.verilator

/aes_config.sh
TOP_MODULE="AES_ENC"
CORE_DIR="/home/hxh/aes/1aes/cores"
TESTBENCH="tb_AES_CF.cpp"
EXE_DIR="/home/hxh/aes/1aes/exe"
VERILATOR_OUT="$EXE_DIR/verilator_out"
VERILATOR_INCLUDE="/home/hxh/verilator_include"
VERILATOR_BIN="/home/hxh/verilator_bin"
/build_verilator3.sh
#!/bin/bash
set -e
source /home/hxh/aes_config.shstep() { echo -e "\n\033[1;36m🔷 Step $1: $2\033[0m"; sleep 0.4; }
run() { echo -e "   \033[90m$@\033[0m"; sleep 0.2; eval "$@"; }step 1 "准备工作目录"
run "cd $EXE_DIR"
[ -d "$VERILATOR_OUT" ] && echo "⚠️ $VERILATOR_OUT 已存在,跳过清理" || run "mkdir -p $VERILATOR_OUT"step 2 "生成 Verilator C++ 模块"
run "verilator -O3 -Wall -language 1364-2001 --top-module $TOP_MODULE \-Wno-UNOPTFLAT +incdir+$CORE_DIR \-Mdir $VERILATOR_OUT -cc $CORE_DIR/*.v --exe $TESTBENCH"step 3 "拷贝 include 和 bin 到共享目录"
[ -d "$VERILATOR_INCLUDE" ] || run "cp -r /usr/local/share/verilator/include $VERILATOR_INCLUDE"
[ -d "$VERILATOR_BIN" ] || run "cp -r /usr/local/share/verilator/bin $VERILATOR_BIN"echo -e "\n\033[1;32m✅ Verilator 构建完成:$VERILATOR_OUT\033[0m"

4.2.klee

#!/bin/bash
set -estep() {echo -e "\n\033[1;36m🔷 Step $1: $2\033[0m"sleep 0.5
}run() {echo -e "   \033[90m$@\033[0m"sleep 0.2eval "$@"
}step "1" "挂载头文件与工具链"
run "sudo mkdir -p /usr/local/share/verilator"
run "sudo ln -sf /home/hxh/verilator_include /usr/local/share/verilator/include"
run "sudo ln -sf /home/hxh/verilator_bin /usr/local/share/verilator/bin"step "2" "拷贝所有生成文件到工作目录 /tmp/aes_test"
run "rm -rf /tmp/aes_test"
run "mkdir -p /tmp/aes_test"
cd /tmp/aes_test
run "cp /home/hxh/aes/1aes/exe/tb_AES_CF.cpp ."
run "cp /home/hxh/aes/1aes/exe/verilator_out/*.cpp ."
run "cp /home/hxh/aes/1aes/exe/verilator_out/*.h ."
run "cp /home/hxh/verilator_include/verilated.cpp ."step "3" "建立 obj_dir 链接(用于模拟 verilated 路径)"
run "mkdir -p obj_dir"
run "ln -sf ../VAES_ENC.h obj_dir/VAES_ENC.h"
run "ln -sf ../VAES_ENC__Syms.h obj_dir/VAES_ENC__Syms.h"step "4" "使用 wllvm++ 编译为 .o 文件(带调试信息)"
export LLVM_COMPILER=clang
run "wllvm++ -g -c tb_AES_CF.cpp -I. -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd"
run "wllvm++ -g -c VAES_ENC.cpp -I. -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd"
run "wllvm++ -g -c VAES_ENC__Syms.cpp -I. -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd"
run "wllvm++ -g -c verilated.cpp -I/home/hxh/verilator_include -I/home/hxh/verilator_include/vltstd"step "5" "提取 .bc 文件(extract-bc)"
run "extract-bc tb_AES_CF.o"
run "extract-bc VAES_ENC.o"
run "extract-bc VAES_ENC__Syms.o"
run "extract-bc verilated.o"step "6" "合并为 VAES_ENC.bc(llvm-link)"
run "llvm-link tb_AES_CF.o.bc VAES_ENC.o.bc VAES_ENC__Syms.o.bc verilated.o.bc -o VAES_ENC.bc"step "7" "运行 KLEE(基础执行)"
run "klee --libc=uclibc --search=dfs --output-dir=klee-out-basic VAES_ENC.bc"step "8" "运行 KLEE(输出路径与全部错误)"
run "klee --libc=uclibc --emit-all-errors --write-paths --search=dfs --output-dir=klee-out-full VAES_ENC.bc"step "9" "运行 KLEE(生成路径执行图)"
run "klee --libc=uclibc --emit-all-errors --write-paths --write-exec-tree --search=dfs --output-dir=klee-out-tree VAES_ENC.bc"
run "klee-exec-tree tree-dot klee-out-tree | dot -Tsvg > tree.svg"step "10" "将 tree.svg 导出到宿主机目录"
run "cp /tmp/aes_test/tree.svg /home/hxh/"
echo -e "\n\033[1;32m✅ SVG 路径图已导出至宿主机:/home/hxh/tree.svg\033[0m"

5.运行效果截图

正如前文所说,本人还在初学阶段,所以写的代码并不符合符号执行的条件,所以就不放代码了,放一段运行成功的截图。

相关文章:

如何搭建符号执行环境并跑通第一个测试样例

0.如题 我使用的是verilator和klee进行符号执行的学习,目前还处于起步阶段,起步阶段除了要了解符号执行的定义和作用之外就是环境的搭建了,没想到搭建环境这一步就浪费了很多时间,主要问题出在按照官方的步骤进行搭建的时候&…...

基于 Django 进行 Python 开发

基于 Django 进行 Python 开发涉及多个方面的知识点,以下为你详细介绍: 1. Django 基础 项目与应用创建 借助django-admin startproject project_name来创建新的 Django 项目。利用python manage.py startapp app_name创建新的应用。项目结构 理解项目各文件和目录的作用,像…...

【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现

课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现,主要针对计算机相关…...

使用DDR4控制器实现多通道数据读写(八)

一、 本章概括 在之前的章节已经详细介绍了DDR4的AXI协议,并实现了对DDR4简单的读写操作。这一章节来建立单通道的256位数据的读写,并放出工程框架,说明整体设计思路。 二、 工程框架 三、 设计思路 DDR内存通常用于大容量数据存储&#xf…...

Oracle 处理“不允许长度为0的列”(ORA-01723)问题解析

错误原因‌ 当使用 CREATE TABLE ... AS SELECT 或创建物化视图时,若查询结果中的某列值为空字符串()或隐式 NULL 且未显式指定数据类型,Oracle 无法推断该列的长度和类型,从而抛出 ‌ORA-01723: zero-length columns…...

燕山大学计算机网络之Java实现TCP数据包结构设计与收发

觉得博主写的好,给博主点点免费的关注吧! 目录 摘要.................................................................................................................... 4 前言.............................................................…...

Linux操作系统学习之---进程状态

目录 明确进程的概念: Linux下的进程状态: 虚拟终端的概念: 见一见现象: 用途之一 : 结合指令来监控进程的状态: 和进程强相关的系统调用函数接口: getpid()和getppid(): fork(): fork函数创建子进程的分流逻辑: 进程之间具有独立性: 进程中存在的写时拷贝: 见一见进程状态…...

Oracle 12.1.0.2补丁安装全流程

第一步,先进行备份 tar -cvf u01.tar /u01 第二步,更新OPatch工具包 根据补丁包中readme信息汇总提示的信息,下载对应版本的OPatch工具包,本次下载的版本为: p6880880_122010_Linux-x86-64.zip opatch版本为最新的…...

第19章:基于efficientNet实现的视频内容识别系统

目录 1.efficientNet 网络 2. 猫和老鼠 3. QT推理 4. 项目 1.efficientNet 网络 本章做了一个视频内容识别的系统 本文选用的模型是efficientNet b0版本 EfficientNet 是 Google 团队在 2019 年提出的一系列高效卷积神经网络模型,其核心思想是通过复合缩放&…...

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识 引言 在微服务架构中,分布式事务是一个不可避免的挑战。随着业务复杂度的提升,如何保证跨服务的数据一致性成为了面试中的高频问题。本…...

div(HTML标准元素)和view(微信小程序专用组件)的主要区别体

div(HTML标准元素)和view(微信小程序专用组件)的主要区别体现在以下方面: 一、应用场景与开发框架 ‌适用平台不同‌ div是HTML/CSS开发中通用的块级元素,用于Web页面布局‌;view是微信小程序专…...

AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析

以下是 AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析: 1. 多Agent协同的定义与核心目标 多Agent系统(MAS, Multi-Agent System): 由多个独立或协作的智能体(Agent)组成&#xff…...

03_Americanas精益管理项目_StarRocks

文章目录 03_StarRocks(一)StarRocks简介1、什么是StarRocks【理解】1)概述2)适用场景2、系统架构【理解】1)系统架构图2)数据管理3、使用【熟悉】(二)表设计4、StarRocks表设计【理解】1)列式存储2)索引3)加速处理5、数据模型【掌握】5-1 明细模型1)适用场景2)创…...

CSS进度条带斑马纹动画(有效果图)

效果图 .wxml <view class"tb"><view class"tb-line" style"transform:translateX({{w%}})" /> </view> <button bind:tap"updateLine">增加进度</button>.js Page({data: {w:0,},updateLine(){this.…...

C++ static的使用方法及不同作用

在 C 里&#xff0c;static 是一个用途广泛的关键字&#xff0c;在不同场景下有不同含义&#xff0c;下面为你详细介绍&#xff1a; 1. 全局变量前的 static 当 static 用在全局变量前时&#xff0c;它会改变变量的链接属性。 默认全局变量&#xff1a;默认的全局变量具有外…...

CSS 美化页面(四)

一、浮动float属性 ‌属性值‌‌描述‌‌适用场景‌left元素向左浮动&#xff0c;腾出右侧空间供其他元素使用&#xff0c;其他内容会围绕在其右侧‌。横向排列元素&#xff08;如导航菜单&#xff09;、图文混排布局‌。right元素向右浮动&#xff0c;腾出左侧空间供其他元素使…...

驱动-原子操作

前面 对并发与竞争进行了实验&#xff0c; 两个 app 应用程序之间对共享资源的竞争访问引起了数据传输错误&#xff0c; 而在 Linux 内核中&#xff0c; 提供了四种处理并发与竞争的常见方法&#xff1a; 分别是原子操作、 自旋锁、 信号量、 互斥体&#xff0c; 这里了解下原子…...

Flutter ListView 详解

ListView 是 Flutter 中用于构建滚动列表的核心组件&#xff0c;支持垂直、水平滚动以及复杂的动态布局。本文将深入解析其核心用法、性能优化策略和高级功能实现&#xff0c;助你打造流畅高效的列表界面。 一、基础篇&#xff1a;快速构建各类列表 1. 垂直列表&#xff08;默…...

关于视频的一些算法内容,不包含代码等

视频算法&#xff1a; 视频降噪&#xff0c; 去除视频中的噪音&#xff0c;提高图像质量 工作原理&#xff1a; 时域降噪&#xff1a;利用相邻帧之间的相似性&#xff0c;通过平均或滤波来减少随机噪声。 空域降噪&#xff1a;在单帧内使用滤波器&#xff08;高斯滤波器&am…...

OpenCV 图形API(43)颜色空间转换-----将 BGR 图像转换为 LUV 色彩空间函数BGR2LUV()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从BGR色彩空间转换为LUV色彩空间。 该函数将输入图像从BGR色彩空间转换为LUV。B、G和R通道值的传统范围是0到255。 输出图像必须是8位无符…...

keil报错 ..\..\Libraries\CMSIS\stm32f10x.h(298): error: #67: expected a “}“

报错原因&#xff1a; 通常是由于启动文件、头文件定义或驱动选择不一致导致的。以下是一些具体的解决方案&#xff0c;可以帮助你解决这个问题&#xff1a; 检查步骤&#xff1a; 1. 检查启动文件 确保你的启动文件与你的芯片型号相匹配。例如&#xff0c;如果你的芯片是S…...

图像预处理-添加水印

一.ROI切割 类似裁剪图片&#xff0c;但是原理是基于Numpy数组的切片操作(ROI数组切片是会修改原图数据的)&#xff0c;也就是说这个“裁剪”不是为了保存“裁剪”部分&#xff0c;而是为了方便修改等处理。 import cv2 as cv import numpy as npimg cv.imread(../images/dem…...

扩展欧几里得算法【Exgcd】的内容与题目应用

1.简介 exgcd的目的是表示出二元一次不定方程的通解。 形式化地&#xff0c;exgcd算法就是输入a&#xff0c;b&#xff0c;c的值&#xff0c;返回一组x&#xff0c;y&#xff0c;满足 a x b y c axbyc axbyc。 2.1方程无整数解的情况 当 c 不能被 a &#xff0c;b最小公倍…...

OpenCV day5

函数内容接上文&#xff1a;OpenCV day4-CSDN博客 目录 9.cv2.adaptiveThreshold(): 10.cv2.split()&#xff1a; 11.cv2.merge()&#xff1a; 12.cv2.add()&#xff1a; 13.cv2.subtract()&#xff1a; 14.cv2.multiply()&#xff1a; 15.cv2.divide()&#xff1a; 1…...

Spring DI 详解

学习过 IoC 后&#xff0c;就知道我们可以将对象交给 Spring 进行管理&#xff0c;但是我们在一个类会有若干属性&#xff0c;也就是这个类依赖于这若干个属性&#xff0c;那么我们就可以将交给 Spring 管理的对象注入到这个类中&#xff0c;这也就是依赖注入。 依赖注入有三种…...

解锁动态规划的奥秘:从零到精通的创新思维解析(9)

前言&#xff1a; 小编在前几日写了关于动态规划中的多状态dp的问题&#xff0c;此时小编将会讲述一个动态规划我们常常会遇到的一类问题——股票问题&#xff0c;股票问题就类似小编上一篇所讲述的粉刷房子的问题&#xff0c;可以通过一个二维的dp表来代替多个一维的dp表。买卖…...

redis 配置日志和数据存储位置

Redis配置日志和数据存储位置 介绍 Redis是一个开源的高性能键值存储数据库&#xff0c;常用于缓存、消息队列和实时分析等场景。在使用Redis时&#xff0c;我们需要配置日志和数据存储位置&#xff0c;以便更好地管理和监控Redis的运行状态。本文将介绍如何配置Redis的日志和数…...

STL详解 - stack与queue的模拟实现

目录 一、容器适配器 1. 什么是适配器模式 2. stack与queue的底层结构 3. deque的原理与缺陷 3.1 deque的原理 3.2 deque的缺陷 4. 为何选择deque作为默认底层容器 二、stack与queue的模拟实现 1. stack的实现 2. queue的实现 一、容器适配器 1. 什么是适配器模式 适…...

Chromium 134 编译指南 macOS篇:获取源代码(四)

1. 引言 在Chromium 134的开发之旅中&#xff0c;获取源代码是一个至关重要的里程碑。本文将引导您完成这一关键步骤&#xff0c;为后续的编译和开发工作奠定坚实的基础。无论您是出于学习目的&#xff0c;还是计划开发自己的浏览器项目&#xff0c;掌握获取Chromium源码的方法…...

关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用

关于 IntelliJ IDEA 中频繁出现的 Kotlin 及其核心作用 1. Kotlin 是什么&#xff1f; Kotlin 是由 JetBrains&#xff08;IntelliJ IDEA 的开发商&#xff09;设计的一种现代化编程语言&#xff0c;2016年正式发布&#xff0c;2017年被 Google 指定为 Android 官方开发语言。…...

MYOJ_11700(UVA10591)Happy Number(快乐数)(超快解法:图论思想解题)

原题(English) Let the sum of the square of the digits of a positive integer S0S0​ be represented by S1S1​. In a similar way, let the sum of the squares of the digits of S1S1​ be represented by S2S2​ and so on. If Si1Si​1 for some i≥1i≥1, then the or…...

2843. 统计对称整数的数目

2843. 统计对称整数的数目 题目链接&#xff1a;2843. 统计对称整数的数目 代码如下&#xff1a; class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low;i < high;i) {string s to_string(i);int n s.size();if (n % 2 …...

【模块化拆解与多视角信息6】自我评价:人设构建的黄金50字——从无效堆砌到精准狙击的认知升级

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…...

ServletRequestAttributeListener 的用法笔记250417

ServletRequestAttributeListener 的用法笔记250417 以下是关于 ServletRequestAttributeListener 的用法详解&#xff0c;涵盖核心方法、实现步骤、典型应用场景及注意事项&#xff0c;帮助您有效监听请求级别属性&#xff08;ServletRequest 中的属性&#xff09;的变化&…...

大模型在胃十二指肠溃疡预测及诊疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法和创新点 二、大模型相关理论基础 2.1 大模型的基本原理 2.2 适用于医疗领域的大模型类型 2.3 大模型在医疗领域的应用现状和潜力 三、胃十二指肠溃疡的疾病特征 3.1 疾病概述 3.2 诊断方法 3.3 …...

第九节:React HooksReact 18+新特性-React 19的use钩子如何简化异步操作?

对比&#xff1a;useEffect vs use处理Promise 代码题&#xff1a;用use改写数据请求逻辑 React 19 use 钩子&#xff1a;异步操作革命性简化方案&#xff08;附完整代码对比&#xff09; 一、useEffect vs use 处理 Promise 核心差异对比 对比维度useEffect 方案use 钩子方案…...

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤&#xff1a;1.首先安装脚手架的环境&#xff0c;2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目&#xff1a;1.和Vue一样&#xff0c;先安装脚手架然后通过脚手架指令搭建&#xff1b;2.npx create-…...

方案精读:华为数字化转型实践案例合集【附全文阅读】

华为数字化转型旨在通过数字化变革实现全连接的智能华为,成为行业标杆,提升客户满意度和运营效率。其以客户为中心,基于 “双轮驱动” 理念,从转意识、方法、文化、组织、模式等方面入手,构建数字化平台,推进数据治理,保障安全,开展业务重构。通过合同 360、产品设计与…...

VScode使用Pyside6(环境篇)

Pyside6的环境搭建&#xff1a; cmd命令窗口输入&#xff1a;pip install pyside6 使用everthing进行查找&#xff1a;&#xff08;非常好用的一款搜索工具 &#xff09; 进入PySide6文件夹中&#xff0c;点击designer.exe,查看是否能够点开。 VScode环境搭建&#xff1a; 下…...

智能云图库-12-DDD重构

本节重点​ 之前我们已经完成了本项目的功能开发。由于本项目功能丰富、代码量大&#xff0c;如果是在企业中维护开发的项目&#xff0c;传统的 MVC 架构可能会让后续的开发协作越来越困难。所以本节鱼皮要从 0 带大家学习一种新的架构设计模式 —— DDD 领域驱动设计。 大纲…...

Linux 网络配置

文章目录 网络基础知识IP地址子网掩码DNS Linux操作系统网络配置 网络基础知识 IP地址 IP地址是用于区分同一个网络中的不同主机的唯一标识。 Internet中的主机要与其他机器通信必须具有一个IP地址&#xff0c;因为网络中传输的数据包必须携带目的IP地址和源IP地址&#xff…...

05-DevOps-Jenkins自动拉取构建代码2

通过前面的操作&#xff0c;已经成功完成了源代码的打包工作&#xff0c;具体操作参见下面的文章&#xff1a; 05-DevOps-Jenkins自动拉取构建代码-CSDN博客 验证打包文件 验证打包后的文件是否存在&#xff0c;进入到Jenkins的工作目录中&#xff0c;找到对应的jar包&#x…...

ESP32之OTA固件升级流程,基于VSCode环境下的ESP-IDF开发,基于阿里云物联网平台MQTT-TLS连接通信(附源码)

目录 1.创建产品和设备 2.准备工作 2.1 获取基础工程 2.2 基本知识概述 2.2.1 OTA升级流程 2.2.2 主题和数据格式 &#xff08;1&#xff09;设备上报版本号 ①请求主题&#xff08;设备 -> 阿里云&#xff09;&#xff1a; ②响应主题&#xff08;阿里云->设备…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(20):拾遗 - imgproc 基础操作(下)

文章目录 前言imgproc 基础操作&#xff08;下&#xff09;8. 霍夫检测9. 滤波与模糊10. 拟合与包围 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#xff0c;LabVIEW>2018&#xff0c;兼容32位和64位。…...

kafka发送消息,同时支持消息压缩和不压缩

1、生产者配置 nacos中增加配置&#xff0c;和公共spring-kafka配置字段有区分 需要发送压缩消息时&#xff0c;使用该配置类发送即可 import org.apache.kafka.clients.producer.ProducerConfig; import org.springframework.beans.factory.annotation.Autowired; import or…...

AOSP世界时间的更新

在 AOSP&#xff08;Android Open Source Project&#xff09;中&#xff0c;世界时间的更新主要涉及设备时区数据的管理和更新&#xff0c;以确保设备能够正确显示全球各地的时间。AOSP 依赖 IANA 时区数据库&#xff08;也称为 tzdata&#xff09;来提供时区规则和世界时间数…...

Python + 链上数据可视化:让区块链数据“看得懂、用得上”

Python + 链上数据可视化:让区块链数据“看得懂、用得上” 区块链技术的透明性和去中心化特性,使得链上数据成为金融、供应链、NFT 以及 DeFi 领域的关键参考。可是,对于普通用户而言,链上数据往往晦涩难懂,难以直接利用。那么,如何利用 Python 提取、分析并直观展示链上…...

方德桌面操作系统V5.0-G23 vim无法复制粘贴内容

1.修改 Vim 配置文件 rootyuhua-virtualmachine:/etc/docker# sudo vim /usr/share/vim/vim82/defaults.vim 2.在第82行找到set mousea行&#xff0c;将其为set mouse-a。如果文件中没有set mousea&#xff0c;则修改添加set mouse-a。 3.保存文件并退出 Vim&#xff1a; 4…...

[linux] vim 乱码

1. 确保终端支持中文 设置终端编码为 UTF-8,运行: echo $LANG如果不是 UTF-8(如 en_US.UTF-8),你可以设置为: export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 2. 确保 Vim 使用 UTF-8 编码 打开 .vimrc 或输入以下命令: :set encoding=utf-8 :set fileencodin…...

天洑参加人工智能校企产学研及人才对接活动——走进南京大学人工智能学院

4月15日&#xff0c;人工智能校企产学研及人才对接——走进南京大学人工智能学院活动在南京大学成功举办。此次活动由江苏省人工智能学会、南京大学人工智能学院主办&#xff0c;江苏省工业和信息化厅党组成员、副厅长池宇&#xff0c;南京大学副校长周志华出席。江苏省工业和信…...