文档章节

Bochs调试

l
 liuzhihe
发布于 2016/11/25 13:29
字数 854
阅读 430
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

1:bochs虚拟机启动调试 

bochsdbg -f bochsrc.bxrc

启动失败原因见bochs启动,

注:bochsdbg启动配置文件注释 display_library: sdl

启动后bash界面

linux0.00.bxrc  
========================================================================
                       Bochs x86 Emulator 2.6.8
                Built from SVN snapshot on May 3, 2015
                  Compiled on Nov 21 2016 at 16:50:01
========================================================================
00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'
00000000000i[      ] reading configuration from linux0.00.bxrc
------------------------------
Bochs Configuration: Main Menu
------------------------------

This is the Bochs Configuration Interface, where you can describe the
machine that you want to simulate.  Bochs has already searched for a
configuration file (typically called bochsrc.txt) and loaded it if it
could be found.  When you are satisfied with the configuration, go
ahead and start the simulation.

You can also start bochs with the -q option to skip these menus.

1. Restore factory default configuration
2. Read options from...
3. Edit options
4. Save options to...
5. Restore the Bochs state from...
6. Begin simulation
7. Quit now

Please choose one: [6]             

按照提示选择6回车启动模拟 bash如下所示

00000000000i[      ] set SIGINT handler to bx_debug_ctrlc_handler
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
<bochs:1> 

此时bochs会停留在BIOS入口等待打断点调试内核程序

2:bochs调试

     2.1:下断点

           2.1.1:设置在物理地址:lb/lbreak addr

           2.1.2:设置在虚拟地址:vb/vbreak seg:off  seg是段选择子,off是段内偏移。

           2.1.3:设置线性地址:lb/lbreak addr

       调试程序时可以根据编译生成Map文件来确定函数和标号的物理地址来通过上述命令设置断点(map文件生成及解释详见下一篇文章

     2.2: 禁用/启用断点

           bpd|bpe bn  禁用/启用断点,bn是断点号,可以用blist命令查询。

     2.3:删除断点

           d/del bn  bn是断点号,可以用blist命令查询。

     2.4:显示现有断点(断点号和地址)

           blist/info b/info break

     2.5:读写断点

           2.5.1:设置读写断点

                  watch read addr

                  watch write addr

           2.5.2:删除读写断点

                  unwatch read addr

                  unwatch write addr

                  unwatch  删除所有现有的读写断点

           2.5.3:显示现有读写断点

                  watch

     2.6: 执行控制

           2.6.1:单步执行(遇到call和int进入函数、中断内 即逐语句执行)

                  s/step [count]  单步执行count条指令,count 默认为 1

           2.6.2:单步执行(遇到call和int不进入函数、中断内 即逐过程执行)

                  p/n/next 

           2.6.3:继续执行,直到遇到断点

                  c/cont 

     2.7:查看寄存器

           2.7.1:查看通用寄存器

                  r/info r/info reg

           2.7.2: 查看段寄存器和段描述符寄存器

                  sreg

                  info gdt  查看全局描述符表的信息 

                  info idt  查看中断描述符表的信息

                  info ldt  查看局部描述符表的信息

                  info tss  查看任务状态段的信息

           2.7.3:查看控制寄存器

                  creg

     2.8:查看内存

           2.8.1:通过物理地址查看

                    xp [/nuf] addr

                  其中n指定显示的单元数,默认是1;

                  u 指定每个显示单元的大小(b表示字节、h表示字(2字节)、w表示双字(4                                              字节)),默认是w;

                  f 指定显示格式(x 十六进制、d 有符号十进制、u 无符号十进制、o 八进                                                     制、t 二进制、c 字符),默认是x

           2.8.2:通过线性地址查看

                  x [/nuf] addr  nuf的意义同上

     2.9:查看堆栈

           print-stack

     2.10:反编译

           u/disas/disassemble [/n] [start] [end]

           n是反编译的指令的数目,默认是1;start是开始反汇编的地址,默认是当前指令                                        指针所指的地址;end是结束反汇编的地址

     2.11:停止调试并退出

           q/quit/exit

l
粉丝 0
博文 26
码字总数 15924
作品 0
私信 提问
加载中
请先登录后再评论。
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.3K
0
Termdebug

Termdebug是一组实用程序来记录和回放的输入和输出一个终端程序。它的主要目标是帮助开发和调试终端程序。其他项目如termrec / termplay,nethack-recorder /播放器和脚本/ scriptreplay只记录...

匿名
2012/11/04
643
0
为visual studio code配置go开发环境(windows)

Windows下配置visual studio code开发go环境 1. 安装vs code 下载安装即可,然后设置autosave 很多材料说在file菜单就可以设置,但是我没找到。 我是在file->preference->user setting里,用...

一曲忠臣的战歌
2016/02/25
1.4W
15
Visual Studio 2012 中以管理员身份调试应用程序

今天写了一个程序,功能是获取任务管理器中的“描述”一列中的内容: C#代码如下: using System;using System.Collections.Generic;using System.Diagnostics;using System.IO;using Syste...

北风其凉
2016/04/11
2.3K
0
教你如何配置DTU的APN专网设置

为那DTU专网APN/VPDN配置说明 前提:为那DTU 采用的是双串口的通信模式,调试串口与通信串口分离。请将串口接到为那DTU调试串口。 1, 打开配置工具 configtool,->1,按照顺序选择相对应的串...

wilcolin
2014/12/05
41
0

没有更多内容

加载失败,请刷新页面

加载更多

spring集成kafka

1、引入依赖jar包 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency> 2、配置kafka信息 spring: kafka: bootstra......

简到珍
17分钟前
0
0
Spring Security 原理分析(一)

Spring Security 初始化 在普通的spring mvc 框架中,我们需要 @Configuration@EnableWebSecuritypublic class MyWebSecurityConfiguration extends WebSecurityConfigurerAdapter 手动添......

街角的小丑
24分钟前
18
0
查看 Linux 系统服务的 5 大方法

Linux 系统服务有时也称为守护程序,是在Linux启动时自动加载并在Linux退出时自动停止的系统任务。 在本文中,良许将为大家介绍如何列出 Linux 系统里所有运行的服务,以及如何检查某个服务的...

良许Linux
30分钟前
9
0
如何显示已上演的更改? - How do I show the changes which have been staged?

问题: I staged a few changes to be committed; 我上演了一些改变来承诺; how can I see the diff of all files which are staged for the next commit? 如何查看为下一次提交而暂存的所有...

技术盛宴
39分钟前
25
0
HashMap 的 defaultLoadFactor 的一种推导计算思路

1. 为啥需要 defaultLoadFactor 现在主流的 HashMap,一般的实现思路都是开放地址法+链地址法的方式来实现。 即数组 + 链表的实现方式,通过计算哈希值,找到数组对应的位置,如果已存在元素...

zhxhash
42分钟前
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部