Assembly 如何在bochs中正确设置断点

Assembly 如何在bochs中正确设置断点,assembly,nasm,bochs,Assembly,Nasm,Bochs,我想用bochs调试一个用nasm汇编编写的迷你操作系统。我希望在源代码中找到一条在某一行设置断点的指令。但是从这里的文档来看:您只能在某个物理地址、虚拟地址或线性地址设置断点。如何知道源代码中某一行对应的地址?我发现,如果使用--enable disasm编译bochs,那么我可以在调试时使用命令“u”来反汇编代码。您需要从构建工具链(例如objdump或程序集列表文件)中提取该信息,当然,你需要知道你自己的加载程序(它在哪里加载东西)。如果你知道你想在哪里设置断点,并且你的操作系统被编译成英

我想用bochs调试一个用nasm汇编编写的迷你操作系统。我希望在源代码中找到一条在某一行设置断点的指令。但是从这里的文档来看:您只能在某个物理地址、虚拟地址或线性地址设置断点。如何知道源代码中某一行对应的地址?

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

您需要从构建工具链(例如objdump或程序集列表文件)中提取该信息,当然,你需要知道你自己的加载程序(它在哪里加载东西)。如果你知道你想在哪里设置断点,并且你的操作系统被编译成英特尔汇编,你可以在你的操作系统源代码中插入一条
0xcc
aka
int 3
指令(并重新编译)来触发调试器中断,(
xchg bx,bx
)由于
int3
通常停留在虚拟机内部,不会中断到bochs调试器。您在什么环境中,我很好奇您是否能够使用gdbstub支持编译bochs?我不知道内部bochs调试器,但我已成功使用gdb,使用到bochs的远程会话来设置breakpoints使用ELF32格式二进制文件中的符号调试信息(nasm可以生成此类信息)。您的操作系统是16位还是32位代码?@MichaelPetch它是32位kubuntu,运行在Armv7l上。它是一个chromebook,运行kubuntu。我从未尝试使用gdbstub编译,但bochs据说是独立于平台的。