X86汇编调试环境搭建的过程

最近毕设需要做一个基于X86的微型OS内核,一直在学习汇编,前来记录一下

汇编环境搭建

本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),还有一个hexdump for VSCode。
安装NASM,并添加到环境变量
安装QEMU,并将其添加到环境变量下

编写代码:(代码来自30天自制操作系统)

; hello-os
; TAB=4

; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code

        DB      0xeb, 0x4e, 0x90
        DB      "HELLOIPL"      ; 启动扇区名称(8字节)
        DW      512             ; 每个扇区(sector)大小(必须512字节)
        DB      1               ; 簇(cluster)大小(必须为1个扇区)
        DW      1               ; FAT起始位置(一般为第一个扇区)
        DB      2               ; FAT个数(必须为2)
        DW      224             ; 根目录大小(一般为224项)
        DW      2880            ; 该磁盘大小(必须为2880扇区1440*1024/512)
        DB      0xf0            ; 磁盘类型(必须为0xf0)
        DW      9               ; FAT的长度(必须是9扇区)
        DW      18              ; 一个磁道(track)有几个扇区(必须为18)
        DW      2               ; 磁头数(必须是2)
        DD      0               ; 不使用分区,必须是0
        DD      2880            ; 重写一次磁盘大小

        ; 书中作者说原因不明的两行代码我查到了,see https://www.ntfs.com/fat-partition-sector.htm
        DB      0               ; BPB_Physical_Disk_Number    DB   (This is related to the BIOS physical disk number. Floppy drives are numbered starting with 0x00 for the A disk. Physical hard disks are numbered starting with 0x80. The value is typically 0x80 for hard disks, regardless of how many physical disk drives exist, because the value is only relevant if the device is the startup disk.)
        DB      0               ; BPB_Current_Head            DB   (Not used by FAT file system)
        DB      0x29            ; BPB_Signature               DB   (Must be either 0x28 or 0x29 in order to be recognized by Windows NT.)
        DD      0xffffffff      ; BPB_Volume_Serial_Number    DD

        DB      "HELLO-OS   "   ; 磁盘的名称(必须为11字节,不足填空格)
        DB      "FAT12   "      ; 磁盘格式名称(必须是8字节,不足填空格)
        TIMES   18  DB 0        ; 先空出18字节

; 程序主体

        DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
        DB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
        DB      0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
        DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
        DB      0xee, 0xf4, 0xeb, 0xfd

; 信息显示部分

        DB      0x0a, 0x0a      ; 换行两次
        DB      "hello, world"
        DB      0x0a         ; 换行
        DB      0

        TIMES   0x1fe-($-$$) DB 0x00         ; 填写0x00直到0x001fe

        DB      0x55, 0xaa

; 启动扇区以外部分输出

        DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        TIMES   4600    DB 0
        DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        TIMES   1469432 DB 0
; 只是把 RESB 20 改成了 TIMES 20 DB 0

编译命令
vscode写好后直接终端运行

nasm -f bin day1.asm -o day1.img

-f指定输出格式为bin,本次生成的是img文件,因为后续调试要用,当然也可以生成其他类型文件

运行命令

qemu-system-i386 day1.img

运行结果:

调试环境搭建

调试汇编我们一般用bochs软件调试
下载链接

进入安装目录找到一个叫bochsdbg。exe的程序,我们调试主要用到这个程序
打开即可看到如下界面

在白色menu框中点击Disk & Boot选项,选择ATA channel 0下的First HD/CD on channel

修改如下参数

第一个指定为磁盘
第二个指定img文件路径
Heads:磁头数
Sectors per track :每磁道有几个扇区
这些参数其实是由上文的程序指定的程序指定的

DW      18              ; 一个磁道(track)有几个扇区(必须为18)
DW      2               ; 磁头数(必须是2)

之后点击Boot Options中的boot drive设置为disk即可

点击ok后会退到Bochs start menu菜单, 点击start即可启动调试
这里展示了一下

注意最下面的s 其实就是单步调试的意思,还有注意的是展示的一行汇编代码实际是未运行的,是下次运行的,比如这里的

jmpf 0xf000:e05b

实际未运行,需要输入s才能运行这一步

如果想要跳转个某个地址呢 比如0x7c00,该怎么办呢?
输入 b 0x7c00 b就是打断点 运行一下
再输入c就是continue继续的意思即可跳转到这
想要退出的话需要输入2次q即可
后续有什么命令在继续补充吧

需要注意的是汇编代码必须加前面那个fat代码,不然bochs无法调试,还有另一种方法是用FixVhdw,这个方法可以去参考B站UP谭玉刚的视频。这个软件是X86汇编 从实模式到保护模式的作者写的。

到此这篇关于X86汇编调试环境搭建的文章就介绍到这了,更多相关X86汇编调试环境内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 汇编环境搭建之如何快速安装和配置DOSBox

    掉头发掉的那些事: 本来之前是安装好了从老师那里复制过来DOSBox的,但是在挂载和编辑和调试哪里却被网上的各种方法搞得晕头转向,怎么弄也弄不好!咦?为什么我打不开edit??咦?为什么我生成不了.obj文件??咦???我想这也是很多汇编初学者同样会遇到的困扰吧~ 在被DOSBox折磨的痛不欲生之后,找遍网络终于在我大腿师兄哪里找到了一种正确快速安装和使用DOSBox的方法,这里与各位爱学习的小伙伴们分享一下,如果还有什么问题,欢迎各位小可爱们可以提出来我们一起讨论进步!!! 第一步  下载并安

  • 汇编语言指令大全 X86和X87汇编指令大全(带注释)

    目录 一.数据传输指令 1. 通用数据传送指令. 2. 输入输出端口传送指令. 3. 目的地址传送指令. 4. 标志传送指令. 二.算术运算指令 三.逻辑运算指令 四.串指令 五.程序转移指令 六.伪指令 七.处理机控制指令:标志处理指令 浮点运算指令集 1.控制指令 2.数据传送指令 3.比较指令 4.运算指令 其它 一.机械码,又称机器码. 二.需要熟练掌握的全部汇编知识(只有这么多) 三.常见修改(机器码) 四.两种不同情况的不同修改方法 一.数据传输指令 它们在存贮器和寄存器.寄存器和输

  • Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境

    1 工具准备 1)下载DOSBOX 工具介绍:DOSBox 是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台.目前,DOSBox 已经支持在 Windows.Linux.Mac OS X.BeOS .palmOS.Android .webOS.os/2等系统中运行.不少DOS下的游戏都可以直接在该平台上运行. 工具官网:http://www.dosbox.com/ 项目主页:http://sourceforge.net/projects/dosbox/ 下载

  • 汇编语言:x86汇编指令大全及其注意事项

    目录 Part 1:instruction Part 2 2.1 (逻辑)运算.移位等常用指令 2.1 (逻辑)运算.移位等常用指令 2.2 循环移位指令 2.3 数据串操作指令 2.4 逻辑运算指令 2.5 基于大小关系的跳转指令 2.6 基于单标志位的转移指令 Part 1:instruction 积少成多,持续更新.(这将会是一个极其漫长的过程) 表格中各条指令的顺序根据笔者所认为的重要或常用程度进行排序,仅供参考. Part 2 本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以

  • 汇编语言编译环境搭建过程

    1. 将masm615文件夹拷贝在C或D盘或其他(文件路径不要有中文文件夹) 2. 运行DOSBox(网上下载) 3. DOSBox软件中输入命令mount C C:\masm615(假设masm615安装在C盘),回车输入C: 4. 测试程序test1.asm DATA SEGMENT BUFFER DB "1 STYLE ONE ", 0DH, 0AH DB "2 STYLE TWO ", 0DH, 0AH DB "3 EXIT ", 0DH

  • 8086汇编开发环境搭建和Debug模式介绍(图文详解)

    1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难.好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践.在<汇编语言>中作者推荐通过windows环境下的masm和debug进行学习. masm介绍: masm是一款DOS下的汇编工具包,

  • 汇编语言环境搭建软件与教程

    1.编写汇编程序需要的环境: 1]dosbox 2]masm 上面两个软件打包下载:https://www.jb51.net/softs/709793.html 2.搭建步骤: 1]下载dosbox 2]安装dosbox 下载的dosbox解压: 运行exe,一直下一步即可: 3]下载masm masm用来编译汇编程序: 到网上搜索下载即可: 解压目录如下: 将解压masm,将文件放在特定的目录下: 例如:D:\GongJu\masm 4]挂载dosbox 目的是将dosbox的c盘挂载到mas

  • X86汇编调试环境搭建的过程

    最近毕设需要做一个基于X86的微型OS内核,一直在学习汇编,前来记录一下 汇编环境搭建 本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),还有一个hexdump for VSCode. 安装NASM,并添加到环境变量 安装QEMU,并将其添加到环境变量下 编写代码:(代码来自30天自制操作系统) ; hello-os ; TAB=4 ; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code

  • Koa2微信公众号开发之本地开发调试环境搭建

    最近沉迷吃鸡不能自拔,好久没更新文章了.后续将陆续完善<Koa2微信公众号开发>. 一.简介 关于微信公众号的介绍就省略了,自行搜索.注册过程也不说了.我们会直接注册测试号来实现代码.这将会是个全面讲解微信公众号开发的系列教程.本篇是该系列的第一篇,本地开发环境搭建以及接入微信. 在开始之前最好去看看开发者文档微信公众平台技术文档 二.本地开发调试环境搭建 2.1 开发环境 MacOs Node v8.9.1 Koa2 2.2 微信公众平台开发的基本原理 我们先来看看微信公众平台开发的基本原理

  • windows 2008r2+php5.6.28环境搭建详细过程

    安装IIS7 1.打开服务器管理器(开始-计算机-右键-管理-也可以打开),添加角色 直接下一步 勾选Web服务器(IIS),下一步,有个注意事项继续下一步(这里我就不截图了) 勾选ASP.NET会弹出以下窗口添加所需的角色服务,勾选CGI(这里根据个人情况勾选,CGI是必选的,否则PHP不生效的) 然后直接下一步安装即可,需要等待一小会! 此时已安装成功,关闭即可,打开IIS管理器,如下图 将原来的网站删除,添加新网站 网站名称随便起,物理路径即表示你的根路径,我在D盘建立个www文件夹作为根

  • Spring Data环境搭建实现过程解析

    本节作为主要讲解Spring Data的环境搭建 JPA Spring Data :致力于减少数据访问层(DAO)的开发量.开发者唯一要做的就是声明持久层的接口,其他都交给Spring Data JPA来帮你完成! 使用Spring Data JPA进行持久层开发需要的四个步骤: 配置Spring 整合 JPA 在Spring配置文件中配置Spring Data,让Spring 为声明的接口创建代理对象.配置了<jpa:repositories>后,Spring 初始化容器时将会扫描base-

  • golang语言中wasm 环境搭建的过程详解

    golang 安装 通过官方地址 下载.MacOS 也可通过 brew 快速安装: $ brew install golang $ go version go version go1.17.2 darwin/arm64 golang 环境测试 新建文件 main.go ,写入: package main import "fmt" func main() { fmt.Println("Hello World!") } 执行 go run main.go ,将输出: $

  • Visual Studio Code 配置C、C++ 文件debug调试环境的详细过程

    目录 vscodeC/C++ExtensionPack插件安装 vscodewindows端debug配置 windowMinGW环境安装 windows端C.CPP单文件debug调试 代码文件中文目录文件名,如何在window端正常调试 vscodeubuntu端debug配置 ubuntuC.CPP单文件调试 中文目录文件名,在ubuntu端正常调试 官方文档参考 大家好我是SLF,在午休的时候给嵌入式软件的同事,演示了一下如何用vscode调试应用端的CPP程序,他之前一直用的是Ultr

  • Yolov5服务器环境搭建详细过程

    目录 1 服务器搭建yolov5环境 1.1 创建环境 1.2 跟随官方指引 2 下载预训练权重 3 推理 4 测试 1 服务器搭建yolov5环境 1.1 创建环境 首先先的在本地环境下搭建一个我们的环境,名字设为yolo5-6 conda create -n yolov5-6 python=3.7#创建环境 conda activate yolov5-6#切换yolov5-6环境 创建包完成后,我们需要查看conda环境下是否有我们刚才创建的环境,通过以下的指令可以查看所有的环境. cond

  • Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建

    1.Vagrant (LInux)环境下 Xdebug 配置 : zend_extension=xdebug.so xdebug.remote_enable = 1 xdebug.remote_connect_back = 1 xdebug.remote_port = 9100 xdebug.idekey = "PHPSTORM" xdebug.remote_autostart = 1 xdebug.remote_handler="dbgp" xdebug.remo

  • Python selenium环境搭建实现过程解析

    一:自动化了解知识 工具安装 什么样的项目适合做自动化? 自动化测试一般在什么阶段开始实施? 你们公司自动化的脚本谁来维护?如何维护? 自动化用例覆盖率是多少? 自动化的原理 通过 webdriver 模块中的关键字和浏览器驱动以及页面元素定位进行操作达到模拟人工操作的效果 你们公司的自动化流程是如何展开的? 对自动化的业务需求进行评审 对自动化测试的场景进行选择, 测试工具的选择, 在功能用例中摘选出该场景的用例 根据评审后的场景输出自动化用例, 执行测试用例, 定期维护脚本 二.工具安装 安

随机推荐