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

深入浅出,快速安装并了解汇编语言

1.什么是汇编语言

了解汇编语言需要先从了解机器语言开始,在计算机发展的初期阶段,机器语言是计算机直接理解和执行的二进制代码语言,其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成,这些指令码包括操作码和操作数,用于指示计算机执行的具体操作。当时的程序员会将二进制指令编码打孔在纸带上,然后将这些纸带送入计算机进行读取和执行。
下图就是一段纸带程序
在这里插入图片描述
这种方式非常繁琐且容易出错,因为程序员需要记住每个操作的二进制代码,为了简化编程过程,汇编语言应运而生。为了简化编程过程,研究人员开始使用助记符(mnemonics)来代表机器指令。这些助记符通常是简短的英文缩写,易于记忆和理解。随着助记符的使用,需要一种工具将这些助记符转换为机器语言。这种工具被称为汇编器(assembler)。汇编器可以将用助记符编写的程序(汇编语言)转换为机器语言,从而使得编程更加高效和便捷。
在这里插入图片描述
早期的汇编语言起源于20世纪50年代,由IBM工程师为IBM 704计算机开发,与特定计算机架构紧密相关。汇编程序的雏型在EDSAC上诞生,采用单字母指令码、十进制地址和终结字母组成。首个汇编程序是50年代中期的符号优化汇编程序(SOAP),专为IBM650计算机设计,旨在优化磁鼓中指令的分布以提高效率。随后,IBM704计算机的符号汇编程序(SAP)成为汇编程序发展的重要里程碑,其模型至今影响深远。
随着计算机技术的发展,汇编语言逐渐标准化,并出现了多种不同的汇编语言,以适应不同的计算机架构。例如,x86架构有其特定的汇编语言,而ARM架构也有其自己的汇编语言。现代汇编语言常用于需要直接操作硬件或对性能要求极高的场合,如操作系统内核开发、嵌入式系统编程等。
这里我们使用NASM(Netwide Assembler),这是一款基于8086x86-64平台的汇编语言编译程序,它支持x86与x64架构的CPU(但不支持ARM架构),并可以在Linux、Mac OS X、Windows等操作系统上运行。NASM的语法被设计得简单易懂,并且支持大量的文件格式,如COFF、ELF、Mach-O等。

2.安装NASM

Windows系统安装NASM汇编语言

大家可以在NASM汇编语言代码官网查看安装方法和文档NASM官网
Windows系统可以直接下载.exe安装包Windows_64安装包下载
在这里插入图片描述
安装完成后将nasm.exe文件的安装路径添加到path环境中即可,安装完成后在cmd终端输入nasm -v查验下是否安装成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Linux系统安装NASM汇编语言

在Linux中安装NASM更为简单,只需要一行命令:
sudo apt install nasm nasm -v

3.编写第一个汇编语言代码

按照惯例,第一个程序依旧是输出"hello world"。

; hello.asm
section .datahello db 'Hello GGBond!', 0x0asection .textglobal _start_start:mov eax, 4          mov ebx, 1          mov ecx, hello     mov edx, 14         int 0x80          ; exit(0)mov eax, 1          xor ebx, ebx      int 0x80  

代码结构如下:

  1. 数据段

    • hello:这是一个字节数组,存储了字符串'Hello GGBond!'和一个换行符(ASCII码为0x0a)。
  2. 代码段

    • global _start:指示链接器(linker)程序的入口点是_start标签。
    • _start标签下的指令是程序开始执行的地方。
    • 首先,通过一系列mov指令将系统调用sys_write的参数准备好:
      • eax:系统调用号(4表示sys_write)。
      • ebx:文件描述符(1表示标准输出)。
      • ecx:指向要写入数据的指针(hello数组的地址)。
      • edx:要写入的数据长度(14个字节,包括字符串和换行符)。
    • 使用int 0x80触发系统调用,执行写入操作。
    • 接着,准备sys_exit系统调用的参数:
      • eax:系统调用号(1表示sys_exit)。
      • ebx:退出状态(使用xor ebx, ebx清零,表示正常退出)。
    • 最后,再次使用int 0x80触发系统调用,终止程序。

接下来编译运行这段代码:
先将hello.asm汇编源代码文件编译成名为hello.o的ELF格式目标文件

nasm -f elf -o hello.o hello.asm

最后使用LD链接器来将目标文件链接成最终的可执行文件

 ld -m elf_i386 -o hello hello.o

运行可执行文件后即可在终端输出"hello world"了

./hello

4.在主程序中引用子程序

在汇编语言中,实现一个主文件调用多个子文件的方法通常是通过使用包含指令(如 .include%include)来引入其他文件中的代码,这些文件可以包含函数、宏、常量定义等。
这里先新建三个.asm文件
main.asm:主文件。sub1.asm:子文件1。sub2.asm:子文件2。

; 主文件 main.asm
section .datasection .bsssection .textglobal _start_start:call sub1_functioncall sub2_functionmov eax, 1         xor ebx, ebx        int 0x80         %include "sub1.asm"
%include "sub2.asm"
; 子文件1 sub1.asm
section .text
sub1_function:mov eax, 4        mov ebx, 1          ; 文件描述符mov ecx, message1   ; 消息地址mov edx, len1       ; 消息长度int 0x80            ; 中断调用retsection .data
message1 db 'Hello from sub1!', 0xA
len1 equ $ - message1
; 子文件2 sub2.asm
section .text
sub2_function:mov eax, 4        mov ebx, 1        mov ecx, message2   mov edx, len2      int 0x80          retsection .data
message2 db 'Hello from sub2!', 0xA
len2 equ $ - message2

文件编写完成后,使用 nasm 汇编器将每个 .asm 文件编译成目标文件(.o 文件),再使用 ld 链接器将所有目标文件链接成一个可执行文件 main。

nasm -f elf32 main.asm -o main.o
nasm -f elf32 sub1.asm -o sub1.o
nasm -f elf32 sub2.asm -o sub2.o
ld -m elf_i386 -o main main.o sub1.o sub2.o
./main

5.NASM汇编常用指令表

NASM汇编只要指令分为:数据传输指令、算术指令、逻辑指令、控制转移指令、字符串指令与其他指令

指令含义应用方法
mov移动数据到寄存器或者内存mov destination, source:将source的内容复制到destination中,操作字长由参数字长决定。例如,mov eax, ebxebx的值移动到eax寄存器中。
lea加载有效地址lea des, src:将src的有效地址加载到des中。例如,lea eax, [ebx+8]ebx+8的内存地址加载到eax寄存器中。
inc操作数增加1inc destination:将destination的值增加1。例如,inc eaxeax的值增加1。
dec操作数减1dec destination:将destination的值减少1。例如,dec ebxebx的值减少1。
add加法add destination, source:将source的值加到destination上。例如,add eax, ebxebx的值加到eax上。
sub减法sub destination, source:从destination中减去source的值。例如,sub eax, ebxeax中减去ebx的值。
adc带进位加法adc destination, source:将source的值加到destination上,并加上进位标志位。例如,adc eax, ebxebx的值加到eax上,并加上之前的进位。
sbb带进位减法sbb destination, source:从destination中减去source的值,并减去进位标志位。例如,sbb eax, ebxeax中减去ebx的值,并减去之前的进位。
mul无符号乘法mul multiplier:将ALAX中的值与multiplier相乘,结果存储在AXDX:AX中。例如,mul ebxALAX中的值与ebx相乘。
imul有符号乘法imul multiplier:与mul类似,但处理有符号数。例如,imul ebxALAX中的值与ebx相乘。
div无符号除法div divisor:将AXDX:AX中的值除以divisor,商存储在ALAX中,余数存储在AHDX中。例如,div ebxAXDX:AX中的值除以ebx
idiv有符号除法idiv divisor:与div类似,但处理有符号数。例如,idiv ebxAXDX:AX中的值除以ebx
cmp比较两个数cmp destination, source:比较destinationsource的值,并设置标志寄存器。例如,cmp eax, ebx比较eaxebx的值。
jmp无条件跳转jmp label:无条件跳转到label指定的地址。例如,jmp start跳转到标签start处。
je/jz跳转,如果相等/零je/jz label:如果零标志位(ZF)被设置,则跳转到label。例如,je equal_label在相等时跳转。
jne/jnz跳转,如果不相等/非零jne/jnz label:如果零标志位(ZF)未被设置,则跳转到label。例如,jne not_equal_label在不相等时跳转。
jg/jnle跳转,如果大于/不小于等于jg/jnle label:如果有符号数大于且溢出标志位(OF)未设置或符号标志位(SF)与零标志位(ZF)不同,则跳转到label。例如,jg greater_label在大于时跳转。
jge/jnl跳转,如果大于等于/不小于jge/jnl label:如果有符号数大于等于或溢出标志位(OF)与符号标志位(SF)相同,则跳转到label。例如,jge greater_equal_label在大于等于时跳转。
jl/jnge跳转,如果小于/不大于等于jl/jnge label:如果有符号数小于且溢出标志位(OF)被设置或符号标志位(SF)与零标志位(ZF)相同,则跳转到label。例如,jl less_label在小于时跳转。
jle/jng跳转,如果小于等于/不大于jle/jng label:如果有符号数小于等于或溢出标志位(OF)与符号标志位(SF)不同,则跳转到label。例如,jle less_equal_label在小于等于时跳转。
ja/jnbe跳转,如果无符号数大于/不小于等于ja/jnbe label:如果无符号数大于且没有借位(CF=0)且零标志位(ZF)未被设置,则跳转到label。例如,ja above_label在无符号数大于时跳转。
jae/jnb跳转,如果无符号数大于等于/不小于jae/jnb label:如果无符号数大于等于或没有借位(CF=0),则跳转到label。例如,jae above_equal_label在无符号数大于等于时跳转。
jb/jnae跳转,如果无符号数小于/不大于等于jb/jnae label:如果无符号数小于且有借位(CF=1),则跳转到label。例如,jb below_label在无符号数小于时跳转。
jbe/jna跳转,如果无符号数小于等于/不大于jbe/jna label:如果无符号数小于等于或有借位(CF=1)且零标志位(ZF)被设置,则跳转到label。例如,jbe below_equal_label在无符号数小于等于时跳转。
loop循环指令loop label:循环执行指令,每次循环ecx寄存器减1,当ecx为0时跳出循环。例如,loop start循环执行到ecx为0。
and逻辑与and operand1, operand2:对operand1operand2执行逻辑与操作,结果存储在operand1中。例如,and eax, ebxeaxebx进行逻辑与操作。
or逻辑或or operand1, operand2:对operand1operand2执行逻辑或操作,结果存储在operand1中。例如,or eax, ebxeaxebx进行逻辑或操作。
xor逻辑异或xor operand1, operand2:对operand1operand2执行逻辑异或操作,结果存储在operand1中。例如,xor eax, ebxeaxebx进行逻辑异或操作。
test测试(逻辑与,不修改操作数)test operand1, operand2:对operand1operand2执行逻辑与操作,但结果不存储,只设置标志寄存器。例如,test eax, ebx测试eaxebx的逻辑与结果。
not逻辑非not operand:对operand执行逻辑非操作。例如,not eaxeax的值取反。
shl左移shl operand, count:将operand的值左移count位。例如,shl eax, 1eax的值左移1位。
shr右移shr operand, count:将operand的值右移count位。例如,shr eax, 1eax的值右移1位。
sal算术左移(与shl相同)sal operand, count:将operand的值左移count位,并符号扩展。例如,sal eax, 1eax的值左移1位。
sar算术右移sar operand, count:将operand的值右移count位,并符号扩展。例如,sar eax, 1eax的值右

相关文章:

深入浅出,快速安装并了解汇编语言

1.什么是汇编语言 了解汇编语言需要先从了解机器语言开始,在计算机发展的初期阶段,机器语言是计算机直接理解和执行的二进制代码语言,其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成,这些…...

LLM的原理理解6-10:6、前馈步骤7、使用向量运算进行前馈网络的推理8、注意力层和前馈层有不同的功能9、语言模型的训练方式10、GPT-3的惊人性能

目录 LLM的原理理解6-10: 6、前馈步骤 7、使用向量运算进行前馈网络的推理 8、注意力层和前馈层有不同的功能 注意力:特征提取 前馈层:数据库 9、语言模型的训练方式 10、GPT-3的惊人性能 一个原因是规模 大模型GPT-1。它使用了768维的词向量,共有12层,总共有1.…...

JavaScript中的箭头函数以及编写优化

箭头函数 1.1.1 箭头函数的概念 箭头函数时ES 6之后增加一种编写函数的方法,并且它比函数的表达式要更加简洁 箭头函数不会绑定this,arguments属性箭头函数不能作为构造函数来使用(不能和new一起来使用,会出现错误) //1.之前的方…...

Thymeleaf模板引擎生成的html字符串转换成pdf

依赖引入implementation("org.springframework.boot:spring-boot-starter-thymeleaf")implementation("org.xhtmlrenderer:flying-saucer-pdf")将ITemplateEngine注入到spring管理的类中, Context context new Context(); context.setVariable…...

Android 实现双列图片瀑布流式布局

Android 实现双列图片瀑布流式布局 实现双列图片瀑布流布局,关键在于 RecyclerView 的 StaggeredGridLayoutManager 和图片的动态加载。以下是实现步骤: 1. 添加必要依赖 使用 Glide 加载图片。确保在 build.gradle 中添加依赖: implement…...

运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置 描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快…...

显示类控件

文章目录 1 QLabel1.1 常用属性1.2 例子1,设置文本 (textFormat)1.3 例子2,设置widget背景图片 (pixmap和scaledContents)1.4 例子3,设置对齐方式 (alignment)1.5 例子4,设置自动换行,缩进和边距1.5.1 设置换行 (wordW…...

AOC显示器915Sw按键失灵维修记

大家好,我是 程序员码递夫 今天给大家分享的是自己维修老古董AOC液晶显示器按键失灵的的过程,实属DIY记录。 1、引子 家里有台老古董的19寸AOC液晶显示器(型号915Sw), 一直作为我的副显示器陪伴着左右,显示还正常&a…...

PyQt学习笔记

一.PyQt5的安装 当我们安装好开发环境后,打开pycharm在其设置里面点击按钮自动安装即可。 安装完成后我们会在这里面看到这几个东西说明安装成功了。 二.PyQt5 GUI程序框架 1.一个简单的PyQt5应用程序 首先我们用pycharm创建一个demo.py的文件。 我们创建文件为s…...

LLMops产品介绍

文章目录 字节跳动的扣子优点低代码开发丰富的插件与能力扩展强大的记忆与数据交互能力应用场景广泛 不足模型选择相对受限定制化程度受限输出效果有待提高应用部署范围有限市场认知度和用户基础不足 开悟大模型运营管理系统(LLMOPS)优点全生命周期管理降…...

【GPTs】Front-end Expert:助力前端开发的智能工具

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | GPTs应用实例 文章目录 💯GPTs指令💯前言💯 Front-end Expert主要功能适用场景优点缺点 💯小结 💯GPTs指令 中文翻译: 使用Dalle生成用户…...

一篇保姆式centos/ubuntu安装docker

前言: 本章节分别演示centos虚拟机,ubuntu虚拟机进行安装docker。 上一篇介绍:docker一键部署springboot项目 一:centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…...

人工智能大趋势下软件开发的未来

随着人工智能(AI)技术的不断演进,软件开发领域正经历着深刻的变革。中国电信推出的星辰大模型软件工厂,作为国内首款破局性AI开发工具,其全自动流水线的特性——自动生成前后端代码、自主测试和纠错等,为软…...

string的模拟实现

string的模拟实现 一.string的模拟实现1.1构造函数和析构函数,以及一些简单函数1.2迭代器1.3增删查改 二.运算符重载三.流插入和流提取 一.string的模拟实现 string本质上是是一种char类型的顺序表,结构上和顺序表相似。 namespace Mystring {class st…...

Qt桌面应用开发 第七天(绘图事件 绘图设备)

目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求:利用QPainter绘制点、线、圆、矩形、文字;设置画笔改为红色,宽度为…...

PDF内容提取,MinerU使用

准备环境 # python 3.10 python3 -m pip install huggingface_hub python3 -m pip install modelscope python3 -m pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com下载需要的模型 import json import osimport requests from huggingface_hub…...

基于lora的llama2二次预训练

基于lora的llama2二次预训练 一、为什么需要对llama2做基于lora的二次预训练? 加入中文训练语料进行llama2的二次预训练,这样模型就可以增加支持中文输出的能力。 二、基于lora的llama2二次预训练的目标是什么? 在保持预训练模型权重不变的情况下&a…...

机器学习之量子机器学习(Quantum Machine Learning, QML)

量子机器学习(Quantum Machine Learning, QML)是一门结合量子计算与机器学习的新兴交叉领域。它利用量子计算的优势(如并行计算、量子叠加和量子纠缠)来解决传统机器学习中难以处理的问题,或提升算法效率和性能。 QML 的核心要素 量子计算的特性: 量子叠加:允许量子比特…...

【2024 Optimal Control 16-745】【Lecture 3 + Lecture4】minimization.ipynb功能分析

主要功能-最小化问题 目标函数分析: 定义函数 f ( x ) f(x) f(x) 及其一阶、二阶导数。使用绘图工具可视化函数的形状。 实现数值优化: 使用牛顿法寻找函数的极值点,结合一阶和二阶导数加速收敛。使用正则化牛顿法解决二阶导数矩阵可能不正定的问题。 可视化过程…...

一种新的电机冷却方式——热管冷却

在现代工业设备中,电机作为一种核心动力装置,广泛应用于各个领域。例如,家用电器、自动化生产线、交通工具等都离不开电机的运作。然而,随着电机功率的不断提升和负载的增加,电机在运行过程中产生的热量也随之增多&…...

虚拟机上搭建达梦DSC简略步骤

vmware 17 centos 7.6 达梦 dm8_20240920_x86_rh7_64.iso cd /d C:\Program Files (x86)\VMware\VMware Workstation\.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "F:\vm\dmdsc\sharedisk\share-dcr.vmdk" .\vmware-vdiskmanager.exe -c -s 100MB -a l…...

C++ 矩阵旋转

【问题描述】 编写一个程序,读入一个矩阵,输出该矩阵以第一行第一列数字为中心,顺时针旋转90度后的新矩阵,例如: 输入的矩阵为: 1 2 3 4 5 6 顺时针旋转90度后输出的矩阵为: 4 1 5 2 6 3 【输入…...

mongodb基础操作

创建数据库 use admin授权 db.auth("admin","123456")创建用户 db.createUser({ user: "xxx", pwd: "xxxxxx", roles: [ { role: "readWrite", db: "iot" } ] })查询数据库大小 show dbs;查询结果数量 db.mo…...

以思维链为线索推理隐含情感

❀ 以思维链为线索推理隐含情感 简介摘要引言THORTHOR核心代码实验结果代码运行总结 简介 本文主要对2023ACL论文《Reasoning Implicit Sentiment with Chain-of-Thought Prompting》主要内容进行介绍。 摘要 尽管情绪分析任务常依据文本中的直接意见表达来判定目标的情绪倾向…...

(笔记,自己可见_1)简单了解ZYNQ

1、zynq首先是一个片上操作系统(Soc),结合了arm(PS)和fpga(PL)两部分组成 Zynq系统主要由两部分组成:PS(Processing System)和PL(Programmable L…...

部署自动清理任务解决ORA-00257: archiver error. Connect internal only, until freed

使用oracle数据库的时候,我们一般都会开启归档,确保数据库的日志连续和和数据安全。但随着数据库的运行,归档文件会越来越多,最终撑满磁盘空间,数据库无法继续归档,出现“ORA-00257: archiver error. Conne…...

scau编译原理综合性实验

一、题目要求 题目: 选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。 要求: 设计并实现一个一遍扫描的词法语法语义分析程序,将部分C语言的语法成分(包含赋值语句、if语句、while循环语句&#xf…...

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时,突然发现它的一个接口,被另一个服务ip频繁的请求。 按理说,之前设置的是,每隔1分钟请求一次接口。但从日志来看,则是1秒钟请求一次&#xff…...

PICO VR串流调试Unity程序

在平时写Unity的VR程序的时候,需要调试自己写的代码,但是有的时候会发现场景过于复杂,不是HMD一体机能运行的,或者为了能够更方便的调试,不需要每次都将程序部署到眼睛里,这样非常浪费时间,对于…...

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述 在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为…...

PML和金属边界区别

一、完美匹配层(PML)边界 原理:PML是一种特殊的吸收边界条件。它基于麦克斯韦方程组的特殊解来设计,其材料参数是经过精心选择的,使得在这个边界区域内,电磁波能够无反射地进入并被吸收。从数学上来说&…...

机器学习基础--基于线性回归房价预测

经典的线性回归模型主要用来预测一些存在着线性关系的数据集。回归模型可以理解为:存在一个点集,用一条曲线去拟合它分布的过程。如果拟合曲线是一条直线,则称为线性回归。如果是一条二次曲线,则被称为二次回归。线性回归是回归模…...

【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)

网垃圾分类网站的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着全球环境保护意识的提升,垃圾分类已成为一项紧迫且重要的任务。为了有效推动垃圾分类的实施,提升公众的环保意识和参与度,垃圾分类已…...

47小型项目的规划与实施

每天五分钟学Linux | 第四十七课:小型项目的规划与实施 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了并发编程的知识,包括如何管理和使用进程与线程。今天,我们将探讨如何规划…...

Linux---ps命令

​​​​​​Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...

Qt Qt::UniqueConnection 底层调用

在这里插入图片描述 步骤1: 1:判断槽函数连接方式, 以及信号对象是否有效2: 信号计算格式是否 大于 signal_index 目前调试 signal_index 不太清楚怎末计算的(有清楚的帮忙街道)3:获取槽函数对…...

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)

目录 前言 Generic Webhook Trigger 插件 下载插件 ​编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建,本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目; Generic Webhook Trigger 插件 实现代码推送后,触…...

2025-2026财年美国CISA国际战略规划(下)

文章目录 前言四、加强综合网络防御(一)与合作伙伴共同实施网络防御,降低集体风险推动措施有效性衡量 (二)大规模推动标准和安全,以提高网络安全推动措施有效性衡量 (三)提高主要合作…...

aws ses生产环境申请

* aws ses生产环境申请经验: 要有域名邮箱作为反馈联系邮箱 且有收发记录 最好使用aws的WorkMail要说明清晰的使用用途、预估量、如何处理退信和投诉、防spam策略 等内容,这里可以先问问AI(比如:如何处理退信和投诉?…...

velocity unable to find resource ‘xxx.vm‘ in any resource loader

大家好,我是 程序员码递夫。 [TOC]velocity unable to find resource ‘xxx.vm’ in any resource loader 1.问题 今天帮客户解决一个远古 java web系统的bug , 客户的系统用了非常古老的框架 jdk1.6struc1.1 velocity1.5 运行在tomcat6环境。 客户想迁移到 tomc…...

InfluxDB时序数据库笔记(一)

InfluxDB笔记一汇总 1、时间序列数据库概述2、时间序列数据库特点3、时间序列数据库应用场景4、InfluxDB数据生命周期5、InfluxDB历史数据需要另外归档吗?6、InfluxDB历史数据如何归档?7、太麻烦了,允许的话选择设施完备的InfluxDB云产品吧8、…...

c#编码技巧(十九):各种集合特点汇总

.NET 常用集合对比: .NET 常见的线程安全集合 .NET 只读集合...

Python中的__init__()函数

什么是__init__()函数? __init__()函数其实是用于初始化新建对象的状态,当你创建一个类的实例时,__init__()函数的方法就会被自动调用,允许你为对象设置初始属性或执行初始化操作。 接下来这里让我们举例说明: 首先&#xff0c…...

写的bug与调试

无论是代码中的逻辑混乱,还是环境配置引发的灾难,亦或是多人协作产生的诡异问题,都可以在这里分享。把你职业生涯里遇到或写过的最大 bug 故事讲出来,让大家一起感受那些惊心动魄、哭笑不得的瞬间,也为后来人敲响警钟吧…...

本地安装YAPI

项目中用到很多的RESTAPI,光靠人工管理或者普通文档肯定是不行的,翻了很多的RESTAPI管理工具,还是选择了YAPI,原因有2,一个是接口位于内网,外网网站上管理测试不到内网接口,另外一个是使用方式&…...

嵌入式Linux基于IMX6ULL tslib学习总结

目录 1. tslib开源库介绍1.1 tslib主要功能1.2 架构 2. tslib代码简单分析2.1 ts_print_mt.c分析代码2.2 ts_setup代码分析2.3 ts_open代码分析2.4 ts_config代码分析2.5 ts_read_mt代码分析2.6 tslib中4个模块的含义 3. 使用tslib库打印触摸屏2点之间的距离 基于韦东山IMX6ULL…...

pinia的使用

一、安装 Pinia 首先,确保你的项目已经安装了 Vue.js(版本 3.x)。如果没有,请先安装 Vue。 然后使用包管理器(如 npm 或 yarn)安装 Pinia: 通过 npm 安装:npm install pinia通过 ya…...

亚信安全携手飞书“走近先进” 与保隆科技探索制造业数字化转型

亚信安全携手飞书组织举办“走近先进”活动。近日活动“走近”了中国汽车供应链百强、上海市制造业五十强企业——上海保隆汽车科技股份有限公司(以下简称“保隆科技”)。活动围绕“突破桎梏 加速升级”的主题,聚焦企业数字化转型的核心议题&…...

mybatis-plus方法无效且字段映射失败错误排查

问题: Invalid bound statement (not found): com.htlc.assetswap.mapper.WalletMapper.insert,并且select * 进行查询时带下划线的字段未成功映射。 排查: 1.检查WalletMapper接口,确保继承自BaseMapper 2.启用驼峰命名法映射。a…...

poi模板动态导出,下拉框联动,公式设置

背景:有一个动态导出模板的需求,根据页面维护的数据比如模板名称,模板的sheet名称,列名称宽度高度等,导出excel文件。打破以往把excel上传到代码的resource中,或者文件服务中,再下载出来导入。这…...