Bochs

  Bochs就像一台真机一样,处理器在加电之后,要开始取指令并执行指令。

jmpf f000:e05b	;转移目标位置ROM-BIOS

  如图在左侧显示了该指令所在的物理内存地址 0x0000fffffff0

  但为什么是0x0000fffffff0?因为和8086不同,现代处理器在加电时,段寄存器CS的内容为,0xF000,指令指针寄存器IP的内容为0xFFF0,这就使得处理器地址线的低20位同样是0xFFFF0。在刚启动时,处理器将其余(高位部分)的地址线强制为高电平。因为当前Bochs虚拟机的地址线是32根,所以,初始发出的物理内存地址就是0x0000fffffff0了。

单步执行命令s(stop)

  Bochs执行一条指令,然后停下来,同时显示下一条将要执行地指令。



  注意,物理地址变了。现代的x86处理器在加电后,所有高端的地址线都被强制为高电平,直至遇到并执行了第一个段间转移指令。

n 指令

  单步执行有一个缺点,就是会陷入同一条指令地多次重复执行里,这时用n命令,Bochs将自动完成循环过程,并在循环体外地下一条指令前停住。

反汇编命令u

  反汇编地意思是根据机器指令代码生成可读地汇编语言指令,正好与汇编过程相反。u 命令可以使用两个参数,第一个参数是跟在 / 后面地数字,指定返汇编出多少条指令;第二条参数用于指定一个内存地址,Bochs从这里开始反汇编操作。

断点指令 b(break)

  就是事先设置一个(物理)内存地址,当处理器执行到这个地址时,就自动停下来了。然后再输入命令 c(continue) 是持续执行的意思,该命令要求处理器不间断地持续执行指令。

r(register)

  显示通用寄存器地内容

sreg(segment register)

  显示段寄存器地内容

xp(eXamine memory at Physical address)

  即,显示指定物理内存地址处地内容。xp命令每次只显示一个双子。要是显示多个双字,需要用 / 附加一个数据量。然后,还应当指定一个物理内存地址。

info eflags

  用于显示标志寄存器地状态,如果标志寄存器名称是小写,说明该标志为0;否者该标志状态为1。

q(quit)

  退出Bochs调试过程

Bochs调试指令的更多相关文章

  1. 用bochs调试自己写的系统引导代码

    1 安装和配置bochs 首先从bochs.sourceforge.net里面把BOCHS给download下来,鉴于Windows的普及,仅仅谈BOCHS在win下的使用方法,其实在其它的OS中方法 ...

  2. 利用bochs调试Linux 0.11内核

    引导程序调试软件bochs,跟配套的linux0.11内核img下载地址分别是: http://sourceforge.net/projects/bochs/http://www.oldlinux.o ...

  3. bochs 调试 com 文件 magicbreak

    参考 https://blog.csdn.net/housansan/article/details/41833581 在网上看到2中解决此问题的方法:1.使用dos下的debug32工具单步跟踪pm ...

  4. 使用bochs调试汇编程序

    使用bochs调试汇编程序 前面我们已经搭建好了bochs的环境,并且将我们的汇编程序写入了硬盘里面,现在我们来看看如何通过bochs来调试我们的程序. 前文:https://www.cnblogs. ...

  5. bochs调试命令

    Bochs几条基本指令: 通过物理地址查看内存时,可以不加参数'/nuf': 其中n指定显示的单元数,默认是1: u 指定每个显示单元的大小(b表示字节.h表示字(2字节).w表示双字(4字节)),默 ...

  6. Bochs调试加载符号文件的问题

    1. Bochs中的调试命令ldsym没有触发的情况. 参考:http://www.ibm.com/developerworks/cn/linux/sdk/lex/ Lex 代表 Lexical An ...

  7. gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)

    最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...

  8. 如何制作一个可以用Bochs调试的最新内核系统盘

    参考:http://blog.chinaunix.net/uid-26207112-id-3332621.html 1. 正确地创建一个包含启动分区的磁盘映像 1.1 创建磁盘映像文件 首先需要对磁盘 ...

  9. Bochs调试VirtualBox生成的VDI映像

    将VDI映像转换成Bochs支持的img映像 1: vboxmanage clonehd source.vdi destination.img --format RAW 在bochsrc.txt中引用 ...

  10. GDB反向调试 + 指令记录+函数历史记录

    http://blog.chinaunix.net/uid-26941022-id-3199961.html b.c void fun(int a, int b){ int c; c=a+b; } v ...

随机推荐

  1. 【Android 抓包对抗】代理检查绕过

    1. 安装apk,点进去发现一点就挂 2. apk 拖入到jadx中观察,发现多出检查,一旦满足条件就会退出 .... if (((ConnectivityManager) getSystemServ ...

  2. MySQL单表能存储多少条数据?

    MySQL是中小型网站普遍使用的数据库之一,然而,很多人并不清楚MySQL到底能支持多大的数据量,甚至对它产生误解.MySQL单表的上限,主要与操作系统支持的最大文件大小有关.事实上MySQL能承受的 ...

  3. vue运行时报错Error from chokidar

    原文博客地址 Error from chokidar (/home/youyou/文档/vue/vuetask01/node_modules/lodash): Error: ENOSPC: Syste ...

  4. AI开发之路

    常见报错解决 Dilb库安装的三种方法 yolov5项目cuda错误解决 环境准备 Anaconda-用conda创建python虚拟环境 Python-pip创建虚拟环境 jupyter noteb ...

  5. 常用 Maven 插件介绍

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  6. web模块化

    CommonJS-----是一种后端js规范,是nodejs遵循的一种编写js模块的规范引入模块-------require('模块路径')定义模块 ------ exports.模块名= funct ...

  7. 聊聊微信小程序的流式(stream)响应请求

    场景:类似ChatGPT的逐字显示效果. 流程:服务端我用Python的flask框架(向外提供API接口)实现,服务部署在replit上,Python调用azure 的chatgpt服务(需要申请) ...

  8. 3 - 任务调度算法 & 同步与互斥 &队列

    之前的都是按照优先级不同允许抢占(不讲道理),不管你在做什么,轮到优先级最高的任务,直接抢占执行 怎样才能讲道理呢?稍微等等嘛,等我做完活你再做   1 支持抢占,0不支持抢占  同优先级任务是否交替 ...

  9. manjaro安装/卸载gnome/kde桌面环境

    安装gnome桌面环境 步骤 1. 在运行以下教程之前,请确保我们的系统是最新的: sudo pacman -Syu 步骤 2. 在 Manjaro 20 上安装 GNOME 桌面. 现在我们通过执行 ...

  10. 像使用stl一样使用线段树 ——AtCoder Library(转载https://zhuanlan.zhihu.com/p/459579152)

    地址:https://zhuanlan.zhihu.com/p/459579152 我这里翻译一下官方的文档. 首先需要满足几个性质. (注意 ∗ 是个操作,不是单纯的一个乘号) 1)操作满足结合律 ...