win32汇编环境,按字节、双字等复制字符的操作
;运行效果

;win32汇编环境,按字节、双字等复制字符的操作
;这是汇编的优点之一。我们可以按字节、双字、四字、八字节等复制或挨个检查字符。
;有时候,在接收到的一串信息中,比如访问网站时,返回的字串里,有很多0值存在,用一般的字符串处理函数会把它当作结束符看待。这是错误的,因为这个0值只是一段信息的结束,后面还跟着很多的字串。
;有时候,访问网站时,返回的字串是UFT8编码的,这是不定长的字串,由某个字节的内容决定后面跟着的字串有几个字节,或有多长。我们必须分析每个字节的内容,决定后一步如何读取或分析。用其它的高级语言,反而变得更复杂,甚至无法这么低层的操作。
;在写网络爬虫时,一样可以按字节分析,把汉字与字母区别开来。
;很多的时候,显示出乱码,都是因为编码的问题导致的。比如字串是UNICODE编码的,按默认的ASCII去读取或发送,就成了乱码。
;我们首先需要知道,byte是字节(8位)、word是双字节(16位)、dword是四字节(32位),qword是八字节(64位)的概念。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
; 自定义函数声明;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD ;对话框窗口函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
DlgName db "MyDialog",0
szCap db "提示",0
szEx db "ABCDEFGHIJKLMNOPQRST",0 ;要读取的字符串
.data?
hInstance HINSTANCE ?
.const
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000 ;图标
IDB01 equ 11 ;按钮控件标识符
IDB02 equ 12
IDB03 equ 13
IDB04 equ 14
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL @stPs:PAINTSTRUCT
LOCAL @stRect:RECT
LOCAL @hDc
LOCAL @szBuffer[256]:byte
.if uMsg == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN ;加载图标
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseif uMsg == WM_COMMAND
mov eax,wParam
.if eax == IDB01
mov bl,byte ptr [szEx+3] ;因为从0开始计数,取第4个字节则是+3,这里使用bl寄存器,它是8位寄存器,即1个字节.byte的意思是按字节复制
mov byte ptr [@szBuffer],bl
mov byte ptr [@szBuffer+1],0 ;第2个字节加0,即结束符
invoke MessageBox,NULL,addr @szBuffer,addr szCap,MB_OK
.elseif ax == IDB02
mov bx,word ptr [szEx+4] ;按双字节复制,这里使用bx,bx是16位寄存器,word是双字节,每字节为8位,双字即16位,要对应的上
mov word ptr [@szBuffer],bx
mov byte ptr [@szBuffer+2],0
invoke MessageBox,NULL,addr @szBuffer,addr szCap,MB_OK
.elseif ax == IDB03
mov ebx,dword ptr [szEx+4] ;按四字节复制
mov dword ptr [@szBuffer],ebx
mov byte ptr [@szBuffer+4],0
invoke MessageBox,NULL,addr @szBuffer,addr szCap,MB_OK
.elseif ax == IDB04
mov ebx,dword ptr [szEx] ;按八字节复制,这里分两次按4字节操作,因为现在用的是32位编译器,撑不上64位。不用追求64位的,那个还不完善,32位的精通了,一样实现目的。
mov dword ptr [@szBuffer],ebx
mov ebx,dword ptr [szEx+4]
mov dword ptr [@szBuffer+4],ebx
mov byte ptr [@szBuffer+8],0
invoke MessageBox,NULL,addr @szBuffer,addr szCap,MB_OK
.endif
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax
mov @stRect.left,20
mov @stRect.top,20
mov @stRect.right,200
mov @stRect.bottom,40
invoke DrawText,@hDc,addr szEx,-1,addr @stRect,DT_SINGLELINE or DT_LEFT or DT_VCENTER
invoke EndPaint,hWnd,addr @stPs
.elseif uMsg == WM_CLOSE
invoke EndDialog, hWnd,NULL
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
;下面为rc文件内容
#include "resource.h" //提示缺少该文件,可以在资源里下载
#define ICO_MAIN 1000 //图标
#define IDB01 11
#define IDB02 12
#define IDB03 13
#define IDB04 14
ICO_MAIN ICON "Main.ico"
//定义对话框
MyDialog DIALOG 10, 10, 120, 130
STYLE DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION "对话框程序模版"
BEGIN
PUSHBUTTON "复制第4个字节", IDB01, 10,40,100,14
PUSHBUTTON "复制第3个双字节", IDB02, 10,60,100,12
PUSHBUTTON "复制第2个四字节", IDB03, 10,80,100,14
PUSHBUTTON "复制第1个八字节", IDB04, 10,100,100,12
END
相关文章:
win32汇编环境,按字节、双字等复制字符的操作
;运行效果 ;win32汇编环境,按字节、双字等复制字符的操作 ;这是汇编的优点之一。我们可以按字节、双字、四字、八字节等复制或挨个检查字符。 ;有时候,在接收到的一串信息中,比如访问网站时,返回的字串里,有很多0值存在࿰…...
.net 项目引用与 .NET Framework 项目引用之间的区别和相同
在 .NET 和 .NET Framework 项目中,引用其他库或项目的方式有一些区别和相同之处。以下是详细的对比: 相同点 引用目的: 目的:无论是 .NET 还是 .NET Framework 项目,引用其他库或项目的主要目的是为了使用这些库或项…...
RabbitMQ--延迟队列
(一)延迟队列 1.概念 延迟队列是一种特殊的队列,消息被发送后,消费者并不会立刻拿到消息,而是等待一段时间后,消费者才可以从这个队列中拿到消息进行消费 2.应用场景 延迟队列的应用场景很多,…...
使用pyboard、micropython和tja1050进行can通信
单片机和can收发器之间tx、rx不需要交叉接线!!! tja1050的rx接Y3、tx接Y4 from pyb import CANcan CAN(1) can.init(modecan.NORMAL, prescaler6, sjw1, bs14, bs22, auto_restartTrue) # 1Mbps的配置,本文使用的micropython1.…...
JS学习之JavaScript模块化规范进化论
前言 JavaScript 语言诞生至今,模块规范化之路曲曲折折。 前言 JavaScript 语言诞生至今,模块规范化之路曲曲折折。社区先后出现了各种解决方案,包括 AMD、CMD、CommonJS 等,而后 ECMA 组织在 JavaScript 语言标准层面࿰…...
亚博microros小车-原生ubuntu支持系列:7-脸部检测
背景知识 官网介绍: Face Mesh - mediapipe mpFaceMesh.FaceMesh() 类的参数有:self.staticMode, self.maxFaces, self.minDetectionCon, self.minTrackCon staticMode:是否将每帧图像作为静态图像处理。如果为 True,每帧都会进行人脸检测…...
第二届国赛铁三wp
第二届国赛 缺东西去我blog找👇 第二届长城杯/铁三 | DDLS BLOG web Safe_Proxy 源码题目 from flask import Flask, request, render_template_stringimport socketimport threadingimport htmlapp Flask(__name__)app.route(/, methods"GET"])de…...
缓存商品、购物车(day07)
缓存菜品 问题说明 问题说明:用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 结果: 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据,减少数据库查询…...
4【编程语言的鄙视链原因解析】
在编程行业中,是存在鄙视链的,技术越好的圈子越不明显,技术越差的圈子越明显,很多时候为新人营造了错误的观点,我们来针对此类现象为新人们讲解原因 ①心里落差:比如你是学厨师的 你经过过年努力练…...
美团一面面经
第一个问题:介绍一下最近做的项目 第二个问题:我对你项目有个地方比较感兴趣啊。就是你用的那个二级缓存,你的吞吐量有多大啊,为什么需要使用二级缓存? 答: 在二级缓存策略下,笔记详情接口的吞…...
什么是报文的大端和小端,有没有什么记忆口诀?
在计算机科学中,**大端(Big-Endian)和小端(Little-Endian)**是两种不同的字节序(即多字节数据在内存中的存储顺序)。理解这两种字节序对于网络通信、文件格式解析以及跨平台编程等非常重要。 1…...
Spring中BeanFactory和ApplicationContext的区别
目录 一、功能范围 二、Bean的加载时机 三、国际化支持 四、事件发布 五、资源加载 六、使用场景说明 在Spring框架中,BeanFactory和ApplicationContext是两种常见的容器实现方式,它们在功能和使用场景上存在一些显著的差异。本文将详细解析这两种容…...
期货行业专题|基于超融合实现 IT 基础设施现代化与国产化转型实践合集
SmartX 期货行业重要进展 帮助近 60 家期货用户部署 730 超融合节点,含 230 信创节点。 深入 5 大应用场景: 核心生产资源池 主席灾备资源池 信创云资源池 云原生存储与容器资源池 分布式存储资源池 更多超融合金融核心生产业务场景实践…...
AI新玩法:Flux.1图像生成结合内网穿透远程生图的解决方案
文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址 7. 固定远程访问公网地址 前言 在这个AI技术日新月异的时代,图像生成模型已经成为了创意工作者和开发者手中…...
Jenkins-pipeline Jenkinsfile说明
一. 简介: Jenkinsfile 是一个文本文件,通常保存在项目的源代码仓库中,用于定义 Jenkins Pipeline 的行为。使用 Jenkinsfile 可以使 CI/CD 流程版本化,并且易于共享和审核。 二. 关于jenkinsfile: jenkins的pipeline…...
vue3中为什么引入setup,引入setup是为了解决什么问题,setup的执行时机是什么?返回值是什么
在 Vue 3 中,引入 setup 函数是为了提供一种更加简洁、灵活、逻辑分离和可维护的方式来组织组件的逻辑。setup 使得 Vue 3 在构建应用时,能够更加有效地支持组合式 API(Composition API),解决了 Vue 2 中一些组件逻辑组…...
Ubuntu 安装 docker 配置环境及其常用命令
Docker 安装与配置指南 本文介绍如何在 Ubuntu 系统上安装 Docker,解决权限问题,配置 Docker Compose,代理端口转发,容器内部代理问题等并进行相关的优化设置。参考官方文档:Docker 官方安装指南 一、安装 Docker 1…...
自动化01
测试用例的万能公式:功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能),将产品的整体进行测试,人工创造一个自动化测试用例,在n个版本的时候…...
音频入门(二):音频数据增强
本文介绍了一些常见的音频数据增强方法,并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考: 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…...
MySQL管理事务处理
目录 1、事务处理是什么 2、控制事务处理 (1)事务的开始和结束 (2)回滚事务 (3)使用COMMIT (4)使用保留点 (5)结合存储过程的完整事务例子 3、小结 …...
Kerberos身份认证原理与实战排错指南
1. 为什么今天还要花时间搞懂 Kerberos?——一个被低估的“老协议”正在悄悄支撑着你的日常你每天登录公司内网查邮件、访问财务系统提交报销、用 Jenkins 构建代码、甚至在 Windows 域环境中打开一台同事的共享文件夹……这些看似顺滑的操作背后,大概率…...
6款高效降AI率工具 改写实力出众
写论文时反复检测出的AI痕迹总让你提心吊胆?别担心,这里整理了6款真正好用的论文降AI率工具,堪称应对AI生成特征的“得力助手”。它们能有效识别并消除AI生成的痕迹,改写能力出众,帮你快速降低查重率,顺利通…...
多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?
多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?关键词 多智能体系统、自动谈判、博弈论、纳什均衡、帕累托最优、双边/多边谈判、强化学习谈判、动态定价 摘要 想象一个没有人类中介的世界:电商平台上的智能客服自动和批发商砍价、供…...
WebSocket实时通信架构进阶:Room、命名空间与集群部署
WebSocket实时通信架构进阶:Room、命名空间与集群部署 作者:Crown_22 | AI Agent & Hermes Agent 桌面程序开发者 前言 WebSocket已经成为实时应用的标准技术,但大多数教程只停留在"建立连接、发送消息"的基础阶段。在生产环境中,你需要处理Room管理、命名空…...
WTF Auto Layout? 实战:10个常见约束冲突案例解析与解决方案
WTF Auto Layout? 实战:10个常见约束冲突案例解析与解决方案 【免费下载链接】wtfautolayout The source code for Why The Failure, Auto Layout? 项目地址: https://gitcode.com/gh_mirrors/wt/wtfautolayout 在iOS开发中,Auto Layout是构建灵…...
Graphin高级应用:结合GISDK构建配置化图分析模块的完整指南
Graphin高级应用:结合GISDK构建配置化图分析模块的完整指南 【免费下载链接】Graphin 🌌 A React toolkit for graph visualization based on G6. 项目地址: https://gitcode.com/gh_mirrors/gr/Graphin 在当今数据驱动的时代,图可视化…...
通过curl命令快速测试Taotoken大模型API的连通性与返回格式
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令快速测试Taotoken大模型API的连通性与返回格式 在集成大模型能力到应用时,开发者通常需要一种快速、轻量的…...
量子纠错码VarQEC:原理、实现与硬件优化
1. 量子纠错码基础与实验背景量子纠错码(Quantum Error Correction Codes, QEC)是量子计算中保护量子信息免受噪声影响的核心技术。与经典纠错码不同,量子纠错需要应对量子态特有的退相干和纠缠特性。传统QEC如[[5,1,3]]完美码虽然理论完备&a…...
因果推断与机器学习融合:量化分析社会运动中镇压与抗议的动态关系
1. 项目概述:当数据科学遇见社会运动如果你研究过社会运动,尤其是那些看似突然爆发、席卷全国的抗议浪潮,你可能会被一个核心问题困扰:国家机器的镇压,究竟是浇灭火焰的冷水,还是火上浇油的催化剂ÿ…...
理想二极管控制器:用MOSFET实现毫伏级压降的电源管理方案
1. 理想二极管控制器:告别传统二极管的压降损耗 在电源设计、电池保护、太阳能板并联这些领域里,二极管是个再常见不过的元件。我们用它来防反接、做整流、实现“或”逻辑供电,几乎不假思索。但如果你设计过一个需要处理大电流、低电压的系统…...
