chater03

本文介绍了Win32汇编的基础知识,包括程序定义模式、段的定义等内容,并详细解释了.data、.data?及.code等段的区别。此外,还介绍了如何通过Win32 API调用系统功能。

 由于前面的内容涉及基础比较多,所以个人认为还是把基础打好,就整理一下当作复习。

 

3.11 定义模式

在程序的第一部分,定义语句:

.386

        .model flat,stdcall

        option casemap:none

作用:定义了程序使用的指令集,工作模式和格式。

1.    指定使用的指令集

.386 用于告诉编译器在本程序中使用的指令集。后面带P的伪指令则表示程序中可以使用特权指令。

附:Pentium MMX开始增加了MMX指令集,除了定义 .586 外,还要加 .mmx

 

2.model语句

作用:用来定义程序工作的模式,使用方法:

.model 内存模式[,语言模式] [,其他模式]

内存模式:我们一般使用 flat Win32程序使用的模式,代码和数据段使用同一个4GB段)

语言模式:即子程序的调用方式。 Stdcall 指出了调用子程序或Win32 API参数传递的次序堆栈平衡的方法。

3.option 语句

option语句定义的选项有很多,我们在win32程序中,只需定义 option casemapnone 这个语句定义了程序中的变量和子程序名是否对大小写敏感.

 

3.1.2 段的定义

1.段的概念

Win32汇编源程序中“分段”的概念实际上是把不同类型的数据或代码归类,再放到不同属性的内存页(也就是不同的“分段”)中,这中间不涉及使用不同的段选择器。

 

2.    数据段

.data 可读可写的已定义变量 。一般存放在_DATA节区。

.data? 可读可写未定义变量。一般存放_BSS节区。

.const 数据是一些常量。如果对.const段中的数据做了写操作的指令,会引起保护错误。(.code段也是可以读)

 

3.    代码段

所有的指令都必须写在代码段中,在可执行文件中,代码段一般是放在_TEXT节区中。Win32环境中的数据段不可执行,只有代码段有可执行的属性。对于工作在特权3的应用程序来说,(.code)段是不可写的。

 

4.    堆栈段

值得一提:堆栈段的内存属性是可读可写并且可以执行。

 

3.1.3程序结束和程序入口

End [开始地址]

 

End start

31.4 注释和换行

用分号(;)注释可以在一行的头部,也可以在一行的中间。

 

3.2 调用API

 

应用程序调用系统功能的一般过程1)系统提供功能模块并约定参数的定义方法,同时约定调用的方式,应用程序按照这个约定来调用系统功能。

 

Win32的系统功能模块放在Windows的动态连接库(DLL)中,DLL是一种Windows的可执行文件,采用和.exe文件同样的PE格式

 

Win32 API 的核心由3DLL提供:

1)  KERNEL32.DLL ——系统服务功能。包括内存管理,任务管理和动态链接等。

2)  GDI32.DLL——图形设备接口。利用VGADRV之类的显示设备驱动程序完成显示文本和矩形等功能。

3)  USER32.DLL——用户接口服务。建立窗口和传送消息等。

 

 

### ### UniApp 微信小程序构建报错 `package.json not found` 解决方案 在 UniApp 项目中开发微信小程序时,若在构建过程中遇到 `package.json not found` 或 `NPM packages not found` 错误,通常意味着构建系统未能识别到项目中的 `package.json` 文件或未正确配置 NPM 构建路径。此问题的解决需从项目结构、配置文件以及构建流程三方面入手。 #### 1. 确保项目根目录存在 `package.json` 如果项目中没有 `package.json` 文件,构建系统将无法识别 NPM 依赖目录。此时可以通过执行以下命令在项目根目录生成该文件: ```bash npm init -y ``` 该命令会创建一个默认的 `package.json` 文件,确保构建工具能够识别项目为 NPM 项目并处理依赖[^4]。 #### 2. 配置 `project.config.json` 中的 NPM 构建参数 微信开发者工具在构建 NPM 时依赖 `project.config.json` 文件中的配置。如果 `miniprogramRoot` 或 `packNpmManually` 设置不正确,可能导致构建失败。建议在该配置文件中添加以下字段: ```json { "miniprogramRoot": "miniprogram/", "packNpmManually": true, "packNpmRelationList": [ { "packageJsonPath": "./package.json", "miniprogramNpmDistDir": "./miniprogram/" } ] } ``` 其中 `miniprogramRoot` 指定小程序源码目录,`packNpmManually` 启用手动构建 NPM 包,`packNpmRelationList` 明确指定 `package.json` 路径与 NPM 包输出目录。该配置确保构建系统在指定路径下查找并处理 NPM 依赖[^3]。 #### 3. 确保依赖安装路径与构建路径一致 在 UniApp 中,若使用 `npm install` 安装依赖但未将其放置在 `miniprogramRoot` 目录下,构建系统将无法识别这些依赖。因此建议在执行安装命令前,确认当前目录为小程序源码目录(如 `miniprogram/`),或使用 `miniprogramNpmDistDir` 指定依赖输出路径。例如: ```bash cd miniprogram npm install @vant/weapp --save ``` 这样可确保 `node_modules` 被正确识别,并在构建后生成 `miniprogram_npm` 文件夹,包含小程序可用的组件资源[^4]。 #### 4. 清理缓存并重新构建 如果之前构建失败导致缓存残留,可能影响后续构建流程。建议删除 `node_modules` 和 `miniprogram_npm` 文件夹后重新安装依赖并构建: ```bash rm -rf node_modules miniprogram_npm npm install npm install @vant/weapp -S --production ``` 该流程确保依赖被重新解析并生成符合小程序规范的结构,避免因缓存导致构建失败[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值