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

汇编前置知识学习 第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 题&#xff08;基础版&#xff09;_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代码时&#xff0c;选择合适的变量名对于代码的清晰度、可读性和可维护性至关重要。一个良好的变量命名规范不仅能帮助团队成员更好地理解代码意图&#xff0c;还能减少错误发生的可能性。本文将介绍一些广泛接受的JavaScript变量命名规则和最佳实践。 命名的…...

解决 uView-UI和uv-ui 中 u-tabs 组件在微信小程序中出现横向滚动条的问题

问题描述 在微信小程序中使用 uView-UI 的 u-tabs 组件时&#xff0c;用户可能会遇到横向滚动条的问题。这不仅影响了页面的美观&#xff0c;还可能导致用户误操作。 问题原因 该问题的根本原因是未在微信小程序环境下屏蔽滚动条。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 缘起&#xff1a…...

build gcc

1&#xff0c;下载源码 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或查看论文&#xff0c;请点击&#xff1a;LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 近年来&#xff0c;通过在大规模数据集上训练&#xff0c;文本到图像&#xff08;T2I&#xff09;生成模型已经取得了显著成果&a…...

OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置 对于使用OpenClaw进行AI智能体开发的开发者而言&#xff0c;快速接入稳定…...

Zotero老用户必看!文献管理后的阅读断层,Scholaread如何让你的千篇文献库“活“起来?

你用Zotero管理了上千篇文献&#xff0c;却在阅读时不得不打开知云、翻译狗&#xff0c;笔记分散在多个软件&#xff0c;标注无法同步。这种"管理在Zotero&#xff0c;阅读在别处"的割裂体验&#xff0c;正在吞噬你的科研效率。本文将展示Scholaread如何通过一键导入…...

手把手教你用Docker Compose部署Jitsi Meet视频会议,并解决“断开链接”的坑

从零构建高可用Jitsi Meet视频会议系统&#xff1a;Docker Compose实战与深度排错指南 在远程协作成为常态的今天&#xff0c;搭建自主可控的视频会议系统已成为许多技术团队的基础需求。Jitsi Meet作为开源的WebRTC视频会议解决方案&#xff0c;凭借其出色的音视频质量和灵活的…...

KRTS实时内核开发环境搭建:手把手教你配置隔离CPU与Visual Studio联调

KRTS实时内核开发环境搭建&#xff1a;手把手教你配置隔离CPU与Visual Studio联调 在工业自动化、机器人控制和高频交易等硬实时应用领域&#xff0c;毫秒级的延迟差异可能导致整个系统失效。KRTS&#xff08;Kithara RealTime Suite&#xff09;作为Windows平台上的实时扩展解…...

FFXIV TexTools:如何用3个步骤打造你的专属艾欧泽亚冒险形象

FFXIV TexTools&#xff1a;如何用3个步骤打造你的专属艾欧泽亚冒险形象 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI 想象一下&#xff0c;你站在艾欧泽亚的冒险广场上&#xff0c;周围的玩家都穿着独特的装备…...

NoFences:如何用免费开源方案革命性管理你的Windows桌面分区

NoFences&#xff1a;如何用免费开源方案革命性管理你的Windows桌面分区 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了在杂乱无章的Windows桌面上寻找文件&…...

RAG vs LoRA:AI产品选型困境终结者!产品经理必看的技术选型指南

本文深入剖析了AI产品开发中RAG与LoRA技术的选型困境&#xff0c;指出两者并非竞争关系&#xff0c;而是基于不同场景的产品判断失误。文章从概念解析入手&#xff0c;通过生动类比区分了RAG&#xff08;知识库增强&#xff09;与LoRA&#xff08;模型微调&#xff09;的核心差…...

GJB 128B-2021标准变更深度解析:VDMOS产品试验方法的影响与应对

1. GJB 128B-2021标准变更的核心要点 对于从事VDMOS产品研发和质量控制的工程师来说&#xff0c;2022年3月正式实施的GJB 128B-2021标准带来了不少值得关注的调整。相比旧版标准&#xff0c;这次修订在试验条件、热平衡判定、静电防护等多个关键环节都做出了具体规定。我仔细研…...

RT-Thread裁剪实战:从98KB到28KB的嵌入式系统瘦身指南

1. 项目概述&#xff1a;为什么我们需要裁剪RT-Thread&#xff1f;如果你是一名嵌入式软件工程师&#xff0c;或者正在学习RT-Thread&#xff0c;那么“裁剪”这个词对你来说一定不陌生。RT-Thread作为一款优秀的国产开源实时操作系统&#xff0c;其标准版&#xff08;或称完整…...

Vivado 2022.1里Floating-point IP核的隐藏技巧:如何优化开方运算的延迟与资源消耗

Vivado 2022.1浮点开方IP核深度调优&#xff1a;从参数配置到硬件实现的黄金法则 在FPGA信号处理系统中&#xff0c;浮点运算单元往往是性能瓶颈所在。当设计一个实时性要求极高的雷达信号处理链路时&#xff0c;我曾在某型号的Xilinx UltraScale器件上遭遇过这样的困境&#x…...