【问题标题】:How to properly set a break point in bochs如何在 bochs 中正确设置断点
【发布时间】:2015-11-13 16:34:08
【问题描述】:

我想使用 bochs 来调试一个用 nasm 程序集编写的迷你操作系统。我希望找到一条指令来在源代码的某一行设置断点。但是从这里的文档中:http://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://bochs.sourceforge.net/doc/docbook 您只能在某个物理地址、虚拟地址或线性地址处设置断点。如何知道源代码中某行对应的地址是什么?

【问题讨论】:

  • 您需要从您的构建工具链(例如 objdump 或程序集列表文件)中提取该信息,当然您还需要了解您自己的加载程序(加载内容的位置)。
  • 如果您知道要设置断点的位置,并且您的操作系统已编译为 Intel 程序集,您可以在您的操作系统源代码中插入 0xcc aka int 3 指令(并重新编译)触发调试器中断。
  • 基于上面@Kenney 的评论,bochs supports magic breakpoints (xchg bx, bx) 因为int3 通常保留在虚拟机内,不会突破到 bochs 调试器。
  • 你在什么环境下,我很好奇你有能力编译带有gdbstub支持的Bochs吗?我不知道内部 Bochs 调试器,但我已经成功地使用 gdb 使用与 Bochs 的远程会话来使用 ELF32 格式二进制文件中的符号调试信息设置断点(nasm 可以产生此类信息)。您的操作系统是 16 位还是 32 位代码?
  • @MichaelPetch 它是在 Armv7l 上运行的 32 位 kubuntu。它是运行 kubuntu 的 chromebook。我从未尝试过使用 gdbstub 进行编译,但据说 bochs 是平台无关的。

标签: assembly nasm bochs


【解决方案1】:

我发现如果用--enable-disasm编译bochs,那么我可以在调试时使用命令'u'来反汇编代码。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2018-08-11
    • 2016-02-28
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多