汇编前置知识学习 第11-13天
今天要做什么?
1:虚拟机准备环境
2:virtualBox 创建虚拟硬盘,配置bochs文件启动
一:
VMDK(VMWare 虚拟机)
VDI(VirtualBox虚拟机)
VHD(virtual-PC/Hyper-V 虚拟机)
Vhd 文件分析:
在以512一个扇区的磁盘映像中,第一个扇区是0000 0000 - 0000 0200 0面0柱1扇区

第二个 0面 0柱 2扇区


文件的尾部:
Conectix 标志 用来告诉打开他的虚拟机,这是一个合法的的vhd文件
固定大小的的vhd文件简单,可以使用简单的方法写入虚拟硬盘,这可以简化我们的工作和学习过程。
二:

把创建的虚拟硬盘分配给空磁盘设置虚拟机



将生成的配置文件放到bochs安装文件目录,用调试方式启动bochs模拟器,进入相应磁盘映像,开始调试
2:创建主引导扇区程序
把一个程序放到主引导扇区,让计算机在启动后执行它。为此,这一课将演示如何编辑和编译这样一个符合要求的汇编语言程序。
asm文件编译成bin后 进行二进制分析
nasm exam.asm -f bin exam1.bin

B8 30 00 代表第一条编译后的指令 (低端字节序)B8 (操作码) 00 30
BA C0 00 代表第二条编译后的指令 (低端字节序)BA (操作码) 00 C0
引导扇区512个字节,目前只有八个字节,而且最后两个字节必须是55 AA,所以中间需要填充502个东西。
DB 向文件中添加一个字节的数据
什么是伪指令?并不是真正代表的处理器指令,而是一个让编译器做事,而不是处理器做事
nasm 给我们添加了另外一个编译器伪指令 times
Times 502 db 0 嵌套伪指令 输出502个 db 0
最后写上 db 0x55
db 0x AA

然后将 生成的bin文件,写入创建好的learn.vhd
传统上,我们读写硬盘 必须读取磁头号、柱面(磁道)号、和扇区号但这里并不是这样,这里需要指定逻辑扇区号。
通常一个扇区是512个字节

为了更好的区分扇区,引入了逻辑块(LBA)Logical Block Address地址的概念。
假定某硬盘有2个磁头100个柱面(磁道),每磁道有17个扇区。那么:
逻辑0扇区对应着0面0道1扇区
逻辑1扇区对应着0面0道2扇区
。。
逻辑16对应着0面0道17扇区;
逻辑17扇区对应着1面0道1扇区
逻辑18扇区对应着1面0道2扇区
。。。
逻辑33扇区对应着1面0道17扇区
逻辑34扇区对应着0面1道1扇区
逻辑35扇区对应着0面1道2扇区
要注意到,扇区在编号是,是以柱面(磁道)为单位的,即 先是0面 0道,接着是1面0道,直到把所有盘面上的0磁道处理完,在接着处理下一个柱面。之所以这样做,是因为要加速硬盘的访问速度,最好是尽可能不移动磁头
这里一共有3400个扇区,最后一个逻辑扇区的编号是3399,对应着 1面 99道 17扇区,这也是整个硬盘上最后一个物理扇区。
若已知物理扇区的位置是位于H面(头)、
C道的第S个扇区,则他的逻辑扇区号是:
C * 磁头总数*每道扇区数+H*每道扇区数+(s-1)
用工具把生成的bin文件写入刚才创建的 vhd文件

3:调试主引导扇区程序,来了解Bochs虚拟机的软件调试环境
3.1
启动后,显示一系列状态信息,启动工作和一些模块,再加电后 取指令 执行
Bochs不同,取第一条指令之前,会停下来,等待调试指令

3.2
准备取用第一条指令,但是还有没取,也没有执行
[0x0000 ffff fff0 ]是物理地址,f000:fff0是逻辑地址(段寄存器cs和偏移地址)
用的不是8086处理器,所以段寄存器这里不一样 8086重置后是FFFF,这个是FFF0
段地址f000左移四位,再加上后面的偏移地址fff0 等于ffff0,但是这里的物理地址是很长的0x0000 ffff fff0,这里是不一致的,原则上应该是一致的。有别的原因
后面jmpf 是一条跳转指令,后面的:ea5be000f是时钟数,每模拟执行一条指令之后,这个时针滴答一次,这个时钟的值是 已经执行的指令数。
输入 sreg 会显示很多段寄存器的内容
输入 r 显示所有的通用寄存器
AX 包含AH和AL 是16位的寄存器,EAX是32位的寄存器,RAX是64位的寄存器,其他的通用寄存器是一样的






如果计算机的设置是从硬盘启动,那么rom bios将读取硬盘主引导扇区的内容,执行跳转指令JMP 0x0000: 0x7c00(这条指令是离开ROMBios时所执行的最后一条指令),主引导扇区里面,有些代码指令,从硬盘的其他部分读取代码指令,用来接力执行,操作系统启动

AX、BX、CX、DX、SI、DI、SP、BP、IP
输入 sreg 会显示很多段寄存器的内容
输入 r 显示所有的通用寄存器
单步执行指令:输入框 输入S (step)单步
断点指令:b 所谓断点 这是一个内存地址,当处理器执行到这个地址时,指令停止
例如输入:b 0x7c00 ,到0x7c00 时,指令停止
输入C 时,不间断执行指令,如果我们设置了断点,他就会在断点处停下来
进入调试窗口,查看 段寄存器(输入sreg) 和通用寄存器 输入(r)
输入s单步执行指令 后 执行当前正在等待的指令,然后显示下一次将要执行的指令,

我们要注意,刚才已经执行了一条指令,意味着这条指令 将在t = 1的条件上执行,但是还没有执行。
此时 物理地址时[0x 0000 000f e05b]: f000:e05b (unk,ctxt),从地址可以看出,目前是在rom Bios里面执行,后面的
Xor ax, ax 是这条指令的汇编语言形式 :31c0 是这条指令的机器码
相关文章:
汇编前置知识学习 第11-13天
今天要做什么? 1:虚拟机准备环境 2:virtualBox 创建虚拟硬盘,配置bochs文件启动 一: VMDK(VMWare 虚拟机) VDI(VirtualBox虚拟机) VHD(virtual-PC/Hyper-V 虚拟机)…...
springboot在业务层校验对象/集合中字段是否符合要求
springboot在业务层校验对象参数是否必填 1.场景说明2.代码实现 1.场景说明 为什么不在控制层使用Validated或者Valid注解直接进行校验呢?例如通过excel导入数据,将excel数据转为实体类集合后,校验集合中属性是否符合要求。 2.代码实现 定义…...
python二级考试中会考到的第三方库
在 Python 二级考试中,可能会涉及一些常用的第三方库。这些库可以帮助考生更好地理解和应用 Python 编程。以下是一些在 Python 二级考试中可能会用到的第三方库及其简要介绍:1. requests 用途:用于发送 HTTP 请求。安装:pip install requests示例代码:import requestsres…...
Linux中死锁问题的探讨
在 Linux 中,死锁(Deadlock) 是指多个进程或线程因为竞争资源而相互等待,导致所有相关进程或线程都无法继续执行的状态。死锁是一种严重的系统问题,会导致系统资源浪费,甚至系统崩溃。 死锁的定义 死锁是指…...
【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch数据更新与删除深度解析:2.3.1 避免频繁更新(Update by Query的代价)案例背景1. Update by Query的内部机制解析1.1 文档更…...
【Python项目】基于Python的书籍售卖系统
【Python项目】基于Python的书籍售卖系统 技术简介:采用Python技术、MYSQL数据库等实现。 系统简介:书籍售卖系统是一个基于B/S结构的在线图书销售平台,主要分为前台和后台两部分。前台系统功能模块分为(1)用户中心模…...
spring boot + vue 搭建环境
参考文档:https://blog.csdn.net/weixin_44215249/article/details/117376417?fromshareblogdetail&sharetypeblogdetail&sharerId117376417&sharereferPC&sharesourceqxpapt&sharefromfrom_link. spring boot vue 搭建环境 一、浏览器二、jd…...
Linux下的shell指令(一)
作业 1> 在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash read -p "请输入学生成绩:" score if [ "$score" -ge 90 ] && [ "$scor…...
JS禁止web页面调试
前言 由于前端在页面渲染的过程中 会调用很多后端的接口,而有些接口是不希望别人看到的,所以前端调用后端接口的行为动作就需要做一个隐藏。 禁用右键菜单 document.oncontextmenu function() {console.log("禁用右键菜单");return false;…...
GIt分支合并
分支 1: C0 → C1 → C2 → C3(最新) 分支 2: C0 → C4 → C5 → C6(最新)1. 找到共同父节点 C0 Git 会先找出 branch1 和 branch2 的共同祖先节点 C0。这通常借助 git merge-base 命令达成,虽然在日常使用 git merge…...
Sqli-labs
1.搭建【前提是已经下载安装好phpstudy_pro】 1.1源码准备 1.1.1源码下载 这里从github下载 https://codeload.github.com/Audi-1/sqli-labs/zip/masterhttps://codeload.github.com/Audi-1/sqli-labs/zip/master 1.1.2下载的靶场源码放到WWW下 将刚才下载的压缩包解压到…...
unreal engine gameplay abiliity 获取ability的cooldown剩余时间
unreal engine gameplay abiliity 获取ability的cooldown 版本 5.4.4 参考 测试代码 if (HasAuthority() && AbilitySystemComponent){TArray<FGameplayAbilitySpecHandle> OutAbilityHandles;AbilitySystemComponent->GetAllAbilities(OutAbilityHandles…...
【GenBI优化】提升text2sql准确率:建议使用推理大模型,增加重试
引言 Text-to-SQL(文本转 SQL)是自然语言处理(NLP)领域的一项重要任务,旨在将自然语言问题自动转换为可在数据库上执行的 SQL 查询语句。这项技术在智能助手、数据分析工具、商业智能(BI)平台等领域具有广泛的应用前景,能够极大地降低数据查询和分析的门槛,让非技术用…...
【六祎 - Note】SQL备忘录;DDL,DML,DQL,DCL
SQL备忘录 from to : 点击访问源地址...
高频 SQL 50 题(基础版)_1341. 电影评分
高频 SQL 50 题(基础版)_1341. 电影评分 思路 思路 (select Users.name results from Users left join MovieRating on Users.user_id MovieRating.user_id group by(Users.name) order by count(MovieRating.movie_id) desc,Users.name asc limit 1) u…...
JavaScript 变量命名规范
在编写JavaScript代码时,选择合适的变量名对于代码的清晰度、可读性和可维护性至关重要。一个良好的变量命名规范不仅能帮助团队成员更好地理解代码意图,还能减少错误发生的可能性。本文将介绍一些广泛接受的JavaScript变量命名规则和最佳实践。 命名的…...
解决 uView-UI和uv-ui 中 u-tabs 组件在微信小程序中出现横向滚动条的问题
问题描述 在微信小程序中使用 uView-UI 的 u-tabs 组件时,用户可能会遇到横向滚动条的问题。这不仅影响了页面的美观,还可能导致用户误操作。 问题原因 该问题的根本原因是未在微信小程序环境下屏蔽滚动条。uView-UI 的 u-tabs 组件默认只在 H5 环境下…...
20250304解决在飞凌的OK3588-C的Linux R4下解决使用gstreamer保存的mp4打不开
sync poweroff rootok3588:/# sync rootok3588:/# sync rootok3588:/# cd 107 rootok3588:/107# ls -l total 0 rootok3588:/107# sync rootok3588:/107# poweroff 20250304解决在飞凌的OK3588-C的Linux R4下解决使用gstreamer保存的mp4打不开 2025/3/4 10:58 缘起:…...
build gcc
1,下载源码 wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2 wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz git clone --mirror https://github…...
【每日论文】How far can we go with ImageNet for Text-to-Image generation?
下载PDF或查看论文,请点击:LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 近年来,通过在大规模数据集上训练,文本到图像(T2I)生成模型已经取得了显著成果&a…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
