汇编前置知识学习 第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…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...